උප මොඩියුල ඇතුළු “git clone” කරන්නේ කෙසේද?


2014

මම උප මොඩියුලයක් නැවත ගබඩාවකට දැමීමට උත්සාහ කරමි. ගැටළුව වන්නේ මම මව් ගබඩාව ක්ලෝන කරන විට, උප මොඩියුලය ෆෝල්ඩරය සම්පූර්ණයෙන්ම හිස් වීමයි.

උප git clone parent_repoමොඩියුල ෆෝල්ඩරයේ දත්ත සැබවින්ම තැන්පත් වන පරිදි එය සෑදීමට ක්‍රමයක් තිබේද?

උදාහරණයක් ලෙස, http://github.com/cwolves/afteelize/tree/master/lib/ , nodejs-mysql-nativeබාහිර git උප මොඩියුලයක් වෙත යොමු කරයි, නමුත් මම sequelizeව්‍යාපෘතිය පරීක්ෂා කරන විට එම ෆෝල්ඩරය හිස් ය.


4
එම විධානය වනුයේ git clone --recurse-submodules --remote-submodules(Q3 2019 Git 2.23): එය එක් විධානයකින් උප මොඩියුල ක්ලෝන කර යාවත්කාලීන කරනු ඇත . බලන්න පහත මගේ ගන්ථය පිළිතුර .
VonC

Answers:


2995

Git හි 2.13 අනුවාදය සමඟ සහ පසුව, --recurse-submodulesඒ වෙනුවට භාවිතා කළ හැකිය --recursive:

git clone --recurse-submodules -j8 git://github.com/foo/bar.git
cd bar

සංස්කාරක සටහන: -j8විකල්ප කාර්ය සාධන ප්‍රශස්තිකරණය වන අතර එය 2.8 අනුවාදයෙන් ලබා ගත හැකි අතර සමාන්තරව වරකට උප මොඩියුල 8 ක් ලබා ගනී - බලන්න man git-clone.

2.12 අනුවාදය තෙක් Git up හි 1.9 අනුවාදය සමඟ ( -jධජය ඇත්තේ 2.8+ අනුවාදයේ පමණි):

git clone --recursive -j8 git://github.com/foo/bar.git
cd bar

Git හි 1.6.5 අනුවාදය සහ පසුව, ඔබට මෙය භාවිතා කළ හැකිය:

git clone --recursive git://github.com/foo/bar.git
cd bar

දැනටමත් ක්ලෝන කරන ලද ගබඩාවලට හෝ පැරණි Git අනුවාද සඳහා, භාවිතා කරන්න:

git clone git://github.com/foo/bar.git
cd bar
git submodule update --init --recursive

128
මෙම හැසිරීම ඔබේ git ගබඩාවේ පෙරනිමියෙන් සඳහන් කිරීමට ක්‍රමයක් තිබේද, එවිට අඩු දැනුමක් ඇති ක්ලෝනකරුවන්ට ස්වයංක්‍රීයව ආරම්භක උප මොඩියුලයක් ලැබෙනු ඇත.
එන්එච්ඩාලි

12
@NHDaly කනගාටුවට කරුණක්, නැත. (අවම වශයෙන් මා දන්නා දෙයක් නොවේ.)
මතියස් බයිනස්

6
තර්කානුකූලව සිතන git clone --recursive ද උප මොඩියුලයක ඕනෑම උප මොඩියුලයක් ජනනය කරනු ඇත, නේද?
ජයාර්ජෝ


5
ost ටොස්ටර්: එය එතරම් wise ානවන්තද? හෝල්ඩින් රෙපෝවට නැති උප මොඩියුලයක අනුවාදයක් අවශ්‍ය නම් කුමක් කළ masterයුතුද?
ගෞතියර්

503

උප මොඩියුලයක් පිරවීමට පෙර ඔබ කරුණු දෙකක් කළ යුතුය:

git submodule init 
git submodule update

