සියලුම git උප මොඩියුල වලින් නවතම ඒවා ඇද ගැනීමට පහසුම ක්‍රමය


1859

අප විසින් සංවර්ධනය කරන ලද තවත් බොහෝ පුස්තකාල මත යැපීම් ඇති විශාල ව්‍යාපෘති කිහිපයක් කළමනාකරණය කිරීමට අපි git subodules භාවිතා කරමු. සෑම පුස්තකාලයක්ම උප මොඩියුලයක් ලෙස යැපෙන ව්‍යාපෘතියට ගෙන එන වෙනම ගබඩාවකි. සංවර්ධනය අතරතුර, අපට බොහෝ විට අවශ්‍ය වන්නේ සෑම යැපෙන උප මොඩියුලයකම නවතම අනුවාදය ලබා ගැනීමට ය.

මෙය සිදු කිරීම සඳහා git සතුව බිල්ට් විධාන තිබේද? එසේ නොවේ නම්, එය කළ හැකි වින්ඩෝස් කණ්ඩායම් ගොනුවක් හෝ ඒ හා සමාන වන්නේ කෙසේද?


git-deep මේ සඳහා උදව් විය යුතුය.
මැතිව් කුරියන්

9
Ad බ්රැඩ් ඔබට ප්රධාන ව්යාපෘතියේ නම් කර ඇති බැඳීම් සංශෝධනයන් සඳහා ඔබේ උප මොඩියුලවල පිටපත් යාවත්කාලීන කිරීමට අවශ්යද; නැතහොත් සෑම උප මොඩියුලයකින්ම නවතම HEAD බැඳීම ඇද ගැනීමට ඔබට අවශ්‍යද? මෙහි බොහෝ පිළිතුරු කලින් සඳහන් කර ඇත; බොහෝ දෙනෙකුට දෙවැන්න අවශ්‍යයි.
chrisinmtown

Answers:


2491

ඔබ ප්‍රථම වරට භාවිතා කළ යුතු රෙපෝවක් පරීක්ෂා කරන පළමු අවස්ථාව මෙය නම් --init:

git submodule update --init --recursive

1.8.2 හෝ ඊට වැඩි git--remote සඳහා, දුරස්ථ ශාඛා වල නවතම ඉඟි වෙත යාවත්කාලීන කිරීමට සහාය වීම සඳහා විකල්පය එකතු කරන ලදි:

git submodule update --recursive --remote

.gitmodulesහෝ .git/configලිපිගොනු වල නිශ්චිතව දක්වා ඇති ඕනෑම "පෙරනිමි නොවන" ශාඛාවන්ට ගරු කිරීමේ අමතර වාසියක් මෙහි ඇත (ඔබට කිසියම් දෙයක් සිදුවුවහොත් පෙරනිමිය සම්භවය / මාස්ටර් වේ, මෙහි වෙනත් පිළිතුරු සමහරක්ද ක්‍රියාත්මක වේ).

1.7.3 හෝ ඊට වැඩි git සඳහා ඔබට භාවිතා කළ හැකිය (නමුත් යාවත්කාලීනය තවමත් අදාළ වන්නේ කුමක් ද යන්න පිළිබඳ පහත දැක්වෙන කරුණු):

git submodule update --recursive

හෝ:

git pull --recurse-submodules

ඔබේ උප මොඩියුල ධාරාව වෙනුවට නවතම කොමිස් වෙත ඇද ගැනීමට ඔබට අවශ්‍ය නම්, රෙපෝ ලකුණු වෙත යොමු වන්න.

විස්තර සඳහා git-subodule (1) බලන්න


299
බොහෝ විට ඔබ git submodule update --recursiveවර්තමානයේ භාවිතා කළ යුතුය .
ජෙන්ස් කෝල්

39
කාර්ය සාධනය වැඩි දියුණු කිරීම:git submodule foreach "(git checkout master; git pull)&"
බොග්ඩන් ගුසීව්

18
යාවත්කාලීන කිරීම මඟින් එක් එක් උප මොඩියුලය නිශ්චිත සංශෝධනයට යාවත්කාලීන කරනු ඇත, නමුත් එම ගබඩාව සඳහා නවතම දේට එය යාවත්කාලීන නොකරනු ඇත.
පීටර් ඩිවීස්

