সাবমোডুলের সংগ্রহস্থল ধরে নিলে আপনি যে প্রতিশ্রুতিটি ব্যবহার করতে চান তা ধারণ করে (সুপারিশটির বর্তমান অবস্থা থেকে উত্সাহিত প্রতিশ্রুতির বিপরীতে), এটি করার দুটি উপায় রয়েছে।
প্রথমটির জন্য আপনাকে যে সাবডমডিউলটি ব্যবহার করতে চান তা থেকে ইতিমধ্যে কমিট জানতে হবে। এটি সরাসরি সাব-মডেলটি সামঞ্জস্য করে তারপরে সুপার-প্রজেক্টটি আপডেট করে "ভিতরে, আউট" থেকে কাজ করে। দ্বিতীয়টি "বাইরের, ইন" থেকে সুপার-প্রোজেক্টের প্রতিশ্রুতি সন্ধান করে যা সাবমডিউলটি সংশোধন করে এবং তারপরে সুপার-প্রোজেক্টের সূচকটি পুনরায় নির্ধারণ করে একটি ভিন্ন সাব-মডুল কমিটকে বোঝায় works
ওলটানো
সাবমডিউলে আপনি কোন কমিটিকে ব্যবহার করতে চান তা যদি আপনি ইতিমধ্যে জানেন তবে আপনি যে প্রতিশ্রুতিটি চান তা cd
পরীক্ষা করে দেখুন git add
এবং git commit
এটি সুপার-প্রোজেক্টে ফিরে আসে।
উদাহরণ:
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
ওহো, কেউ একটি সুপার-প্রকল্প প্রতিশ্রুতিবদ্ধ যা সাবমডিউলে একটি অপ্রকাশিত প্রতিশ্রুতি বোঝায় sub
। একরকম, আমরা ইতিমধ্যে জানি যে আমরা সাব-মডিউলটি কমিট করতে চাই 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
। সেখানে যান এবং সরাসরি এটি পরীক্ষা করে দেখুন।
সাবমডিউলে চেকআউট
$ cd sub
$ git checkout 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Note: moving to '5d5a3ee314476701a20f2c6ec4a53f88d651df6c' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 5d5a3ee... quux
$ cd ..
যেহেতু আমরা একটি প্রতিশ্রুতি পরীক্ষা করছি, এটি সাবমডিউলে একটি পৃথক হেড উত্পাদন করে। আপনি যদি নিশ্চিত করতে চান যে সাবমডিউলটি একটি শাখা ব্যবহার git checkout -b newbranch <commit>
করছে , তবে কমিটে একটি শাখা তৈরি এবং চেকআউট ব্যবহার করুন বা আপনি যে শাখাটি চান তা চেকআউট করুন (যেমন ডগায় পছন্দসই প্রতিশ্রুতিযুক্ত একটি)।
সুপার-প্রকল্প আপডেট করুন
সাব-মডুলেলে একটি চেকআউট সুপার-প্রোজেক্টে কাজের গাছের পরিবর্তনে প্রতিফলিত হয়। সুতরাং আমাদের সুপার-প্রজেক্টের সূচকে পরিবর্তন আনতে হবে এবং ফলাফলগুলি যাচাই করতে হবে।
$ git add sub
ফলাফলগুলি পরীক্ষা করুন
$ git submodule update
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
সাব-মডুল আপডেটটি নিরব ছিল কারণ সাবমডিউলটি ইতিমধ্যে নির্দিষ্ট প্রতিশ্রুতিতে রয়েছে। প্রথম পার্থক্য দেখায় যে সূচক এবং ওয়ার্কট্রি একই রকম। তৃতীয় তফাতটি দেখায় যে একমাত্র পর্যায়ের পরিবর্তনটি sub
সাবমডিউলটিকে একটি ভিন্ন অঙ্গীকারের দিকে নিয়ে যাচ্ছে moving
সমর্পণ করা
git commit
এটি স্থির-আপ সাব-মডিউল এন্ট্রি করে।
বাইরে
সাবমডিউলটি থেকে আপনার কোন প্রতিশ্রুতি ব্যবহার করা উচিত তা যদি আপনি নিশ্চিত না হন তবে আপনি গাইড করার জন্য সুপারপজেক্টের ইতিহাসটি দেখতে পারেন। আপনি সরাসরি সুপার-প্রকল্প থেকে রিসেট পরিচালনা করতে পারেন।
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
এটি উপরের মতো একই অবস্থা। তবে এবার আমরা সাবমডিউলে ডুবানোর পরিবর্তে সুপার-প্রকল্প থেকে এটি ঠিক করার দিকে মনোনিবেশ করব।
সুপার-প্রকল্পের এরেন্ট কমিট সন্ধান করুন
$ git log --oneline -p -- sub
ce5d37c local change in sub
diff --git a/sub b/sub
index 5d5a3ee..e47c0a1 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
+Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
bca4663 added sub
diff --git a/sub b/sub
new file mode 160000
index 0000000..5d5a3ee
--- /dev/null
+++ b/sub
@@ -0,0 +1 @@
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
ঠিক আছে, দেখে মনে হচ্ছে এটি খারাপ হয়ে গেছে ce5d37c
, তাই আমরা এর পিতা-মাতার কাছ থেকে সাব-মডিউলটি পুনঃস্থাপন করব ce5d37c~
।
বিকল্পভাবে, আপনি প্যাচ পাঠ্য ( 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
) থেকে সাবমডিউলের প্রতিশ্রুতি নিতে পারেন এবং তার পরিবর্তে উপরের "অভ্যন্তরীণ, আউট" প্রক্রিয়াটি ব্যবহার করতে পারেন।
সুপার-প্রকল্পে চেকআউট
$ git checkout ce5d37c~ -- sub
এটি সুপার-প্রোজেক্টে sub
কমিট করার জন্য সাবমোডুল এন্ট্রিটিকে পুনরায় সেট করে ce5d37c~
।
সাবমডিউল আপডেট করুন
$ git submodule update
Submodule path 'sub': checked out '5d5a3ee314476701a20f2c6ec4a53f88d651df6c'
সাবমডিউল আপডেট ঠিক আছে (এটি একটি বিচ্ছিন্ন হেড নির্দেশ করে)।
ফলাফলগুলি পরীক্ষা করুন
$ git diff ce5d37c~ -- sub
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
প্রথম ডিফ দেখায় যা sub
এখন একই রকম ce5d37c~
। দ্বিতীয় পার্থক্য দেখায় যে সূচক এবং ওয়ার্কট্রি একই are তৃতীয় ভিন্নতা দেখায় যে একমাত্র পর্যায়ের পরিবর্তনটি sub
সাবমডিউলটিকে একটি ভিন্ন অঙ্গীকারের দিকে নিয়ে যাচ্ছে moving
সমর্পণ করা
git commit
এটি স্থির-আপ সাব-মডিউল এন্ট্রি করে।