8
මම ඒකට බිය වුනා ... ඔබ එවැනි අවස්ථාවක අර්ධ ව්‍යාපෘතියක් පරික්ෂා කරන බැවින් එයින් කිසිම තේරුමක් නැහැ. උප මොඩියුල යාවත්කාලීනයන් ස්වයංක්‍රීය නොවන බව මට වැටහී ඇත, නමුත් බැඳී ඇති අනුවාදය ස්වයංක්‍රීයව පරීක්ෂා නොකරන්නේ ඇයි ?? එය බල කිරීමට ක්‍රමයක් තිබේද? මට මට්ටම් 3 ක උප මොඩියුල සහිත ව්‍යාපෘතියක් ඇති අතර එය පරීක්ෂා කිරීම සඳහා එතරම් දුරක් ගමන් කිරීම විකාරයකි.
මාර්ක්

11
කරුණාකර git-submodule(1)man පිටුව කියවන්න ( kernel.org/pub/software/scm/git/docs/git-submodule.html ). git submodule updateනමින් හැඳින්වෙන ලස්සන පරාමිතියකට සහය දක්වන බව ඔබ සොයා ගනු --recursiveඇත.
ජොෂි

96
ඔවුන් දෙදෙනාම එකම විධානයකින් පමණක් නොකරන්නේ ඇයි? git submodule update --init( මගේ පිළිතුරද බලන්න ).
මතියස් බයිනන්ස්

9
මෙම විධාන දෙක සමඟ ප්‍රශ්නයට පිළිතුරු දීම වඩා හොඳ යැයි මම සිතමි. කර්තව්‍යය ඉටු කරන්නේ කෙසේද යන්න එහි වඩා හොඳින් පැහැදිලි කරයි.
schmijos

6
Ati මතියස්බයිනස් මා සතුව ඇති යන්ත්‍රයකට ඇත්තේ git 1.5.5.6 පමණි, එය කෙටියෙන් උපදෙස් වලට සහය නොදක්වන නමුත් එය විධාන දෙකක් ලෙස සහාය දක්වයි.
ජැක් පෝල්සන්

230

Git 2.23 (Q3 2019): ඔබට උප මොඩියුල ක්ලෝන කර යාවත්කාලීන කිරීමට අවශ්‍ය නම් ඒවායේ නවතම සංශෝධනයට:

git clone --recurse-submodules --remote-submodules

ඔබට ඔවුන්ගේ පටිගත කරන ලද SHA1 හි ක්ලෝන කිරීමට අවශ්‍ය නම්:

git clone --recurse-submodules

පහත බලන්න.


මුල් පිළිතුර 2010

ලෙස joschi අදහස් සඳහන්, git submoduleදැන් සහය --recursiveවිකල්පය (Git1.6.5 සහ ඊට වැඩි).

--recursiveනිශ්චිතව දක්වා ඇත්නම් , මෙම විධානය ලියාපදිංචි උප මොඩියුල වෙත නැවත යොමු වන අතර ඇතුළත ඇති ඕනෑම කැදැලි උප මොඩියුල යාවත්කාලීන කරයි.

ආරම්භක කොටස සඳහා පුනරාවර්තන ලෙස git උප මොඩියුල සමඟ වැඩ කිරීම බලන්න .
වැඩි git submoduleවිස්තර සඳහා පැහැදිලි කිරීම බලන්න .

Git හි 1.6.5 අනුවාදය සහ පසුව, ඔබට සුපිරි ව්‍යාපෘතිය ක්ලෝන කිරීමෙන් ස්වයංක්‍රීයව මෙය කළ –-recursiveහැකිය:

git clone --recursive git://github.com/mysociety/whatdotheyknow.git

Git 2.8 සමඟ 2016 යාවත්කාලීන කරන්න: බලන්න " git උප මොඩියුල බාගත කිරීම් වේගවත් කිරීම / සමාන්තරගත කරන්නේ git clone --recursiveකෙසේද? "

ඔබට සමාන්තරව බහු නූල් භාවිතා කරමින් උප මොඩියුලය ලබා ගැනීම ආරම්භ කළ හැකිය.
උදාහරණ සඳහා:

git fetch --recurse-submodules -j2

ඊටත් වඩා හොඳයි, Git 2.23 (Q3 2019) සමඟ, ඔබට එක් විධානයකින් උප මොඩියුලය ඔවුන්ගේ ලුහුබැඳීමේ ශාඛාවට ක්ලෝන කර පරීක්ෂා කර බැලිය හැකිය!