21
එකතු කිරීම සඳහා, origin masterඔබේ සමහර උප මොඩියුලයන් එම විශේෂිත උප මොඩියුලයේ වෙනත් ශාඛාවක් හෝ ස්ථානයක නමක් නිරීක්ෂණය කරන්නේ නම් මෙම විධානය අවසානයේ අන්ධව ඇලී සිටීම අනපේක්ෂිත ප්‍රති results ල ලබා දෙනු ඇත. සමහරුන්ට පැහැදිලිය, නමුත් බොහෝ විට සෑම කෙනෙකුටම නොවේ.
නේතන් හෝර්න්බි

32
සෑම කෙනෙකුටම පැහැදිලි කිරීම සඳහා. git submodule update --recursiveඑක් එක් උප මොඩියුලය සඳහා මව් ගබඩාව ගබඩා කර ඇත්තේ කුමන සංශෝධනයදැයි බැලීමට පෙනේ, ඉන්පසු එක් එක් උප මොඩියුලයේ එම සංශෝධනය පරීක්ෂා කරයි. එය එක් එක් උප මොඩියුලය සඳහා නවතම කොමිස් අදින්නේ නැත . git submodule foreach git pull origin masterනැතහොත් git pull origin master --recurse-submodulesඑක් එක් උප මොඩියුලය ඒවායේ ආරම්භක ගබඩාවලින් නවතම ඒවාට යාවත්කාලීන කිරීමට අදහස් කරන්නේ නම් ඔබට අවශ්‍ය වන්නේ එයයි. උප මොඩියුල සඳහා යාවත්කාලීන කරන ලද සංශෝධන හැෂ් සමඟ මව් ගබඩාවේ වෙනස්වීම් ඔබට ලැබෙන්නේ එවිට පමණි. ඒවා පරීක්ෂා කර බලන්න, ඔබ හොඳයි.
චෙව්

642
git pull --recurse-submodules --jobs=10

විශේෂාංග කට්ටලයක් මුලින් ඉගෙන ගත්තේ 1.8.5 දී ය.

දෝෂය නිවැරදි වන තුරු , පළමු වරට ඔබ ධාවනය කළ යුතුය

git subodule update --init --recursive


30
upvoted, මම මෙය භාවිතා කරමි: අන්වර්ථය update_submodules = 'git pull --recurse-subodules && git subodule update'
ස්ටීවන් සී

3
උප මොඩියුලයන් අවම වශයෙන් එක් වරක්වත් ඇදගෙන ගොස් ඇති නමුත් කිසි විටෙකත් පරීක්ෂා කර නොමැති උප මොඩියුල සඳහා මෙය ක්‍රියාත්මක වේ, පහත ගහූවාගේ පිළිතුර බලන්න.
මැට් බ්‍රවුන්

8
මෙය ඉහළ repo හි සඳහන් අනුවාදය දක්වා ඉහළට යනු ඇත; එය හිස අදින්නේ නැත. නිදසුනක් ලෙස TopRepo විසින් SubRepo සඳහා HEAD පිටුපස 2 අනුවාදයක් නියම කරන්නේ නම්, මෙය 2 පසුපස ඇති අනුවාදය සමඟ SubRepo ඇද දමනු ඇත. මෙහි ඇති වෙනත් පිළිතුරු SubRepo හි HEAD අදින්න.
ක්‍රිස් මොස්චිනි

12
අලුතින් එකතු කරන ලද උප මොඩියුලයන් ආරම්භ කිරීම git pull --recurse-submodulesහෝ ආරම්භ කිරීම git submodule update --recursiveසිදු නොකරන බව සලකන්න . ඒවා ආරම්භ කිරීමට ඔබට ධාවනය අවශ්‍ය git submodule update --recursive --initවේ. අත්පොතෙන් උපුටා ගැනීම : උප මොඩියුලය තවමත් ආරම්භ කර නොමැති නම් සහ .gitmodules හි ගබඩා කර ඇති ආකාරයට සැකසුම භාවිතා කිරීමට ඔබට අවශ්‍ය නම්, ඔබට --init විකල්පය සමඟ උප මොඩියුලය ස්වයංක්‍රීයව ආරම්භ කළ හැකිය.
patryk.beza

