আমার গিট সাবমডিউল হেড কেন মাস্টার থেকে আলাদা?


162

আমি গিট সাবমডিউল ব্যবহার করছি। সার্ভার থেকে পরিবর্তনগুলি টানার পরে, অনেক সময় আমার সাবমডিউল হেড মাস্টার শাখা থেকে পৃথক হয়ে যায়।

কেন এমন হয়?

আমাকে সর্বদা করতে হবে:

git branch
git checkout master

আমি কীভাবে নিশ্চিত করতে পারি যে আমার সাবমডিউল সর্বদা মাস্টার শাখায় নির্দেশ করে?


1
আপনি এই উত্তরটি পড়েছেন? stackoverflow.com/questions/1777854/…
জনি জেড

@ বিটুইউ আমি সাবট্রি এবং গুগল রেপোতে তাকালাম। আমি এখনও নিখুঁত সমাধান পাইনি :(
om471987

1
সিআই পরিবেশে গিটসবুডিউডুলসের সাথে আমার অভিজ্ঞতাটি ভয়াবহ, অন্য কিছু লোকের আরও ভাল অভিজ্ঞতা থাকতে পারে।
বিটোয়িউ

@ জননিজ ধন্যবাদ আমি বুঝতে পেরেছিলাম যে সাবমডিউল গাছের মাথা নয়, প্রতিশ্রুতিবদ্ধ to তবে কেন শাখা থেকে বিচ্ছিন্ন। আপনার যদি একটি শাখা থাকে তবে এটি ডিফল্টরূপে এটি সংযুক্ত করা উচিত নয়
om471987

3
আপনি খারাপ শুনেছেন বলে কেবল সাবমোডিয়ালগুলি বরখাস্ত করার জন্য খুব তাড়াতাড়ি করবেন না। আপনি যদি অবিচ্ছিন্ন ইন্টিগ্রেশন চান তবে এগুলি একটি দুর্বল সমাধান, তবে আপনি যদি কোনও বাহ্যিক প্রকল্প থেকে কোড এম্বেড করতে চান তবে এগুলি একটি নিকট-নিখুঁত সমাধান and আপনি প্রায়শই এমন একটি অনুশীলন হ'ল যদি আপনি কোনও সংগঠনবিহীন মডিউল যা আপনার সংস্থা দ্বারা নিয়ন্ত্রিত হয় না সাথে সংহত করে চলেছেন। সমস্যাটি হ'ল এগুলি অন্যান্য ধরণের সমস্ত পরিস্থিতিতে একটি লোভনীয় সমাধান যেখানে তারা মোটেই খুব ভাল কাজ করে না। সর্বোত্তম পরামর্শ হ'ল তারা কীভাবে কাজ করে এবং আপনার দৃশ্যের মূল্যায়ন করে।
সারা জি

উত্তর:


176

সম্পাদনা করুন:

বৈধ সমাধানের জন্য @ সিম্বা উত্তর দেখুন

submodule.<name>.updateআপনি কী পরিবর্তন করতে চান, ডকগুলি দেখুন - ডিফল্টরূপেcheckout
submodule.<name>.branch ট্র্যাক করার জন্য দূরবর্তী শাখাকে নির্দিষ্ট করুন - ডিফল্টmaster


পুরানো উত্তর:

ব্যক্তিগতভাবে আমি এখানে উত্তরগুলি ঘৃণা করি যা সরাসরি বাহ্যিক লিঙ্কগুলিতে সরাসরি সময় নিয়ে কাজ করা বন্ধ করে দিতে পারে এবং আমার উত্তরটি এখানে পরীক্ষা করতে পারে (প্রশ্নটির সদৃশ না হলে) - যা অন্যান্য বিষয়ের লাইনের মধ্যে বিষয়টিকে অন্তর্ভুক্ত করে এমন প্রশ্নের দিকে পরিচালিত করে, তবে সামগ্রিক সমান: "আমি উত্তর না দিয়ে, ডকুমেন্টেশন পড়ুন। "

সুতরাং প্রশ্নটিতে ফিরে: কেন এটি ঘটে?

আপনি বর্ণিত পরিস্থিতি

সার্ভার থেকে পরিবর্তনগুলি টানার পরে, অনেক সময় আমার সাবমডিউল হেড মাস্টার শাখা থেকে পৃথক হয়ে যায়।

এটি একটি সাধারণ ক্ষেত্রে যখন কেউ সাবমডিউলগুলি প্রায়শই ব্যবহার করে না বা কেবলমাত্র সাবমডিউলগুলি দিয়ে শুরু করেছে । আমি বিশ্বাস করি যে আমি উল্লেখ করে সঠিক, যে আমরা সকলেই এমন এক পর্যায়ে এসেছি যেখানে আমাদের সাবমডিউলের মাথা আলাদা হয়ে যায়।

  • কারণ: আপনার সাবমডিউল সঠিক শাখা ট্র্যাক করছে না (ডিফল্ট মাস্টার)।
    সমাধান: নিশ্চিত হয়ে নিন যে আপনার সাবমডিউলটি সঠিক শাখাটি অনুসরণ করছে
$ cd <submodule-path>
# if the master branch already exists locally:
# (From git docs - branch)
# -u <upstream>
# --set-upstream-to=<upstream>
#    Set up <branchname>'s tracking information so <upstream>
#    is considered <branchname>'s upstream branch.
#    If no <branchname> is specified, then it defaults to the current branch.
$ git branch -u <origin>/<branch> <branch>
# else:
$ git checkout -b <branch> --track <origin>/<branch>
  • কারণ: আপনার প্যারেন্ট রেপো সাবমডিউলগুলি শাখার ট্র্যাক করতে কনফিগার করা হয়নি।
    সমাধান: নিম্নলিখিত দুটি কমান্ডের সাহায্যে আপনার সাবমোডিয়ুলটিকে নতুন সাবমডিউল যুক্ত করে এর দূরবর্তী শাখাকে ট্র্যাক করুন।
    • প্রথমে আপনি গিটকে আপনার রিমোটটি ট্র্যাক করতে বলুন <branch>
    • আপনি গিটকে পুনরায় সঞ্চালন করতে বা চেকআউটের পরিবর্তে মার্জ করতে বলে
    • আপনি গিটকে রিমোট থেকে আপনার সাবমডিউলটি আপডেট করতে বলেছেন।
    $ git submodule add -b <branch> <repository> [<submodule-path>]
    $ git config -f .gitmodules submodule.<submodule-path>.update rebase
    $ git submodule update --remote
  • আপনি যদি নিজের বিদ্যমান সাব-মডিউলটি এভাবে যুক্ত না করেন তবে আপনি সহজেই এটি ঠিক করতে পারেন:
    • প্রথমে আপনি নিশ্চিত করতে চান যে আপনার সাবমডিউলে শাখাটি যাচাই করা হয়েছে যা আপনি ট্র্যাক করতে চান।
    $ cd <submodule-path>
    $ git checkout <branch>
    $ cd <parent-repo-path>
    # <submodule-path> is here path releative to parent repo root
    # without starting path separator
    $ git config -f .gitmodules submodule.<submodule-path>.branch <branch>
    $ git config -f .gitmodules submodule.<submodule-path>.update <rebase|merge>

সাধারণ ক্ষেত্রে, আপনি ইতিমধ্যে আপনার সনাক্ত মাথাটি ইতিমধ্যে ঠিক করেছেন যেহেতু এটি উপরের কনফিগারেশন সমস্যার সাথে সম্পর্কিত।

সংশোধন মাথা ফিক্সিং যখন .update = checkout

$ cd <submodule-path> # and make modification to your submodule
$ git add .
$ git commit -m"Your modification" # Let's say you forgot to push it to remote.
$ cd <parent-repo-path>
$ git status # you will get
Your branch is up-to-date with '<origin>/<branch>'.
Changes not staged for commit:
    modified:   path/to/submodule (new commits)
# As normally you would commit new commit hash to your parent repo
$ git add -A
$ git commit -m"Updated submodule"
$ git push <origin> <branch>.
$ git status
Your branch is up-to-date with '<origin>/<branch>'.
nothing to commit, working directory clean
# If you now update your submodule
$ git submodule update --remote
Submodule path 'path/to/submodule': checked out 'commit-hash'
$ git status # will show again that (submodule has new commits)
$ cd <submodule-path>
$ git status
HEAD detached at <hash>
# as you see you are DETACHED and you are lucky if you found out now
# since at this point you just asked git to update your submodule
# from remote master which is 1 commit behind your local branch
# since you did not push you submodule chage commit to remote. 
# Here you can fix it simply by. (in submodules path)
$ git checkout <branch>
$ git push <origin>/<branch>
# which will fix the states for both submodule and parent since 
# you told already parent repo which is the submodules commit hash 
# to track so you don't see it anymore as untracked.

তবে আপনি যদি সাবমডিউলের জন্য ইতিমধ্যে স্থানীয়ভাবে কিছু পরিবর্তন করতে এবং পরিচালনা করার ব্যবস্থা করে থাকেন তবে এগুলিকে রিমোটে ঠেলাঠেলি করে যখন আপনি 'গিট চেকআউট' কার্যকর করেন, গিট আপনাকে জানায়:

$ git checkout <branch>
Warning: you are leaving 1 commit behind, not connected to any of your branches:
If you want to keep it by creating a new branch, this may be a good time to do so with:

একটি অস্থায়ী শাখা তৈরি করার প্রস্তাবিত বিকল্পটি ভাল হতে পারে এবং তারপরে আপনি কেবল এই শাখাগুলি মার্জ করতে পারেন তবে আমি ব্যক্তিগতভাবে কেবল git cherry-pick <hash>এই ক্ষেত্রে ব্যবহার করব would

$ git cherry-pick <hash> # hash which git showed you related to DETACHED HEAD
# if you get 'error: could not apply...' run mergetool and fix conflicts
$ git mergetool
$ git status # since your modifications are staged just remove untracked junk files
$ rm -rf <untracked junk file(s)>
$ git commit # without arguments
# which should open for you commit message from DETACHED HEAD
# just save it or modify the message.
$ git push <origin> <branch>
$ cd <parent-repo-path>
$ git add -A # or just the unstaged submodule
$ git commit -m"Updated <submodule>"
$ git push <origin> <branch>

যদিও আরও কিছু মামলা রয়েছে তবে আপনি আপনার সাবমোডিয়ালগুলিকে ডিটচড হেড অবস্থায় নিয়ে যেতে পারেন, আমি আশা করি যে আপনি আপনার বিশেষ কেসটি কীভাবে ডিবাগ করবেন সে বিষয়ে আপনি আরও খানিকটা বুঝতে পেরেছেন।


2
হেড বিচ্ছিন্ন হ'ল এর ডিফল্ট আচরণ git submodule update --remote। সিম্বার উত্তরটি দয়া করে দেখুন, আমি মনে করি এটি সঠিক উত্তর হওয়া উচিত।
magomar

78

একটি যোগ করার পদ্ধতি branchবিকল্প মধ্যে .gitmoduleহয় সম্পর্কিত নয় এ সব submodules এর বিচু্যত আচরণের। @ এমকুংলা থেকে প্রাপ্ত পুরানো উত্তরটি ভুল বা অপ্রচলিত।

থেকে git submodule --help, মস্তক বিচ্ছিন্ন ডিফল্ট আচরণ এর git submodule update --remote

প্রথমত, ট্র্যাক করার জন্য কোনও শাখা নির্দিষ্ট করার দরকার নেইorigin/masterট্র্যাক করার জন্য এটি ডিফল্ট শাখা।

--remote

সাবমডিউলটি আপডেট করার জন্য সুপারপ্রজেক্টের রেকর্ড করা SHA-1 ব্যবহার না করে সাবমডিউলের দূরবর্তী ট্র্যাকিং শাখার স্থিতি ব্যবহার করুন। ব্যবহৃত রিমোটটি শাখার রিমোট ( branch.<name>.remote), এ ডিফল্ট হয়origin । রিমোট শাখাটি ডিফল্ট হিসাবেmaster ব্যবহৃত হয়েছিল

কেন

তাহলে কেন হেডকে আলাদা করা হয় update? এই দ্বারা ঘটিত হয় ডিফল্ট মডিউল আপডেট আচরণ: checkout

--checkout

সাবমডিউলে একটি বিচ্ছিন্ন হেডে সুপারপ্রজেক্টে রেকর্ড করা কমিট চেক আউট করুন । এটি ডিফল্ট আচরণ , এই বিকল্পটির প্রধান ব্যবহারটি submodule.$name.updateঅন্য কোনও মানকে সেট করা হলে ওভাররাইড করা checkout

এই অদ্ভুত আপডেট আচরণটি ব্যাখ্যা করার জন্য, আমাদের বুঝতে হবে সাবমডিউলগুলি কীভাবে কাজ করে?

প্রো গিট বইয়ের সাবমোডিয়ালগুলি শুরু করা থেকে উদ্ধৃতি

যদিও sbmodule DbConnectorআপনার ওয়ার্কিং ডিরেক্টরিতে একটি উপ-ডিরেক্টরি তবে গিট এটিকে একটি উপ- মডেল হিসাবে দেখে এবং আপনি যখন সেই ডিরেক্টরিতে না থাকেন তখন এর বিষয়বস্তুগুলি ট্র্যাক করে না। পরিবর্তে, গিট এটিকে সেই সংগ্রহস্থল থেকে একটি বিশেষ প্রতিশ্রুতি হিসাবে দেখেছে ।

প্রধান রেপো সঙ্গে submodule ট্র্যাক করে একটি নির্দিষ্ট বিন্দু তার রাষ্ট্র , আইডি কমিট । সুতরাং আপনি যখন মডিউলগুলি আপডেট করবেন, আপনি প্রতিশ্রুতি আইডিটিকে নতুনটিতে আপডেট করছেন।

কিভাবে

আপনি যদি সাবমডিউলটি দূরবর্তী শাখার সাথে স্বয়ংক্রিয়ভাবে একত্রিত করতে চান তবে ব্যবহার করুন --mergeবা --rebase

--একত্রিত করা

এই বিকল্পটি শুধুমাত্র আপডেট আদেশের জন্য বৈধ । সুপারপ্রজেক্টে রেকর্ড করা প্রতিশ্রুতি সাবমডিউলের বর্তমান শাখায় মার্জ করুন। যদি এই বিকল্পটি দেওয়া হয় তবে সাবমডিউলের হেড আলাদা করা হবে না

--rebase

সুপার শাখায় রেকর্ড করা প্রতিশ্রুতিতে বর্তমান শাখাটি পুনরায় চালু করুন। যদি এই বিকল্পটি দেওয়া হয় তবে সাবমডিউলের হেড আলাদা করা হবে না

আপনাকে যা করতে হবে তা হ'ল,

git submodule update --remote --merge
# or
git submodule update --remote --rebase

প্রস্তাবিত নাম:

git config alias.supdate 'submodule update --remote --merge'

# do submodule update with
git supdate

সেট করার মাধ্যমে বা এর ডিফল্ট আচরণ হিসাবে --mergeবা বিকল্প হিসাবেও থাকতে পারে ।--rebasegit submodule updatesubmodule.$name.updatemergerebase

এখানে সাবমডিউল আপডেটের ডিফল্ট আপডেট আচরণটি কীভাবে কনফিগার করা যায় সে সম্পর্কে একটি উদাহরণ .gitmodule

[submodule "bash/plugins/dircolors-solarized"]
    path = bash/plugins/dircolors-solarized
    url = https://github.com/seebi/dircolors-solarized.git
    update = merge # <-- this is what you need to add

অথবা কমান্ড লাইনে এটি কনফিগার করুন,

# replace $name with a real submodule name
git config -f .gitmodules submodule.$name.update merge

তথ্যসূত্র


6
আমি ব্যবহার করি git submodule update --remote --mergeএবং এটি সাবমোডুলটিকে বিচ্ছিন্ন অবস্থায় টেনে নেয়। --rebaseএকই ফলাফল দিয়ে চেষ্টা করা ।
জো স্ট্রাউট

8
@ জোস্টারআউটআউট যদি আপনার সাবমডিউলটি ইতিমধ্যে পৃথক করা হয়েছে, উপরের কমান্ডগুলি দিয়ে আপডেট করার আগে বিচ্ছিন্ন অবস্থাটি ঠিক করুন। cdসাবমোডিয়ালে, সাবমোডিয়ালটি একটি নির্দিষ্ট শাখায় git checkout master,।
সিম্বা

2
বা - যদি এটি একাধিক (পুনরাবৃত্ত) সাবমডিউলগুলির জন্য ঝামেলা খুব বেশি হয় - কেবল তাই করুন git submodule foreach --recursive git checkout master
stefanct

1
আমি কেবল "কীভাবে গিট কাজ করে" বর্ণনাগুলি আংশিকভাবে বুঝতে পারি। টিবিএইচ গিট কীভাবে কাজ করে তা বুঝতে আমি আগ্রহী নই, আমি কেবল এটি ব্যবহার করতে চাই। এখন আমি বুঝতে পারি যে আমি এর সাথে পৃথক সাবমডিউলগুলি ঠিক করতে পারি git submodule foreach --recursive git checkout master। তবে আমি কীভাবে গিটকে সর্বদা আলাদা করা থেকে বিরত রাখতে পারি? প্রতিটি সাবমোডিয়ালের জন্য কনফিগার বিকল্পগুলি সেট করা কোনও বিকল্প নয়!
নিকোলাস

আমার জন্য, দৌড়ে git submodule update --remote --mergeসাবমোডুলটি কোনও পৃথক হেড অবস্থায় ছাড়েনি, তবে git submodule updateআমার .gitmoduleফাইলটি সম্পাদনা করার পরে দৌড়ানোর সময় আপনি ইঙ্গিত করেছেন যে ডিআইডি সাবমোডুলটিকে একটি বিচ্ছিন্ন হেড অবস্থায় রেখে দেয়।
bweber13

41

আমি সর্বদা এটি বিচ্ছিন্ন হয়ে ক্লান্ত হয়ে পড়েছিলাম তাই আমার সমস্ত মডিউলগুলির জন্য এটি তৈরি করতে আমি কেবল শেল স্ক্রিপ্ট ব্যবহার করি। আমি ধরে নিলাম সমস্ত সাবমডিউলগুলি মাস্টারে রয়েছে: এখানে স্ক্রিপ্টটি রয়েছে:

#!/bin/bash
echo "Good Day Friend, building all submodules while checking out from MASTER branch."

git submodule update 
git submodule foreach git checkout master 
git submodule foreach git pull origin master 

এটি আপনার পিতামাতা মডিউল থেকে কার্যকর করুন



সহজ এবং সংক্ষিপ্ত! ধন্যবাদ!
zhekaus

12

আমার উত্তরটি এখানে দেখুন: গিট সাবমডিউল: একটি শাখা / ট্যাগ উল্লেখ করুন

আপনি যদি চান তবে আপনি নিজের .gitmodules ফাইলটিতে "শাখা = মাস্টার" লাইনটি ম্যানুয়ালি যুক্ত করতে পারেন। আমি কী বলতে চাইছি তা দেখতে লিঙ্কটি পড়ুন।

সম্পাদনা: একটি শাখায় বিদ্যমান সাবমডিউল প্রকল্পটি ট্র্যাক করতে এখানে পরিবর্তে ভনসির নির্দেশাবলী অনুসরণ করুন:

গিট সাবমডিউলস: একটি শাখা / ট্যাগ নির্দিষ্ট করুন


14
উত্তরগুলি ইনলাইন বলে মনে হয়; আইআইআরসি উত্তরগুলির সাথে সংযোগ স্থাপন একটি স্ট্যাক ওভারফ্লো ফোকাস পাস au
টনি টপার

1
@ টনিটপার এমনকি অন্য এসও উত্তরের সাথে সংযোগ স্থাপন করার পরেও? আইআইআরসি কেবলমাত্র বাহ্যিক লিঙ্কগুলি এগুলি দূরে যেতে পারে এবং তাই লিঙ্কটি মারা গেছে এবং উত্তরটি ভাল, অকেজো। তবুও এসও উত্তরগুলির সাথে এ জাতীয় কোনও বিপদ নেই, এসও চলে না গেলে তারা কখনই চলে যাবে না (এবং যা কিছু ঘটুক না কেন পুনরুদ্ধার করা যেতে পারে)। এছাড়াও তিনি প্রশ্নের উত্তর দিয়েছেন, যেমন branch = master" line into your .gitmoduleপুরো উত্তরটি আমার পক্ষে সেই সমস্যার সমাধান করেছে।
মেকি

9

শাখাটি পরীক্ষা করে দেখার জন্য আপনার সাবমডিউলটি তৈরির অন্য উপায়টি হ'ল .gitmodulesফাইলটি রুট ফোল্ডারে যান এবং branchমডিউল কনফিগারেশনে ক্ষেত্রটি নিম্নলিখিত হিসাবে যুক্ত করুন:

branch = <branch-name-you-want-module-to-checkout>


15
আমার জন্য এটি কাজ করে না। আমি সঠিকভাবে সেট করেছি branch = my_wanted_branch। তবে git submodule update --remoteএটি চালানো এখনও বিচ্ছিন্ন মাথা হিসাবে চেক আউট করে।
অ্যান্ড্রিয়াস

এটি করুন, তারপরে সিডি সুডমডিউল এবং গিট কো দ্য ব্র্যাঞ্চ এবং সিডি .., তারপরে গিট সাবমডিউল আপডেট - রিমোট এবং এটি কাজ করে!
পিডিএম

'গিটমডিউলস' কেবল তখনই সক্রিয় ব্যবহারের অধীনে নেই (পঠিত হচ্ছে) যখন সুপারপ্রজেক্টগুলি সাবমোডিয়ুলস-রিকার্সিভ পদ্ধতিতে ক্লোন করা হচ্ছে বা সাবমোডিয়ালটি আরম্ভ করা হচ্ছে? অন্য কথায় আপনার নিজের সংগ্রহস্থলটি আপনি সেই ফাইল আপডেট করেন যা সর্বদা '.gitmodules' এ দেওয়া সাবমডিউল কনফিগার আপডেটগুলি থেকে লাভ হয় না। আমার বোঝার মধ্যে '.gitmodules' কনফিগার করার জন্য একটি টেমপ্লেট তৈরি করা হয়েছে যখন রেপো ক্লোন করা হচ্ছে বা তাই।
Na13-সি

3

অন্য লোকেরা যেমন বলেছে, এর কারণ হওয়ার কারণটি হল প্যারেন্ট রেপোতে কেবল সাবমডিউলে একটি নির্দিষ্ট কমিটের (এসএইচএ 1) একটি উল্লেখ রয়েছে - এটি শাখা সম্পর্কে কিছুই জানে না। এটি এইভাবে কাজ করা উচিত: যে প্রতিশ্রুতিতে ছিল সেই শাখাটি এগিয়ে (বা পিছনের দিকে) অগ্রসর হতে পারে, এবং পিতামাতা রেপো যদি শাখাটি রেফারেন্স করে থাকে তবে তা ঘটে গেলে সহজেই এটি ভেঙে যেতে পারে।

তবে, বিশেষত যদি আপনি প্যারেন্ট রেপো এবং সাবমডিউল উভয়টিতে সক্রিয়ভাবে বিকাশ করছেন, detached HEADরাষ্ট্র বিভ্রান্তিকর এবং সম্ভাব্য বিপজ্জনক হতে পারে। আপনি যদি সাবমোডুলে অবস্থিত অবস্থায় কমিট করেন তবে detached HEADএগুলি ঝুঁকিতে পরিণত হয় এবং আপনি সহজেই আপনার কাজ হারাতে পারেন। (ঝুঁকিপূর্ণ কমিটগুলি সাধারণত ব্যবহার করে উদ্ধার করা যায় git reflogতবে এগুলি প্রথম স্থানে এড়ানো আরও ভাল))

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