බලන්න 4c69101 සිදු විසින් (මැයි 19 2019) බෙන් Avison ( bavison) .
(විසින් අලුතින් ඒකාබද්ධ ජූනි සී Hamano - gitster- දී 9476094 සිදු , 17 ජූනි 2019)

clone: --remote-submodulesධජය එක් කරන්න

භාවිතා කරන විට git clone --recurse-submodulesඑහි මීට පෙර සම්මත කිරීමට ක්රමයක් තිබුණේ නැහැ --remoteගම්ය මාරු git submodule updateඔබ submodules තම දුරස්ථ-සොයා ශාඛා මත වෙනුවට superproject සඳහන් SHA-1 සමග පරීක්ෂා කිරීමට අවශ්ය ඕනෑම භාවිතය නඩුව සඳහා විධාන.

මෙම පැච් එක මෙම තත්වය නිවැරදි කරයි.
ඒක ඇත්තටම වෙයි --no-fetchකිරීමට git submodule updateමෙන්ම ඔවුන් submodule පමණි සියල්ල ඉවත්කල කර ඇත යන පදනම මත, දුරස්ථ යළි තර්ජනයක් පමණක් වේගය අඩු දේවල් සේවය නිසා.

ඒ කියන්නේ:

--[no-]remote-submodules:

ක්ලෝන කරන ලද සියලුම උප මොඩියුලයන් සුපිරි ප්‍රොජෙක්ට් හි පටිගත කරන ලද SHA-1 වෙනුවට උප මොඩියුලය යාවත්කාලීන කිරීම සඳහා උප මොඩියුලයේ දුරස්ථ ලුහුබැඳීමේ ශාඛාවේ තත්වය භාවිතා කරනු ඇත. වෙත යාමට සමාන --remoteවේ git submodule update.


3
එබැවින් උප මොඩියුල සඳහා නිසි සහය එක් කිරීම ආරම්භ කිරීමට Git හට වසර 14 ක් ගතවිය, හාහ්. මෙම යාවත්කාලීන සඳහා ස්තුති! උප මොඩියුල නොමැතිව සහ පටිගත කරන ලද SHA1 නොමැතිව ප්‍රධාන රිපෝවේ ක්ලෝනයක් මා සතුව තිබේ නම්, එක් එක් උප මොඩියුලයේ නවතම අනුවාදය ඇද ගැනීමට මට අවශ්‍යය. එය කළ හැකිද?
වයලට් ජිරාෆ්

1
@ වයලට් ජිරාෆ් එම ක්ලෝන ගබඩාවට උප මොඩියුල තිබේ නම්, එය "පටිගත කරන ලද SHA1" ඇත. ඒවගේම git submodule update --init --recursive --remoteඔවුන්ගේ ශාඛාවේ නවතම කැපවීම වෙත ඒවා යාවත්කාලීන කළ යුතුය. (උදා: stackoverflow.com/a/56981834/6309 )
VonC

1
උදාහරණයක් සමඟ පැහැදිලි කර ගැනීමට මට ඉඩ දෙන්න: ගිතුබ් හි උප මොඩියුල භාවිතා කරන අච්චු ව්‍යාපෘතියක් මා සතුව ඇති අතර, මෙම අච්චු ගබඩාවට උප මොඩියුලවල නිශ්චිත සංශෝධන පවා සිදු කළෙමි. නමුත් මම මෙම ගබඩාවෙන් නව ව්‍යාපෘතියක් නිර්මාණය කරන විට, ඔබ ලැයිස්තුගත කර ඇති කිසිම විධානයක් (හෝ clone --recurse-submodules --remote-submodulesනැත submodule update --init --recursive --remote) මට ඇත්ත වශයෙන්ම උපප්‍රස්ථාර ලබා ගැනීමට ඉඩ නොදෙයි. මට ලැබෙන්නේ .gitmodules ගොනුවක් පමණක් වන අතර, ඒවා එකින් එක ක්ලෝන කිරීම හැර වෙනත් උපසිරැසි ආරම්භ කිරීමට මට ක්‍රමයක් සොයාගත නොහැකි විය. මම එය කිරීමට අවම වශයෙන් පිටපතක්වත් ලබා ගැනීමට කැමතියි submodule foreach...
වයලට් ජිරාෆ්