1
git submodule update --recursive --remoteගබඩා කර ඇති SHA-1 වෙනුවට දුරස්ථ නවතම සංශෝධනයට උප මොඩියුල යාවත්කාලීන කරන ඉඟියක් එක් කරන්න .
හැනෝ එස්.

389

ආරම්භයේදී පහත විධානය ක්‍රියාත්මක වේ:

git submodule update --init --recursive

git repo නාමාවලිය තුළ සිට, මට වඩාත් සුදුසුය.

මෙය උප මොඩියුල ඇතුළු සියලුම නවතම දෑ ඇද ගනු ඇත.

පැහැදිලි කර ඇත

git - the base command to perform any git command
    submodule - Inspects, updates and manages submodules.
        update - Update the registered submodules to match what the superproject
        expects by cloning missing submodules and updating the working tree of the
        submodules. The "updating" can be done in several ways depending on command
        line options and the value of submodule.<name>.update configuration variable.
            --init without the explicit init step if you do not intend to customize
            any submodule locations.
            --recursive is specified, this command will recurse into the registered
            submodules, and update any nested submodules within.

මෙයින් පසු ඔබට ධාවනය කළ හැකිය:

git submodule update --recursive

git repo නාමාවලිය තුළ සිට, මට වඩාත් සුදුසුය.

මෙය උප මොඩියුල ඇතුළු සියලුම නවතම දෑ ඇද ගනු ඇත.


10
ඔව් - වැඩිම ඡන්දය දුන් පිළිතුර '09 දී කළ හැකි හොඳම ක්‍රමයයි, නමුත් මෙය දැන් සරල හා වඩා බුද්ධිමත් ය.
මයිකල් ස්කොට් කත්බර්ට්

2
Ic මයිකල්ස්කට්කුත්බර්ට් ස්තූතියි, තවත් වසර 3 කින් මෙම විධානය පිස්සු වැටෙනු ඇතැයි මට විශ්වාසයි
abc123

5
එසේ වුවද, මෙය උප මොඩියුලයේ නවතම සංශෝධනය පරීක්ෂා නොකරයි, මවුපියන් නිරීක්ෂණය කරන නවතම සංශෝධනය පමණි.
නේතන් ඔස්මන්

4
ඔබට අවශ්‍ය දේ @ නාතන් ඔස්මන් ... දෙමව්පියන්ගේ සංශෝධන ලුහුබැඳීම අනුගමනය නොකිරීමෙන් ඔබ බිඳුණු කේතයක් සමඟ අවසන් වනු ඇත. ඔබ දෙමව්පියන්ගේ නඩත්තු කරන්නා නම් ඔබට ඒවා යාවත්කාලීන කර ඒවා කළ හැකිය.
abc123

2
ඔව්, නමුත් මගේ අවබෝධයෙන්, OP ට අවශ්‍ය වූයේ එය නොවේ.
නේතන් ඔස්මාන්

305

සටහන: මෙය 2009 සිට වන අතර එවකට හොඳ විය හැකි නමුත් දැන් වඩා හොඳ විකල්ප තිබේ.

අපි මෙය භාවිතා කරමු. එය හැඳින්වෙන්නේ git-pup:

#!/bin/bash
# Exists to fully update the git repo that you are sitting in...

git pull && git submodule init && git submodule update && git submodule status

සුදුසු බින් ඩිරෙක්ටරියක් තුළට දමන්න (/ usr / local / bin). වින්ඩෝස් හි තිබේ නම්, එය ක්‍රියාත්මක කිරීම සඳහා ඔබට සින්ටැක්ස් වෙනස් කිරීමට අවශ්‍ය විය හැකිය :)

යාවත්කාලීන කිරීම:

සියලුම උප මොඩියුලවල සියලුම හෙඩ් ඇද ගැනීම පිළිබඳව මුල් කතුවරයාගේ අදහස් දැක්වීමට ප්‍රතිචාර වශයෙන් - එය හොඳ ප්‍රශ්නයකි.