[alias]
    submodule-checkout-branch = "!f() { git submodule -q foreach 'branch=$(git branch --no-column --format=\"%(refname:short)\" --points-at `git rev-parse HEAD` | grep -v \"HEAD detached\" | head -1); if [[ ! -z $branch && -z `git symbolic-ref --short -q HEAD` ]]; then git checkout -q \"$branch\"; fi'; }; f"

এখন, git submodule updateআপনাকে কেবল কল করার দরকার git submodule-checkout-branchপড়েছে এবং যে কোনও সাবমডিউল যা কোনও প্রতিশ্রুতিতে যাচাই করা হয়েছে যা তার শাখা দেখিয়েছে সেই শাখাটি পরীক্ষা করে দেখাবে। আপনার যদি প্রায়শই একাধিক স্থানীয় শাখা না থাকে যা সমস্ত একই অঙ্গীকারের দিকে নির্দেশ করে, তবে এটি সাধারণত আপনি যা চান তা করবে; যদি তা না হয় তবে কমপক্ষে এটি নিশ্চিত করবে যে আপনি যে কোনও প্রতিশ্রুতি করেন তা ঝুঁকতে না গিয়ে প্রকৃত শাখায় চলে যায়।

তদতিরিক্ত, যদি আপনি চেকআউটতে স্বয়ংক্রিয়ভাবে সাবমডিউলগুলি আপডেট করার জন্য গিট সেট আপ করেন (ব্যবহার করুন git config --global submodule.recurse true, এই উত্তরটি দেখুন ), আপনি একটি পোস্ট-চেকআউট হুক তৈরি করতে পারেন যা এই ওরফেটিকে স্বয়ংক্রিয়ভাবে কল করে:

$ cat .git/hooks/post-checkout 
#!/bin/sh
git submodule-checkout-branch

তারপরে আপনাকে আর কল করার দরকার নেই git submodule updateবা git submodule-checkout-branch, কেবলমাত্র git checkoutসমস্ত সাবমোডিয়ুলগুলি তাদের নিজ নিজ কমান্ডে আপডেট করবে এবং সংশ্লিষ্ট শাখাগুলি পরীক্ষা করে (যদি তাদের উপস্থিত থাকে)।


0

সহজ সমাধানটি হ'ল:

git clone --recursive git@github.com:name/repo.git

তারপরে রেপো ডিরেক্টরিতে সিডি করুন এবং:

git submodule update --init
git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
git config --global status.submoduleSummary true

অতিরিক্ত পঠন: গিট সাবমডিউলগুলি সেরা অনুশীলন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.