ඔබ විසඳුමක් දන්නේ නම්, මම ඔබට පිළිතුරු දිය හැකි වෙනම ප්‍රශ්නයක් අසමි. අතින් හැරෙන්නට
වයලට් ජිරාෆ්

@ වයලට් ජිරාෆ් එයට හේතුව ඔබ .gitmodules එකතු කර ඇති නමුත් එය gitlink නොවේ ( stackoverflow.com/a/16581096/6309 , දර්ශකයේ විශේෂ ඇතුළත් කිරීම්: stackoverflow.com/a/19354410/6309 ) මෙන්න නිධියකි නිසි gitlink ලියාපදිංචි කර ගන්න: github.com/tiagomazzutti/antlr4dart
VonC

117

[ඉක්මන් පිළිතුර]

සියලුම උප මොඩියුල සමඟ ඔබේ repo ක්ලෝන කිරීමට ඔබට මෙම විධානය භාවිතා කළ හැකිය:

git clone --recursive YOUR-GIT-REPO-URL

නැතහොත් ඔබ දැනටමත් ව්‍යාපෘතිය ක්ලෝන කර ඇත්නම්, ඔබට මෙය භාවිතා කළ හැකිය:

git submodule init
git submodule update

33

ඔබේ උප මොඩියුලය ශාඛාවකට එකතු කර ඇත්නම් එය ඔබගේ ක්ලෝන විධානයට ඇතුළත් කිරීමට වග බලා ගන්න ...

git clone -b <branch_name> --recursive <remote> <directory>