gitඅභ්‍යන්තරව මේ සඳහා විධානයක් නොමැති බව මට හොඳටම විශ්වාසයි . එසේ කිරීම සඳහා, උප මොඩියුලයක් සඳහා HEAD යනු කුමක්දැයි ඔබ හඳුනාගත යුතුය. එය masterවඩාත්ම යාවත්කාලීන ශාඛාව යැයි පැවසීම තරම් සරල විය හැකිය ...

මෙය අනුගමනය කිරීමෙන්, පහත දැක්වෙන දේ කරන සරල පිටපතක් සාදන්න:

  1. git submodule status"නවීකරණය කරන ලද" ගබඩාවන් සඳහා පරීක්ෂා කරන්න . ප්‍රතිදාන රේඛාවල පළමු අක්‍ෂරය මෙය පෙන්නුම් කරයි. උප-රිපෝ එකක් වෙනස් කර ඇත්නම්, ඔබට ඉදිරියට යාමට අවශ්‍ය නොවනු ඇත.
  2. ලැයිස්තුගත කර ඇති එක් එක් repo සඳහා, cd එහි නාමාවලියට ඇතුළු කර ධාවනය කරන්න git checkout master && git pull. දෝෂ සඳහා පරීක්ෂා කරන්න.
  3. අවසානයේදී, උප මොඩියුලවල වත්මන් තත්වය දැක්වීම සඳහා පරිශීලකයාට සංදර්ශකයක් මුද්‍රණය කිරීමට මම ඔබට යෝජනා කරමි - සමහර විට සියල්ල එකතු කර කැපවීමට ඔවුන්ගෙන් ඉල්ලා සිටිනවාද?

මෙම ශෛලිය ඇත්ත වශයෙන්ම git උප මොඩියුල සඳහා නිර්මාණය කර ඇති ඒවා නොවන බව සඳහන් කිරීමට කැමැත්තෙමි. සාමාන්‍යයෙන්, ඔබට "පුස්තකාලය" "2.32" අනුවාදයේ ඇති බව පැවසීමට අවශ්‍ය වන අතර මම එය "උත්ශ්‍රේණිගත කරන්න" යැයි පවසන තුරු එලෙසම පවතිනු ඇත.

එනම්, එක් අතකින්, ඔබ විස්තර කරන ලද පිටපත සමඟ කරන්නේ කුමක්ද, නමුත් වඩා ස්වයංක්‍රීයව. රැකවරණය අවශ්‍යයි!

යාවත්කාලීන 2:

ඔබ කවුළු වේදිකාවක සිටී නම්, මෙම ප්‍රදේශවල ඉතා දක්ෂ බැවින් තිර රචනය ක්‍රියාත්මක කිරීම සඳහා පයිතන් භාවිතා කිරීම පිළිබඳව සොයා බැලීමට ඔබට අවශ්‍ය විය හැකිය. ඔබ යුනික්ස් / ලිනක්ස් හි සිටී නම්, මම යෝජනා කරන්නේ බාෂ් ස්ක්‍රිප්ට් එකක් පමණි.

පැහැදිලි කිරීම් අවශ්‍යද? අදහස් දැක්වීමක් කරන්න.


මම හිතන්නේ නැහැ මට එය අවශ්‍ය බව. සුපිරි ව්‍යාපෘතිය අවසන් වරට සිදු කළ උප මොඩියුලවල අනුවාදය එය අදින්නේ නැද්ද? සියලුම උප මොඩියුලවල ප්‍රධාන අනුවාදය අදින්න මට අවශ්‍යයි.
බ්‍රැඩ් රොබින්සන්

3
මෙය විශිෂ්ට ලෙස ක්‍රියාත්මක වන අතර, උප මොඩියුල යාවත්කාලීන කිරීමට පමණක් නොව, ඔබට අවශ්‍ය නම් පළමු වරට ඒවා ලබා ගැනීමටද ක්‍රියා කරයි.
මැට් බ්‍රවුන්

