গিট আপডেট সাবমডিউলগুলি পুনরাবৃত্তি করে


282

আমার প্রকল্পের পদক্ষেপ

ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)

আমি কীভাবে পুনরাবৃত্তভাবে সাবমডিউলগুলি আপডেট করতে পারি? আমি ইতিমধ্যে কিছু গিট কমান্ড চেষ্টা করেছি (প্রজেক্টএ রুটে)

git submodule foreach git pull origin master

অথবা

git submodule foreach --recursive git pull origin master

তবে টুইগের ফাইলগুলি টানতে পারে না।


উত্তর:


607
git submodule update --recursive

আপনি সম্ভবত --init বিকল্পটি ব্যবহার করতে চাইবেন যা এটি কোনও অবিচ্ছিন্ন সাবমডিউলগুলি সূচনা করতে পারে:

git submodule update --init --recursive

দ্রষ্টব্য: গিতের কিছু পুরানো সংস্করণে , আপনি যদি --initবিকল্পটি ব্যবহার করেন তবে ইতিমধ্যে-সূচিত সাবমডিউলগুলি আপডেট করা যাবে না। সেক্ষেত্রে আপনার --initঅপশন ছাড়াও কমান্ডটি চালানো উচিত ।


1
রিকার্সিভ অ্যাড সাবমডিউল সম্পর্কে কীভাবে? "গিট সাবমডিউল ফ্রেমওয়ার্কএ.git যোগ করুন" ফ্রেমওয়ার্কএ এর ফাইলগুলি কেবল টানুন।
complez

2
আপনি কেবল "গিট সাবমডিউল অ্যাড ব্লাহ" করতে পারেন এবং তারপরে "গিট সাবমডিউল আপডেট --init --recursive" করতে পারেন।
ড্র্যাগ করুন

এটি কি আমার নীচের চেয়ে আলাদা?
উইলিয়াম এন্টারিকেন

3
@ ইরিনাউ ইতিমধ্যে-প্রাথমিককৃত সাবমডিউলগুলি সম্পর্কে ব্যবহৃত নোটটি --initব্যবহার না করা থাকলে আপডেট করা হবে না তা গিট ২.২.২ এ আমার অভিজ্ঞতার সাথে মেলে না। আমি শীর্ষ-স্তরের এবং নেস্টেড উভয় সাবমডিউলই দেখতে পাচ্ছি যেগুলি ব্যবহার করার সময় ইতিমধ্যে সঠিক কমিট পরীক্ষা করে নেওয়া শুরু করা হয়েছিল git submodule update --init --recursiveএবং আমি মনে করি যে আপনাকে কমান্ডটি চালানো এবং ছাড়া করা দরকার --initতা কেবল ভুল। যদি না হয় কেউ প্রমাণ হিসাবে দেখাতে পারে যে এটি আচরণ এটি নয় বা প্রমাণ করতে পারে যে এটি সংস্করণগুলির মধ্যে পরিবর্তিত হয়েছে এবং একবার সত্য হয়েছিল, তবে আমি একে একে সম্পাদনা করার পরিকল্পনা করছি।
মার্ক অ্যামেরি

3
@ মার্কআমেরি, আমি মনে করি এটি গিটের কিছু সংস্করণে একটি সমস্যা যা আমি মনে করতে পারি না। আমি এটি মাত্র ১.৯.৩ এ পরীক্ষা করেছি এবং মনে হচ্ছে যে সমস্যাটির আর অস্তিত্ব নেই। আমি অস্পষ্ট "পুরানো সংস্করণ" উল্লেখ করার জন্য উত্তরটি আপডেট করেছি। কেউ যদি কোনও সংস্করণটি এই আচরণটি পরিবর্তন করে তা নির্দিষ্ট করতে পারে তবে তা দুর্দান্ত great
ড্র্যাগ করুন

35

আমি যেভাবে ব্যবহার করি তা হ'ল:

git submodule update --init --recursive
git submodule foreach --recursive git fetch
git submodule foreach git merge origin master

6
আমি শেষ লাইনটি পরিবর্তনের সাথে কাজ করেছি:git submodule foreach git pull --ff-only origin master
গিলাদ পেলেগ

2
আমি সর্বশেষ লাইনে - রিসার্সিভ যুক্ত করব: "গিট সাবমডিউল ফোরচ - রিসার্সিভ গিট মার্জ অরিজিন মাস্টার" অন্যথায় আপনি যখন কোনও সাবমডিউল আপডেট করেছেন তখন আপনি একটি নোংরা সাবমডিউল পেতে পারেন।
মাইকেল স্কট কুথবার্ট

গত তিন ঘন্টা ধরে এটি খুঁজছিলেন। ধন্যবাদ জনাব. এই যোগ করার জন্য, আপনার কাছে যেমন সংগঠনের জন্য এই কমান্ড ব্যবহার করতে পারেন: git submodule foreach --recursive 'git commit -a | :':এটি লুপ ফলাফলের নির্বিশেষে করে তোলে। লিংকটি দেখুন স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / ১৯7২৮৯৩৩/২
জাতপক্ষ Pidgeon

17

যেহেতু এটি ঘটতে পারে যে আপনার সাবমোডিয়ুলের ডিফল্ট শাখাটি নয় master (যা আমার ক্ষেত্রে অনেক কিছু ঘটে), আমি সম্পূর্ণ গিট সাবমডিয়ুলগুলি আপগ্রেডগুলি স্বয়ংক্রিয়ভাবে এটি করব:

git submodule init
git submodule update
git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

আমি আমার জেনেরিক মেকফিলে এই কমান্ডটি যুক্ত করার চেষ্টা করেছি তবুও জিএনইউকে সহজ উদ্ধৃতিতে উপস্থিত থাকা সত্ত্বেও ... (...) অনুক্রমের ব্যাখ্যাটিকে উপেক্ষা করার জন্য আমি এখনও জোর করে আছি । কারও ধারণা আছে?
সেবাস্তিয়ান ভারেটে

আপনার কমান্ড যা আমি আপনাকে ধন্যবাদ প্রয়োজন ছিল! কিন্তু আমি পাবেন: Entering 'Core' fatal: ambiguous argument 'origin/HEAD': unknown revision or path not in the working tree.যেখানে Core submodule হয়
Sanandrea

এছাড়াও, আমি কি এই মন্তব্যটি জিনিসটা প্রয়োজন অনুমান stackoverflow.com/a/18008139/3383543
আহমাদ AlMughrabi

পুনরাবৃত্তির বিকল্প না থাকার অর্থ এটি কেবল তখনই কাজ করে যদি আপনার সাবমোডিয়ুলগুলি আবার সাবমডিউলগুলি অন্তর্ভুক্ত না করে।
এরিকবওয়ার্ক

15

সাম্প্রতিক গিটে (আমি v2.15.1 ব্যবহার করছি), নিম্নলিখিতগুলি সাবস্ট্রোডগুলিতে পুনরাবৃত্তভাবে আপস্ট্রিম সাবমডিউল পরিবর্তনগুলিকে মার্জ করবে will

git submodule update --recursive --remote --merge

আপনি --initকোনও অবিচ্ছিন্ন সাবমোডিয়াল আরম্ভ করতে যোগ করতে পারেন এবং --rebaseআপনি যদি মার্জ করার পরিবর্তে পুনরায় চালু করতে চান তবে ব্যবহার করতে পারেন।

আপনার পরে পরিবর্তনগুলি করা দরকার:

git add . && git commit -m 'Update submodules to latest revisions'

এটি, আমি ভেবেছিলাম আমি কিছু ভুল করছি তবে আপনার উত্তর আমাকে নিশ্চিত করেছে যে git submodule update --remote my-dir/my-submoduleঠিক তেমন কাজ করে
iomv
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.