මෙය මා සොයන දෙයට සමාන විය ... නමුත් උප මොඩියුලයන් ඔවුන්ගේ ශාඛාව 'වෙන්වූ' ලෙස ලැයිස්තු ගත කරයි. :(
AceFunk

28

මේක උත්සාහ කරන්න:

git clone --recurse-submodules

ඔබ දැනටමත් මව් ව්‍යාපෘතියට උප මොඩියුල එකතු කර ඇතැයි උපකල්පනය කරමින් එය ස්වයංක්‍රීයව උප මොඩියුලයේ දත්ත ඇද ගනී.


38
සටහන බව --recurse-submodulesහා --recursiveසමාන යොමුවීම් .
ජොයෙල් පුර

AnswerSuperUberDuper මෙම අවස්ථාවේදී ඔබට මෙම පිළිතුරෙන්git submodule update --init --recursive පැහැදිලි කළ පරිදි කළ හැකිය
එන්රිකෝ


21

ප්‍රමාද පිළිතුර

// git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY
git clone --recursive https://USERNAME@bitbucket.org/USERNAME/REPO.git DESTINATION_DIR

මම දැන් පැයක් මුළුල්ලේ මිතුරෙකු සමඟ විනෝද වෙමින් සිටියෙමි: ඔබට බිට්බකට් හි පරිපාලක අයිතිවාසිකම් තිබුණත්, සෑම විටම ඔරිජිනල් ගබඩාව ක්ලෝන කර ගබඩාවේ හිමිකරුගේ මුරපදය භාවිතා කරන්න. ඔබ මෙම මිනිට්රැප් එකට දිව ගිය බව දැන ගැනීමට කරදර කිරීම: පී


ඒක තමයි මම ගනුදෙනු කරන්නේ. ඉතින්, ඔබ කියන්නේ උප මොඩියුල ඇති බිට්බකට් ගබඩාවක සංවර්ධනය කිරීමට අවශ්‍ය ඕනෑම අයෙකු නිධිය නිර්මාතෘගේ අක්තපත්‍ර භාවිතා කළ යුතු බවයි? බ්ලීච්.
jsleuth

sjsleuth එසේ පෙනේ - එය විශාල වේලාවක් උරා බොයි ... මම එය දනිමි.
කයිසර්

ඒක දෝෂයක් වගේ. ඔබ එය බිට්බකට් වෙත වාර්තා කළාද?
මතියස් බයිනන්ස්

Ati මතියස් බයිනන්ස් ඔබ මෙම ප්‍රශ්නයට බාධා කළාද? එය වසර එකහමාරකට පසුව වන අතර ඇත්ත වශයෙන්ම මෙය තවමත් පවතීදැයි මම නොදනිමි.
කයිසර්

4
එය OPs ප්‍රශ්නයට විස්තරාත්මකව පිළිතුරු සපයන්නේ නැත, නමුත් බිට්බකට් හි සම්බන්ධයක් නැති දෝෂයක් විස්තර කරයි; අහම්බෙන්, එය "SSH යතුරු සත්‍යාපනය භාවිතා කිරීම" සඳහා කෙටි කළ හැකිය.
ට්‍රෙෆිනන්

18

Git ගබඩාවේ උප මොඩියුල ඇතුළත් කිරීම සඳහා මෙය උත්සාහ කරන්න.

git clone -b <branch_name> --recursive <remote> <directory>

හෝ

git clone --recurse-submodules

18

--recursiveගබඩාවක් ක්ලෝන කිරීමේදී ඔබට ධජය භාවිතා කළ හැකිය . මෙම පරාමිතිය නිධියෙහි අර්ථ දක්වා ඇති සියලුම උප මොඩියුල ක්ලෝන කිරීමට git ට බල කරයි.

git clone --recursive git@repo.org:your_repo.git

ක්ලෝන කිරීමෙන් පසුව, සමහර විට උප මොඩියුල ශාඛා වෙනස් විය හැක, එබැවින් මෙම විධානය ඊට පසුව ක්‍රියාත්මක කරන්න:

git submodule foreach "git checkout master"

17

[ඉක්මන් පිළිතුර]

මව් රෙපෝව ක්ලෝන කිරීමෙන් පසු (එහි සමහර උප මොඩියුල රෙපෝ අඩංගු වේ), පහත පරිදි කරන්න:

git submodule update --init --recursive

11

උප මොඩියුල සමාන්තරව ලබා ගැනීම අරමුණු කරන්නේ එකවර බහුවිධ ගබඩාවන් ලබා ගැනීමට හැකිවන පරිදි නිධි සහ ඒ ආශ්‍රිත සියලුම උප මොඩියුල ලබා ගැනීමට ගතවන කාලය අඩු කිරීමයි. නව --jobs විකල්පය භාවිතා කිරීමෙන් මෙය කළ හැකිය, උදා:

git fetch --recurse-submodules --jobs=4

Git කණ්ඩායමට අනුව, මෙය බොහෝ උප මොඩියුල අඩංගු ගබඩාවන් යාවත්කාලීන කිරීම සැලකිය යුතු ලෙස වේගවත් කළ හැකිය. නව --jobs විකල්පය නොමැතිව --recurse-subodules භාවිතා කරන විට, Git විසින් උප මොඩියුල එකින් එක ලබා ගනී.

මුලාශ්‍රය: http://www.infoq.com/news/2016/03/git28-released


8

මට GitHub ගබඩාවකට එකම ගැටලුවක් තිබුණි. මගේ ගිණුමට SSH යතුර අස්ථානගත වී ඇත. ක්රියාවලිය

  1. SSH යතුර ජනනය කරන්න
  2. ඔබගේ GitHub ගිණුමට නව SSH යතුරක් එක් කිරීම

එවිට, ඔබට උප මොඩියුල ( git clone --recursive YOUR-GIT-REPO-URL) සමඟ නිධිය ක්ලෝන කළ හැකිය.

හෝ

ධාවනය git submodule initහා git submodule updateදැනටමත් සියල්ල ඉවත්කල ගබඩාවේ submodules ලබා ගැනීමට.


ඔව්, එය Permission denied (publickey). fatal: Could not read from remote repository.දෝෂයකි
එන්ඩර්

5

මේක උත්සාහ කරන්න.

git clone -b <branch_name> --recursive <remote> <directory>

ඔබ ශාඛාවක උප මොඩියුලය එකතු කර ඇත්නම් එය ක්ලෝන විධානයට එක් කිරීමට වග බලා ගන්න.


5

එය නව ව්‍යාපෘතියක් නම් ඔබට මේ ආකාරයට කළ හැකිය:

$ git clone --recurse-submodules https://github.com/chaconinc/YourProjectName 

එය දැනටමත් ස්ථාපනය කර ඇත්නම්:

$ cd YourProjectName (for the cases you are not at right directory) 
$ git submodule init
$ git submodule update
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.