මට දැන් ලැබෙන්නේ "වත්මන් ශාඛාව සඳහා ලුහුබැඳීමේ තොරතුරු නොමැත. කරුණාකර ඔබට ඒකාබද්ධ වීමට අවශ්‍ය කුමන ශාඛාවද යන්න සඳහන් කරන්න." මම කුමක් උත්සාහ කළත් කමක් නැත: /
නේතන් හෝර්න්බි

9
ඒ සඳහා අන්වර්ථයක් නිර්මාණය නොකරන්නේ ඇයි? git config --global alias.pup '!git pull && git submodule init && git submodule update && git submodule status'ඉන්පසු git pupකිසිදු ස්ක්‍රිප්ටින් නොමැතිව එය භාවිතා කරන්න .
fracz

ස්තූතියි, කිසියම් හේතුවක් නිසා මට git 1.9.1 තිබුණත්, උප මොඩියුල ඇතුළත් කර ඇති git submodule initපළමු ඇදීමෙන් පසුව මට සිදු කිරීමට සිදු විය, එවිට සියල්ල නිසි ලෙස ක්‍රියාත්මක වීමට පටන් ගනී.
බෙන් උස්මාන්

166

හෙන්රික් නිවැරදි මාර්ගයේ ය. 'Foreach' විධානය මඟින් ඕනෑම අත්තනෝමතික ෂෙල් ස්ක්‍රිප්ට් එකක් ක්‍රියාත්මක කළ හැකිය. නවතම දේ ඇද ගැනීමට විකල්ප දෙකක් විය හැකිය,

git submodule foreach git pull origin master

සහ,

git submodule foreach /path/to/some/cool/script.sh

එය සියලු ආරම්භක උප මොඩියුල හරහා නැවත ක්‍රියාත්මක වන අතර දී ඇති විධාන ක්‍රියාත්මක කරයි.


144

පහත දැක්වෙන්නේ වින්ඩෝස් හි මා වෙනුවෙන් වැඩ කිරීමයි.

git submodule init
git submodule update

6
මෙය පැහැදිලිවම OP ඉල්ලා සිටි දෙය නොවේ. එය යාවත්කාලීන වන්නේ සම්බන්ධිත උප මොඩියුලයට පමණක් මිස නවතම ඒවාට නොවේ.
පැට්‍රික්

52
කෙසේ වෙතත් මෙම පිටුවේ ඇති එකම දෙය නම් මම පළමු වරට
රෙපෝවක්

2
මෙයද භාවිතා කළ හැකිය: git subodule update --init --recursive (විශේෂයෙන් සැක සහිත උප මොඩියුලය නැවුම් ක්ලෝනයකින්
රෙස්ට්කිට් නම්

33

සංස්කරණය කරන්න :

අදහස් දැක්වීමේදී ( ෆිල්ෆ්‍රියෝ විසින් ) නවතම අනුවාදය අවශ්‍ය බව පෙන්වා දෙන ලදී . ඒවායේ නවතම අනුවාදයේ තිබිය යුතු කැදැලි උප මොඩියුල තිබේ නම්:

git submodule foreach --recursive git pull

----- යල් පැන ගිය අදහස් පහතින් -----

මෙය කිරීමට නිල ක්‍රමය නොවේද?

git submodule update --init

මම එය සෑම විටම භාවිතා කරමි. මෙතෙක් ගැටළු නොමැත.

සංස්කරණය කරන්න:

ඔබට භාවිතා කළ හැකි බව මම සොයා ගතිමි:

git submodule foreach --recursive git submodule update --init 

එමඟින් සියලු උප මොඩියුලයන්, එනම් පරායත්තතාවයන් පුනරාවර්තනය වේ.


5
ඔබගේ පිළිතුර OP හි ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත, නමුත් ඔබ යෝජනා කළ දේ කිරීමට ඔබට කිව හැකියgit submodule update --init --recursive
philfreo

2
මම දකිනවා, නවතම අනුවාදය අවශ්‍යයි. කැදැලි සහිත උප මොඩියුල තිබේ නම් මෙය ප්‍රයෝජනවත් වේ: git submodule foreach --recursive git pull
ඇන්ටිටොක්සික්

1
මට මේ කිසිවක් සත්‍ය වශයෙන්ම බාගත කිරීමට නොහැකි විය - කෙසේ වෙතත් "git subodule update --init --recursive" මා වෙනුවෙන් වැඩ කළේය.
BrainSlugs83

33

ඔබගේ උප මොඩියුලවල පෙරනිමි ශාඛාව එසේ නොවිය හැකි බැවින් master , මම සම්පූර්ණ Git උප මොඩියුල යාවත්කාලීන කිරීම් ස්වයංක්‍රීය කරන්නේ එලෙසයි:

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'

බොහෝ ප්‍රශ්න වලට පිළිතුරු වලින්, මෙය මා වෙනුවෙන් වැඩ කළේය (2019, විශේෂිත හැෂ්
අයිඩී සමඟ ගිතබ් දෝෂය

31

පළමු වරට

ක්ලෝන සහ ආරම්භක උප මොඩියුලය

git clone git@github.com:speedovation/kiwi-resources.git resources
git submodule init

විවේකය

සංවර්ධනයේදී උප මොඩියුලය අදින්න සහ යාවත්කාලීන කරන්න

git pull --recurse-submodules  && git submodule update --recursive

නවතම සම්භවය සඳහා Git උප මොඩියුලය යාවත්කාලීන කරන්න

git submodule foreach git pull origin master

කැමති ක්‍රමය පහතින් විය යුතුය

git submodule update --remote --merge

සටහන: අවසාන විධාන දෙක එකම හැසිරීමක් ඇත


මම වැරදීමකින් උප මොඩියුල නොමැති ජිට් ක්ලෝනයක් කළ අතර අනෙක් සියලුම විකල්ප ක්‍රියාත්මක වූයේ නැත, කිසිවෙකු උප මොඩියුල ක්ලෝන කළේ නැත. ඔබේ භාවිතා කරමින්, git submodule updateඋපක්‍රමය කළා. දැන් මම ක්ලෝනයේ පළමු පියවරෙන් අතුරුදහන් වූ උප මොඩියුල දත්ත බාගත කරමි. ඔබට ස්තුතියි. මම git: C
m3nda

මෙම උත්තරය ඇත්ත වශයෙන්ම මෙහි ඉහළින් ප්‍රශ්නයක් ඇසීමට ඉතා හොඳ පිළිතුරකි: ඇයි මට ".. - පුනරාවර්තන-උප මොඩියුල .." සහ ඊට අමතරව "... යාවත්කාලීන කරන්න ..." සහ ".." .ෆොරච් ... "පසුව නවතම කැපවීම ලබා ගැනීමට? මේ සියල්ල GIT මෙන් පෙනෙන්නේ නැත! "යාවත්කාලීන කිරීම" යනු කුමක්ද සහ අදින්න එක් එක් මොඩියුලයට මා අතින් යා යුත්තේ ඇයි? "... --recurse-subodules .." කරන්නේ එය නොවේද? ඉඟි තිබේද?
පීටර් බ්‍රැන්ෆෝන්

20

මෙය ක්‍රියාත්මක වන්නේ කුමන අනුවාදයේ සිටදැයි මම නොදනිමි, නමුත් ඔබ සොයන්නේ එයයි:

git submodule update --recursive

git pullමූල ගබඩාව යාවත්කාලීන කිරීම සඳහා මම එය භාවිතා කරමි :

git pull && git submodule update --recursive

11

ඉහත පිළිතුරු හොඳයි, කෙසේ වෙතත් අපි මෙය පහසු කිරීම සඳහා git-hooks භාවිතා කළ නමුත් එයින් පෙනෙන්නේ git 2.14 හි , ඔබ git config submodule.recurseඔබේ git ගබඩාවට අදින විට උප මොඩියුල යාවත්කාලීන කිරීමට හැකි වන පරිදි සත්‍ය ලෙස සැකසිය හැකි බවයි.

කෙසේ වෙතත්, ඔබ සතුව ඇති සියලුම උප මොඩියුලයන් ශාඛා මත තිබේ නම් ඒවා වෙනස් කිරීමේ අතුරු ආබාධයක් ඇති කරයි, නමුත් ඔබට එම හැසිරීම අවශ්‍ය නම් දැනටමත් මෙම කාර්යය කළ හැකිය.

භාවිතා කිරීමෙන් කළ හැකිය:

git config submodule.recurse true

git submodule initඔබගේ උප මොඩියුලය තවම ආරම්භ කර නොමැති නම් අවාසනාවකට තවමත් අතේ භාවිතා කිරීමට අවශ්‍යය .
පෙලට්

5

කවුළු සඳහා Git 2.6.3 :

git submodule update --rebase --remote


මට වැඩ කළ එකම එක එයයි. උප මොඩියුල දර්ශකය දුරස්ථව නොමැති අනුවාදයක් වෙත යොමු වන බැවින් මට ආරම්භ කිරීමට හෝ යාවත්කාලීන කිරීමට පවා නොහැකි විය
Pavel P

4

Repo හි ඉහළ මට්ටමේ සිට:

git submodule foreach git checkout develop
git submodule foreach git pull

මෙය සියලු ශාඛා නවීනතම සංවර්ධනයට හා ඇද ගැනීමට මාරු කරනු ඇත


ගසෙහි ඇති සියලුම ව්‍යාපෘති යොමු කිරීම් එකතු කරන සෑම දෙයක්ම sln ගොනුවක් වැනි දෙයක් ඔබ සතුව තිබේද? ඔබ දකින්නේ කුමන දෝෂයක්ද? ඔබේ ගිටිග්නෝර් ගොනුවද පරීක්ෂා කළ හැකිද
ශ්‍රයාන් ගුහාතකුර්තා

1
git submodule foreach git pull origin masterමට ලබා ගැනීමට අවශ්‍ය ශාඛාව එකතු කිරීමට සිදු විය. ඒ හැර, පරිපූර්ණ ලෙස වැඩ.
Torxed

3

මම ආරාධනා කළා මේ අනුගත විසින් gahooa ගේ ඉහත පිළිතුර :

එය git සමඟ ඒකාබද්ධ කරන්න [alias]...

ඔබේ මව් ව්‍යාපෘතියට මෙවැනි දෙයක් තිබේ නම් .gitmodules:

[submodule "opt/submodules/solarized"]
    path = opt/submodules/solarized
    url = git@github.com:altercation/solarized.git
[submodule "opt/submodules/intellij-colors-solarized"]
    path = opt/submodules/intellij-colors-solarized
    url = git@github.com:jkaving/intellij-colors-solarized.git

ඔබේ .gitconfig තුළ මේ වගේ දෙයක් එකතු කරන්න

[alias]
    updatesubs = "!sh -c \"git submodule init && git submodule update && git submodule status\" "

ඔබේ උප මොඩියුල යාවත්කාලීන කිරීමට, ධාවනය කරන්න:

git updatesubs

මගේ පරිසර සැකසුම් ගබඩාවේ ඒ පිළිබඳ උදාහරණයක් මා සතුව ඇත .


3

ඔබ දැන් කළ යුත්තේ සරල දෙයකි git checkout

මෙම ගෝලීය වින්‍යාසය හරහා එය සක්‍රීය කිරීමට වග බලා ගන්න: git config --global submodule.recurse true


2

ඔබගේ සියලු git ගබඩාවල උප මොඩියුල තිබුණත් නැතත් අදින්න විධාන රේඛාව මෙන්න:

ROOT=$(git rev-parse --show-toplevel 2> /dev/null)
find "$ROOT" -name .git -type d -execdir git pull -v ';'

ඔබ ඔබේ ඉහළ GIT නිධිය තුල එය ධාවනය නම්, ඔබ විස්ථාපනය කල හැකි "$ROOT"බවට ..


1

මෙය සිදු කිරීම සඳහා ඔබට පිටපතක් ලිවීමට සිදුවේ යැයි මම සිතමි. ඇත්තම කිව්වොත්, මම එය සිදු කිරීම සඳහා පයිතන් ස්ථාපනය කළ හැකි අතර එවිට ඔබට සෑම නාමාවලියකටම භාවිතා os.walkකර cdසුදුසු විධාන නිකුත් කළ හැකිය. කණ්ඩායම හැරුණු විට පයිතන් හෝ වෙනත් ස්ක්‍රිප්ටින් භාෂාවක් භාවිතා කිරීම මඟින් ස්ක්‍රිප්ට් වෙනස් කිරීමකින් තොරව උප ව්‍යාපෘති පහසුවෙන් එකතු කිරීමට / ඉවත් කිරීමට ඔබට ඉඩ සලසයි.


1

සටහන: එතරම් පහසු ක්‍රමයක් නොව, වැඩ කළ හැකි අතර එයට එයටම ආවේණික වූ වාසි ඇත.

යමෙකුට ක්ලෝන කිරීමට අවශ්‍ය වන්නේ HEADනිධියක සංශෝධනයක් පමණක් HEADවන අතර එහි සියලුම උප මොඩියුලවල (එනම් "කඳ" පරීක්ෂා කිරීම සඳහා) පමණි, එවිට යමෙකුට පහත දැක්වෙන ලුආ ස්ක්‍රිප්ට් භාවිතා කළ හැකිය . සමහර විට සරල විධානය මඟින් git submodule update --init --recursive --remote --no-fetch --depth=1සොයාගත නොහැකි gitදෝෂයක් ඇතිවිය හැකිය. මෙම අවස්ථාවේදී යමෙකුට විධානය .git/modulesභාවිතා කරමින් ඩිරෙක්ටරියේ උප බහලුම සහ ක්ලෝන උප මොඩියුලය අතින් පිරිසිදු කළ යුතුය git clone --separate-git-dir. එකම සංකීර්ණතාව වන්නේ සුපිරි ප්‍රොජෙක්ට් ගසෙහි URL , උප .gitමොඩියුලයේ නාමාවලිය සහ උප මොඩියුලයේ මාර්ගය සොයා ගැනීමයි .

සටහන: ස්ක්‍රිප්ට් පරීක්‍ෂා කරනු ලබන්නේ https://github.com/boostorg/boost.gitගබඩාවට එරෙහිව පමණි . එහි සුවිශේෂතා: සියලුම උප මොඩියුලයන් එකම ධාරකයක සත්කාරක වන අතර .gitmodulesඑහි අඩංගු වන්නේ සාපේක්ෂ URL ය.

-- mkdir boost ; cd boost ; lua ../git-submodules-clone-HEAD.lua https://github.com/boostorg/boost.git .
local module_url = arg[1] or 'https://github.com/boostorg/boost.git'
local module = arg[2] or module_url:match('.+/([_%d%a]+)%.git')
local branch = arg[3] or 'master'
function execute(command)
    print('# ' .. command)
    return os.execute(command)
end
-- execute('rm -rf ' .. module)
if not execute('git clone --single-branch --branch master --depth=1 ' .. module_url .. ' ' .. module) then
    io.stderr:write('can\'t clone repository from ' .. module_url .. ' to ' .. module .. '\n')
    return 1
end
-- cd $module ; git submodule update --init --recursive --remote --no-fetch --depth=1
execute('mkdir -p ' .. module .. '/.git/modules')
assert(io.input(module .. '/.gitmodules'))
local lines = {}
for line in io.lines() do
    table.insert(lines, line)
end
local submodule
local path
local submodule_url
for _, line in ipairs(lines) do
    local submodule_ = line:match('^%[submodule %"([_%d%a]-)%"%]$')
    if submodule_ then
        submodule = submodule_
        path = nil
        submodule_url = nil
    else
        local path_ = line:match('^%s*path = (.+)$')
        if path_ then
            path = path_
        else
            submodule_url = line:match('^%s*url = (.+)$')
        end
        if submodule and path and submodule_url then
            -- execute('rm -rf ' .. path)
            local git_dir = module .. '/.git/modules/' .. path:match('^.-/(.+)$')
            -- execute('rm -rf ' .. git_dir)
            execute('mkdir -p $(dirname "' .. git_dir .. '")')
            if not execute('git clone --depth=1 --single-branch --branch=' .. branch .. ' --separate-git-dir ' .. git_dir .. ' ' .. module_url .. '/' .. submodule_url .. ' ' .. module .. '/' .. path) then
                io.stderr:write('can\'t clone submodule ' .. submodule .. '\n')
                return 1
            end
            path = nil
            submodule_url = nil
        end
    end
end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.