සියලුම Git ශාඛා ලබා ගන්නේ කෙසේද


1539

මම ශාඛා පහක් පමණ අඩංගු Git ගබඩාවක් ක්ලෝන කළා. කෙසේ වෙතත්, මම කරන විට මම git branchඒවායින් එකක් පමණක් දකිමි:

$ git branch
* master

සියලුම ශාඛා git branch -aබැලීමට මට කළ හැකි බව මම දනිමි , නමුත් මම සියලු ශාඛා දේශීයව අදින්නේ කෙසේද? එසේ කරන විට එය පහත දැක්වේ.git branch

$ git branch
* master
* staging
* etc...

1
ද මෙහිදී සාකච්ඡාවට stackoverflow.com/questions/67699/...
gliptak

2
--single-branchක්ලෝන කිරීමේදී සැකසුම භාවිතා කිරීමෙන් පසු සියලුම ශාඛා ලබා ගන්නේ කෙසේද යන්න මෙම ප්‍රශ්නයෙන් දැක්වේ : stackoverflow.com/questions/17714159/… ( git fetch --allඔබ එක් ශාඛාවක් පමණක් නියම කර ඇත්නම් කිසි විටෙකත් ක්‍රියා නොකරනු ඇත!)
මැතිව් විල්කොක්සන්

2
තරු ලකුණු මඟින් දැනට පිටව යන ශාඛාව නිරූපණය කරන බැවින් ඔබට එම ප්‍රතිදානය කිසිදා නොපෙනේ. ඔබට එකවර එක් ශාඛාවක් පමණක් පරීක්ෂා කළ හැකි බැවින්, ඔබේ ශාඛා ලැයිස්තුගත කිරීමේ වම්පස ඇත්තේ එක් තරු ලකුණක් පමණි.
රොබිනෝ

5
මම පිළිතුරු ගොඩක් දුටුවෙමි, නමුත් ඔවුන්ගෙන් කිසිවෙකු ඔබට අවශ්‍ය දේ කිරීමට පහසුම ක්‍රමය යැයි මා සිතන දේ සඳහන් කර නැත: git clone --bare <repo url> .git (රෙපෝව ක්ලෝන කිරීම සඳහා අවසානයේ දී "- බෙයාර්" සහ ".ගිට්" එකතු කළ යුතු බව සලකන්න. "හිස්" repo), ඉන්පසු git config --bool core.bare false("හිස්" ධජය අසත්‍ය ලෙස සකසයි), පසුව git reset --hard(HEAD වර්තමාන HEAD වෙත repo වෙත ගෙන යයි). දැන් git branchඔබ ක්ලෝන කළ repo වෙතින් සියලුම ශාඛා දැකිය යුතු නම් .
ගේබ්‍රියෙල් ෆෙරාස්

4
AbGabrielFerraz එවිට ඔබ Stack Overflow හි අදහස් දැක්වීමේ ක්‍රියාකාරිත්වය අනිසි ලෙස භාවිතා කරයි. පරිශීලකයින්ට ඔබේ අදහස ඉහළ නැංවිය හැකි නමුත් පහත් කොට සලකන්නේ නැත.
පයිප්ප

Answers:


2095

මේ වගේ සියලුම දුරස්ථ වලින් ඔබට සියලුම ශාඛා ලබා ගත හැකිය:

git fetch --all

එය මූලික වශයෙන් බල පියවරකි .

fetchදුරස්ථ ශාඛා දේශීය පිටපත් යාවත්කාලීන මෙම සෑම විටම ඔබගේ දේශීය ශාඛා සඳහා ආරක්ෂිත එසේ ඒත් :

  1. fetchදේශීය ශාඛා යාවත්කාලීන නොකරනු ඇත ( දුරස්ථ ශාඛා නිරීක්ෂණය කරන ); ඔබේ දේශීය ශාඛා යාවත්කාලීන කිරීමට ඔබට අවශ්‍ය නම් සෑම ශාඛාවක්ම අදින්න අවශ්‍යයි.

  2. fetchදේශීය ශාඛා නිර්මාණය නොකරනු ඇත ( දුරස්ථ ශාඛා නිරීක්ෂණය කරන ), ඔබ මෙය අතින් කළ යුතුය. සියලුම දුරස්ථ ශාඛා ලැයිස්තුගත කිරීමට ඔබට අවශ්‍ය නම්: git branch -a

කිරීමට යාවත්කාලීන දුරස්ථ ශාඛා නිරීක්ෂණය දේශීය ශාඛා:

git pull --all

කෙසේ වෙතත්, මෙය තවමත් ප්රමාණවත් නොවේ. එය ක්‍රියාත්මක වන්නේ දුරස්ථ ශාඛා නිරීක්ෂණය කරන ඔබේ දේශීය ශාඛා සඳහා පමණි. සියලුම දුරස්ථ ශාඛා නිරීක්ෂණය කිරීමට පෙර මෙම ඔන්ලයින් යන්ත්‍රය ක්‍රියාත්මක කරන්න git pull --all:

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

ටීඑල්; ඩීආර් අනුවාදය

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

(අදින්න සියලු දුරස්ථ වලින් සියලුම ශාඛා ලබා ගන්නා බව පෙනේ, නමුත් මම සෑම විටම පළමුව ලබා ගන්නේ ස්ථිරවම පමණි.)

පළමු විධානය ක්‍රියාත්මක කරන්න ඔබේ දේශීය ශාඛා විසින් නිරීක්ෂණය නොකරන ලද දුරස්ථ ශාඛා සේවාදායකයේ තිබේ නම් පමණි.

PS AFAIK git fetch --allසහ git remote updateසමාන වේ.



Kamil Szot ගේ ප්‍රකාශය , බොහෝ දෙනෙකුට ප්‍රයෝජනවත් වී තිබේ.

මට භාවිතා කිරීමට සිදු විය:

for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

ඔබේ කේතය නම් කර ඇති දේශීය ශාඛා නිර්මාණය කර ඇති origin/branchnameඅතර මා එය යොමු කරන සෑම විටම "නැවත නම" සම්භවය / ශාඛා නාමය ලබා ගැනීම අපැහැදිලි ය.


43
සමාවන්න. OP ට සැබවින්ම අවශ්‍ය වන්නේ මෙය යැයි මට සිතාගත නොහැකිය. 'අදින්න' විධානය 'ලබා ගැනීම + ඒකාබද්ධ කිරීම' වන අතර ඒකාබද්ධ කිරීමේ කොටස සියලු ශාඛා එකිනෙක උඩින් වැසී යයි - එක් යෝධ අවුලක් ඉතිරි කරයි.
GoZoner

10
එය ලබා ගැනීම මඟින් ඔබ තවමත් එය පරීක්ෂා කර බැලිය යුතු නව දුරස්ථ ශාඛාවක් නිර්මාණය නොකරනු ඇතgit checkout -b localname remotename/remotebranch
Learath2

126
මම භාවිතා කිරීමට සිදු for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done ඔබගේ කේතය සම්භවය / branchname නම් දේශීය ශාඛා නිර්මාණය නිසා මම එය සඳහන් වන ඕනෑම වෙලාවක මම "refname 'සම්භවය / branchname' කියල අපැහැදිලි වේ.
කාමිල් Szot

22
මම GIT හි වෙනස් සංස්කරණයක් භාවිතා කරන්නේ දැයි මම නොදනිමි, නමුත් මට පිටපත සංශෝධනය කිරීමට සිදු විය git pull --all; for remote in `git branch -r | grep -v \>`; do git branch --track ${remote#origin/} $remote; done. වෙනස HEAD ඉවත් කරයි.
kim3er

16
වින්ඩෝස් පුද්ගලයින් සඳහා:for /F %remote in ('git branch -r') do ( git branch --track %remote) && git fetch --all && git pull --all
උපරිම

735

දුරස්ථ ශාඛා ලැයිස්තුගත කිරීම සඳහා:
git branch -r

ඔබට ඒවා දේශීය ශාඛා ලෙස පරීක්ෂා කළ හැකිය:
git checkout -b LocalName origin/remotebranchname


90
ඉහත ප්‍රශ්නය සොයාගත් විට මා සොයමින් සිටියේ මෙයයි. දුරස්ථ ශාඛාවක් අදින්නේ කෙසේදැයි සොයන බොහෝ දෙනෙකුට ඔවුන්ගේ වර්තමාන වැඩ කරන පිටපතට ශාඛාව ඒකාබද්ධ කිරීමට අවශ්‍ය නොවන බව මට සැකයි, නමුත් දුරස්ථ ශාඛාවට සමාන දේශීය ශාඛාවක් ඔවුන්ට අවශ්‍යය.
Frug

13
ශාඛාව දේශීයව නොපෙනුනත් මට එය කළ හැකි git checkout remotebranchnameඅතර එය ක්‍රියාත්මක වේ. ඔබේ විසඳුමේ වෙනස කුමක්ද?
ප්‍රංශුවා රොමේන්

13
එහි පෙරනිමි හැසිරීම දැන්. පැරණි git අනුවාද වල එසේ නොවේ. භාවිතා කරමින් git checkout remotebranchnameහුදෙක් නවීන නිර්මාණය කිරීම සඳහා භාවිතා සම්බන්ධයක් නැති නම් කරන ශාඛා remotebranchname .
Learath2

12
පිළිගත් පිළිතුර මූලික වශයෙන් වෙනස් දෙයක් කරයි. අවංකව කිවහොත් එහි පිළිගත් පිළිතුර
කුමක්දැයි මට නොතේරේ

8
OP සියළුම ශාඛා ඉල්ලා සිටියේය. මෙම පිළිතුර එකක් පමණක් කරයි.
ටෙඩ් බිග්හැම්

194

දුරස්ථ ශාඛා ලුහුබැඳ දේශීය ශාඛා නිර්මාණය කිරීමට ඔබට අවශ්‍ය වනු ඇත.

ඔබට ඇත්තේ එක් දුරස්ථ ඇමතුමක් පමණක් යැයි උපකල්පනය කරමින් origin, මෙම ස්නිපටය සියලුම දුරස්ථ ලුහුබැඳීම් සඳහා දේශීය ශාඛා නිර්මාණය කරයි:

for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

ඊට පසු, git fetch --allදුරස්ථ ශාඛා වල සියලුම දේශීය පිටපත් යාවත්කාලීන කරනු ඇත.

එසේම, git pull --allඔබේ දේශීය ෙසොයා ගැනීෙම් ශාඛා යාවත්කාලීන කරනු ඇත, නමුත් ඔබේ ෙද්ශීය කැපවීම් සහ 'ඒකාබද්ධ' වින්‍යාස විකල්පය සකසා ඇති ආකාරය අනුව, එය ඒකාබද්ධ කිරීෙම්, වේගයෙන් ඉදිරියට ෙහෝ අසමත් වීමට ඉඩ ඇත.


5
මෙය ෂෙල් මෙටාචරැක්ටර්ස් අඩංගු ශාඛා නාමවලට ​​එරෙහි විසඳුම ශක්තිමත් කරයි (අනෙක් පිළිතුර පිළිබඳ පිංකීන් කළ ප්‍රකාශයට අනුව), සහ ව්‍යාජ දෝෂ ප්‍රතිදානය වළක්වයි: git branch -r | grep -v - '->' | දුරස්ථ කියවන අතරතුර; do git branch --track "$ {දුරස්ථ # සම්භවය /}" "$ දුරස්ථ" 2> & 1 | grep -v 'දැනටමත් පවතී'; අවසන්
ඩයිරා හොප්වුඩ්

6
git pull --allඑය සියලුම දේශීය ලුහුබැඳීම් ශාඛා යාවත්කාලීන කරනු ඇතැයි ඔබට විශ්වාසද ? මට කිව හැකි තාක් දුරට සියලුම දුරස්ථ වලින් වත්මන් ශාඛාව යාවත්කාලීන කිරීම පමණි.
ඇන්ඩි

3
මෙය කළා. දුරස්ථ ශාඛා වලට ගැලපෙන දේශීය ශාඛා නිර්මාණය නොවීය. "දුරස්ථ ශාඛා නොපවතින නම් දේශීය ඒවා නිර්මාණය කරන්න" යනුවෙන් සරලව පවසන git විධානය කුමක්ද?
ජෝසප්

Ose ජොසෙප්කේ සමහර විට ඔබේ දුරස්ථය නොකියයිද origin? සියලුම දුරස්ථ නම් වලින් ක්‍රියා කරන මෙම පිළිතුර බලන්න .
ටොම් හේල්

Om ටොම්හෙල් එය "සම්භවය" විය, නමුත් ඔබේ පිළිතුරට ස්තූතියි - පිස්සු වුවත් කොඩි එකක් හෝ දෙකක් විය යුතු දේ කිරීමට බොහෝ දේ අවශ්‍ය වේ. මම දැන් උත්සාහ කරන්නේ git හි සමහර අංගවල උමතුකම වළක්වා ගැනීමට ය.
ජෝශප්කේ

116

ඔබ එසේ කරන්නේ නම්:

git fetch origin

එවිට ඔවුන් සියල්ලම දේශීයව සිටිනු ඇත. ඔබ එසේ කරන්නේ නම්:

git branch -a

ඒවා දුරස්ථ / සම්භවය / ශාඛා නාමය ලෙස ලැයිස්තුගත කර ඇති බව ඔබට පෙනෙනු ඇත. ඔවුන් දේශීයව සිටින බැවින් ඔබට ඔවුන් සමඟ කැමති දෙයක් කළ හැකිය. උදාහරණයක් වශයෙන්:

git diff origin/branch-name 

හෝ

git merge origin/branch-name

හෝ

git checkout -b some-branch origin/branch-name

5
ගූගල් හි මෙම පිටුව හමු විය ... මෙය මා සොයන සත්‍ය පිළිතුරයි. මම පළමු විධානය උත්සාහ කළ නමුත් දෝෂයක් ලැබුණි: [it git fetch --all origin මාරාන්තික: fetch --all නිධිය තර්කයක් නොගනී] --- “git fetch --all” භාවිතා කිරීම උපක්‍රමය බව පෙනේ. ඊයම් වලට ස්තූතියි!
longda

1
ස්ථාවර (ඉවත් කරන ලදි --all)
ගොසොනර්

12
git fetch -allසියලුම දුරස්ථ වල සියලුම ශාඛා ලබා ගනී. git fetch originදුරස්ථයේ සියලුම ශාඛා ලබා ගනී origin. පසුකාලීනව OP ඉල්ලා සිටියේ එයයි.
ගොසොනර්

3
--all"ලබා දී ඇති දුරස්ථයේ සියලුම ශාඛා" නොව "සියලු දුරස්ථ" යන්නයි. දෙවැන්න දුරස්ථයකින් ලබා ගැනීමකින් ගම්‍ය වේ.
පරතරය

2
දුරස්ථ repo සිට සියලුම ශාඛා දේශීය repo වෙත ඇද ගැනීමේ මාර්ගය මෙය නොවේ.
ව්ලැඩිමීර් ඩෙස්පොටොවික්

71
$ git remote update
$ git pull --all

මෙය උපකල්පනය කරන්නේ සියලුම ශාඛා ලුහුබැඳ ඇති බවයි.

ඔවුන් එසේ නොවේ නම් ඔබට මෙය Bash හි වෙඩි තැබිය හැකිය:

for remote in `git branch -r `; do git branch --track $remote; done

ඉන්පසු විධානය ක්‍රියාත්මක කරන්න.


3
මම උත්සාහ කළ විට මට තවමත් ඉහත ප්‍රති result ලයම ලැබේ.
ඩේවිඩ් 542

4
A ජාකොබ්ලොව් හා සමානවම, මට දෝෂය ඇතිවිය, නමුත් එය කෙසේ හෝ ක්‍රියාත්මක විය; 'මාරාන්තික:' සම්භවය / ස්වාමියා 'නම් ශාඛාවක් දැනටමත් පවතී.'
ne න් TheAgile

මෙය අවලස්සන වන අතර එය 'සම්භවය / හෙඩ්->git branch -r
ටොම් හේල්

එපමණක්ද නොව, එය ක්රියා නොකරයි. මට ප්‍රතිදානය ලැබේ: Branch 'origin/quote-filenames' set up to track local branch 'master'. අපේක්ෂිත ප්‍රතිදානය: Branch 'quote-filenames' set up to track remote branch 'quote-filenames' from 'origin'. මෙය පසුපසට , දුරස්ථය නිරීක්ෂණය කිරීමට මූලාරම්භය සකසයි. නිවැරදි කිරීම සඳහා මෙම පිළිතුර බලන්න .
ටොම් හේල්

මට අවශ්‍ය දේ. මම මැක්ස් මාරු කළ බැවින්, මම රෙපෝව ක්ලෝන කිරීමෙන් පසුව පවා වෙනත් දුරස්ථ ශාඛා පරීක්ෂා git fetchකිරීමට මට නොහැකි වූ අතර එය ක්‍රියා නොකරනු ඇත. එබැවින් මෙහි ඇති පාඩම නම් දුරස්ථ ශාඛා නිරීක්ෂණය කිරීමට ඔබට අවශ්‍ය බවයි. ග්‍රේසියස්!
වික්ටර් රමෝස්

58

බෑෂ් forලූපය මා වෙනුවෙන් වැඩ කළේ නැත, නමුත් මෙය මට අවශ්‍ය දේම කළේය. මගේ මූලාරම්භයේ ඇති සියලුම ශාඛා එකම නමින් දේශීයව පිළිබිඹු වේ.

git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'

ශුද්ධාසනයේ මයික් ඩූපොන්ට් ගේ පහත ප්රකාශය. මම හිතන්නේ මම මෙය කිරීමට උත්සාහ කළේ ජෙන්කින්ස් සර්වරයකින් එය වෙන් කළ හිස් මාදිලියේ තබයි.


6
එය fatal: Refusing to fetch into current branch refs/heads/master of non-bare repositoryසරල ක්ලෝනයකින් පසුව නිපදවයි . මුලින්ම හිස වෙන් කළ යුතුයි. මම මෙය කළේgit checkout <SHA>
බ්‍රැනර්චීනීස්

6
මෙය භාවිතා කරන මගේ විසඳුම වන්නේgit checkout --detach # detach the headgit fetch origin \'+refs/heads/*:refs/heads/*
මයික් ඩුපොන්ට්

1
මමත් --tags පරාමිතිය භාවිතා කරනවා හැර මෙය මා වෙනුවෙන් වැඩ කළේය. Git සඳහා සම්මත, සරල ඉදිරිපස කෙළවරක් තිබෙන්නට ඇතැයි මම ප්‍රාර්ථනා කරමි, 10-ප්ලස් තොග පිටාර ගැලීමේ පිළිතුරු අවශ්‍ය වන git හි ඇති සරල දේවල් ගණන හාස්‍යජනකය!
kristianp

1
ristkristianp ඔබ Ungit හෝ GitKraken පරීක්ෂා කර තිබේද?
ඩ්‍රැගන් 788

g dragon788 මම Git GUI සඳහා SourceTree භාවිතා කර ඇත, නමුත් මම ඇත්ත වශයෙන්ම කතා කළේ ස්ක්‍රිප්ටින් කාර්යයන් සඳහා සරල විධාන රේඛාවක් ගැන ය.
kristianp

51

භාවිතා කරන්න git fetch && git checkout RemoteBranchName.

එය මට ඉතා හොඳින් ක්‍රියාත්මක වේ ...


6
මේක තමයි හොඳම හොඳම පිළිතුර, ඔව්. මීට පෙර මෙය කළ නොහැකි දැයි මම නොදනිමි, නමුත් Git හි මෑත සංස්කරණ අවම වශයෙන් ඔබ දුරස්ථ ශාඛාවක් පරීක්ෂා කිරීමට උත්සාහ කරන බව දකිනු ඇති අතර ඔබ වෙනුවෙන් දේශීය ලුහුබැඳීමේ ශාඛාව ස්වයංක්‍රීයව සැකසෙනු ඇත (ඔබට අවශ්‍ය නැත නියම කිරීමට origin/branch; එය පමණක් පැවසීමට ප්‍රමාණවත් branch).
නීල් ට්‍රැෆ්ට්

9
මෙය මුල් ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත: "මම සියලුම ශාඛා දේශීයව අදින්නේ කෙසේද?" එය ඒවා එකින් එක ඇදගෙන යන අතර එය පරිමාණය කළ නොහැකි ය.
ingyhere

මට හමු වූ සෑම අවස්ථාවකම දුරස්ථ ශාඛා ඇද ගැනීමට මට ඉඩ දුන් එකම පිළිතුර මෙයයි
එමානුවෙල් බක්ෂි

38

ඔබ ගබඩාවක් ක්ලෝන කරන විට ශාඛා වල සියලු තොරතුරු සැබවින්ම බාගත කර ඇති නමුත් අතු සැඟවී ඇත. විධානය සමඟ

$ git branch -a

ඔබට නිධියේ සියලුම ශාඛා සහ විධානය පෙන්විය හැකිය

$ git checkout -b branchname origin/branchname

ඔබට ඒවා එකවර අතින් "බාගත" කළ හැකිය.


කෙසේ වෙතත්, එය ටිකක් සංකීර්ණ වුවද වඩා පිරිසිදු හා ඉක්මන් ක්රමයක් තිබේ. මෙය ඉටු කිරීම සඳහා ඔබට පියවර තුනක් අවශ්‍ය වේ:

  1. පළමු පියවර

    ඔබේ පරිගණකයේ නව හිස් ෆෝල්ඩරයක් සාදා නිධියෙන් .git ෆෝල්ඩරයේ කැඩපත් පිටපතක් ක්ලෝන කරන්න:

    $ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
    $ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
    

    my_repo_folder ෆෝල්ඩරය තුළ ඇති දේශීය ගබඩාව තවමත් හිස් ය, සැඟවුණු .git ෆෝල්ඩරයක් පමණක් ඇත, දැන් ඔබට ටර්මිනලයේ සිට "ls -alt" විධානයක් දැකිය හැකිය.

  2. දෙවන පියවර

    මෙම ගබඩාව හිස් (හිස්) ගබඩාවක සිට නිත්‍ය ගබඩාවකට මාරු කරන්න. Git වින්‍යාසයන්හි බූලියන් අගය “හිස්” යන්න ව්‍යාජ ලෙස මාරු කිරීමෙන්:

    $ git config --bool core.bare false
    
  3. තෙවන පියවර

    වත්මන් ෆෝල්ඩරයේ ඇති සියල්ල අල්ලා දේශීය යන්ත්‍රයේ සියලුම ශාඛා සාදන්න, එබැවින් මෙය සාමාන්‍ය ගබඩාවක් බවට පත් කරන්න.

    $ git reset --hard
    

දැන් ඔබට විධානය ටයිප් git branchකළ හැකි අතර සියලුම ශාඛා බාගත කර ඇති බව ඔබට පෙනෙනු ඇත.

සියලුම ශාඛා සමඟ එකවර ඔබට git ගබඩාවක් ක්ලෝන කළ හැකි ඉක්මන්ම ක්‍රමය මෙයයි, නමුත් එය මේ ආකාරයට සෑම ව්‍යාපෘතියක් සඳහාම ඔබට කිරීමට අවශ්‍ය දෙයක් නොවේ.


1
සැඟවුණු අතු ගැන සඳහන් කිරීම සඳහා ඉහළට. ප්‍රාදේශීය ශාඛා ලුහුබැඳීම ඉමහත් ලෙස තේරුම් ගැනීමට මට උදව් විය.
mburke05

එය හොඳ පිළිතුරකි, නමුත් ප්‍රශ්නය සෑම දිනකම භාවිතා කිරීම සඳහා යමක් ඇඟවුම් කරයි. සෑම විටම නිධිය ක්ලෝන කිරීම ප්‍රායෝගික නොවේ.
ඉසෙඩ් කුල්ලා

යළි පිහිටුවීම මඟින් සියලුම ශාඛා දේශීයව නිර්මාණය කරන්නේ ඇයි?
ඉසෙඩ් කුල්ලා

@ Z.Khullah එය සියළුම ශාඛා නිර්මාණය කරන්නේ යළි පිහිටුවීම නොව ක්ලෝනය - මිරර් ය. අවාසනාවකට මෙන්, එය ද හිස් රෙපෝවක් නිර්මාණය කරයි, එය පියවර 2 සහ 3 වෙනස් වේ.
ස්කොට් ජේ

29

ඔබට සියලු ශාඛා ලබා ගත හැක්කේ:

git fetch --all

හෝ:

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

මෙම --depth=10000පරාමිතිය ඔබට ගබඩාව shallowed ඇත්නම් උදව් විය හැක.


සියලුම ශාඛා අදින්න, භාවිතා කරන්න:

git pull --all

ඉහත ක්‍රියා නොකරන්නේ නම්, ඉහත විධානයට පෙර:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

remote.origin.fetchලබා ගැනීමේදී නිශ්චිත ශාඛාවකට පමණක් සහාය විය හැකි බැවින් , විශේෂයෙන් ඔබ ඔබේ ගබඩාව ක්ලෝන කළ විට --single-branch. මෙය පරීක්ෂා කරන්න : git config remote.origin.fetch.

ඊට පසු ඔබට ඕනෑම ශාඛාවක් පරීක්ෂා කිරීමට හැකි විය යුතුය.

මෙයද බලන්න:


සියලුම ශාඛා දුරස්ථයට තල්ලු කිරීමට, භාවිතා කරන්න:

git push --all

අවසානයේදී --mirrorසියලු යොමු කිරීම් පිළිබිඹු කිරීමට.


ඔබේ ඉලක්කය නිධියක් අනුපිටපත් කිරීම නම්, බලන්න: GitHub හි නිධිය ලිපියක් අනුපිටපත් කිරීම .


1
නියමයි ... මෙම පිටුවේ ඔබේ විසඳුමට පෙර මම අනෙක් සියල්ල උත්සාහ කළෙමි. ගොඩක් ස්තුතියි!
සුජෝයි

2
මම නොගැඹුරු ක්ලෝනින් ( depth=1) භාවිතා කළ අතර වින්‍යාසය ද එක් විශේෂිත ශාඛාවක් නියම කර ඇත fetch- depth=1000පරාමිතිය යනු නිශ්චිත දුරස්ථ ශාඛාවක් පරීක්ෂා කිරීමට මට උපකාර කළ විසඳුමයි
සැන්ඩ්‍රා

2
pull --allසියලුම ශාඛා අදින්නේ නැත, නමුත් සියලුම දුරස්ථ
Z. Khullah

වින්‍යාසය සමඟ හොඳ උපක්‍රමයක්, නමුත්! ඔවුන් සියල්ලන්ම සෑම විටම ලබා
ගනීවි

ඔබ ලියූ පරිදි මම වින්‍යාසය පරීක්ෂා කළෙමි, තවමත් ක්‍රියාත්මක වන්නේ වත්මන් ශාඛාව සමඟ පමණි. මෙහි ඇති සියලුම පිළිතුරු මට
ප්‍රයෝජනවත්

25

මම සාමාන්‍යයෙන් මේ වගේ විධානයන් හැර වෙන කිසිවක් භාවිතා නොකරමි:

git fetch origin
git checkout --track origin/remote-branch

ටිකක් කෙටි අනුවාදය:

git fetch origin
git checkout -t origin/remote-branch

17

මම විශ්වාස කරන්නේ ඔබ විසින් නිධිය ක්ලෝන කර ඇති බවයි:

git clone https://github.com/pathOfrepository

දැන් cd භාවිතා කර එම ෆෝල්ඩරයට යන්න:

cd pathOfrepository

ඔබ ටයිප් කළහොත් ඔබට git statusසියල්ල දැකිය හැකිය:

   On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

සියලු සැඟවුණු ශාඛා වර්ග බැලීමට:

 git branch -a

එය සියලුම දුරස්ථ ශාඛා ලැයිස්තුගත කරනු ඇත.

දැන් ඔබට කිසියම් විශේෂිත ශාඛාවක් පරීක්ෂා කර බැලීමට අවශ්‍ය නම් ටයිප් කරන්න:

git checkout -b localBranchName origin/RemteBranchName

16

ඔබ මෙහි පැමිණෙන්නේ සියලුම ශාඛා ලබාගෙන පසුව වෙනත් Git සේවාදායකයකට සංක්‍රමණය වීමට නම්, මම පහත ක්‍රියාවලිය එකට තබමි. සියලුම ශාඛා දේශීයව යාවත්කාලීන කිරීමට ඔබට අවශ්‍ය නම්, පළමු හිස් පේළියේ නතර වන්න.

git clone <ORIGINAL_ORIGIN>
git branch -r | awk -F'origin/' '!/HEAD|master/{print $2 " " $1"origin/"$2}' | xargs -L 1 git branch -f --track 
git fetch --all --prune --tags
git pull --all

git remote set-url origin <NEW_ORIGIN>
git pull
<resolve_any_merge_conflicts>
git push --all
git push --tags
<check_NEW_ORIGIN_to_ensure_it_matches_ORIGINAL_ORIGIN>

3
ඉතා ප්රයෝජනවත්; මට අවශ්‍ය දේ හරියටම. මට වෙනස් කළ යුතු එකම දෙය දෙවන පේළියේ, 'හෙඩ්' සහ 'මාස්ටර්' වටා තනි උපුටා දැක්වීම් එකතු කිරීම ය; සමහර විට මම zsh භාවිතා කරන නිසා. ස්තූතියි!
sockmonk

මෙය මූලික වශයෙන් පහත සඳහන් දේ කරයි: (1) දුරස්ථ ශාඛා වල සැබෑ නම් ලබා ගැනීම [හිස නොව ස්වාමියා නොවේ]; (2) ඒවා සොයා ගැනීමට Git ට සම්පුර්ණයෙන්ම පැවසීම [සියලු විසඳුම් මෙය නොකරයි]; (3) මෙම අතු වලින් සෑම දෙයක්ම ලබා ගැනීම සහ ඇද ගැනීම [ටැග් ඇතුළුව]; (4) නව සම්භවයක් ඇති කිරීම සහ සෑම දෙයක්ම ඉහළට ඔසවා තැබීම. නැවතත්, අනෙක් විසඳුම් බොහොමයක් සියලු කොටස් චලනය කිරීමට අසමත් වේ. මේ සියල්ල කරයි.
ingyhere

1
මම grep ධාවනය කිරීමේ ප්‍රති-රටාව ඉවත් කර පසුව අවදි කර grep විධානයන් awk විධානයට cond නීභවනය කළෙමි. ස්තූතියි ත්‍රිත්ව !
ingyhere

මෙය කියවා කිසි විටෙකත් git fetch git pull stackoverflow.com/a/292359/1114926
හරිත

Git pullසැබවින්ම කරන්නේ fetchපළමු නමුත් එය ගැටලුව සිට නම් කියන්න ලේසියි fetchකොටසක් pullහෝ ඉන් පසුව mergeකොටසක් pullවිට fetchස්වාධීනව ක්රියාත්මක වේ.
ingyhere

12

ඔබ ප්‍රධාන ගබඩාව ක්ලෝන කළ පසු, ඔබට ක්‍රියාත්මක කළ හැකිය

git fetch && git checkout <branchname>

1
සරල. දුරස්ථ සම්භවයක් ඇති ශාඛාවක් ලබා ගැනීමට කටයුතු කළේය
සර්වොන්

3
මෙය මුල් ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත: "මම සියලුම ශාඛා දේශීයව අදින්නේ කෙසේද?" එය ඒවා එකින් එක ඇදගෙන යන අතර එය පරිමාණය කළ නොහැකි ය. ශාඛා 100 ක් සම්බන්ධයෙන් සලකා බලන්න.
ingyhere

11

සියලුම දුරස්ථ ශාඛා .git/configගොනුවේ ලබා ගත හැකි බවට වග බලා ගන්න .

මෙම උදාහරණයේ දී, ලබා ගත හැකි වන්නේ origin/productionශාඛාව පමණි, ඔබ git fetch --allකිසිවක් කිරීමට උත්සාහ කළත් productionශාඛාව ලබා ගැනීම හැර කිසිවක් සිදු නොවේ :

[origin]
fetch = +refs/heads/production:refs/remotes/origin/production

මෙම රේඛාව ආදේශ කළ යුත්තේ:

[origin]
fetch = +refs/heads/*:refs/remotes/origin/*

ඉන්පසු ධාවනය කරන්න git fetch...


3
පරීක්ෂා කිරීම සඳහා: git config --get remote.origin.fetchඉන්පසු (විනාශකාරී ලෙස) එය සකසන්න:git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
qneill

හෝ .git බහලුමේ වින්‍යාස පෙළ ගොනුව වෙනස් කිරීම, මා වෙනුවෙන් වැඩ කිරීම
FDIM

9

ලූප් කිරීම මට වැඩ කරන බවක් නොපෙනුණු අතර මට අවශ්‍ය වූයේ සම්භවය / ස්වාමියා නොසලකා හැරීමටයි. මෙන්න මට වැඩ කළ දේ.

git branch -r | grep -v HEAD | awk -F'/' '{print $2 " " $1"/"$2}' | xargs -L 1 git branch -f --track

එයට පසු:

git fetch --all
git pull --all

1
මෙහි විචලනය නිවැරදි පිළිතුරයි, නමුත් මෙය සියලු අද්දර අවස්ථාවන්හිදී ක්‍රියා නොකරයි. එසේම, ශාඛා නම් විනෝදජනක විය හැකිය. එබැවින් මම පහත සඳහන් දේ කළෙමි: git branch -r | grep -v HEAD | grep –v මාස්ටර් | awk -F'origin / '' {print $ 2 "" $ 1 "සම්භවය /" $ 2} '| xargs -L 1 git branch -f --track; git fetch --all; git pull --all; ඒ උපක්‍රමය!
ingyhere

3
grep | awk ප්‍රතිgit branch -r | awk -F 'origin/' '!/HEAD|master/{
රටාව

9

පිරිමි ළමයින්ගේ ප්‍රශ්නයට කිසිවෙකු පිළිතුරු නොදී සිදුවන්නේ කුමක්ද යන්න පැහැදිලි කරන්නේ ඇයි?

  1. ඔබ සියලු දුරස්ථ ශාඛා (හෝ ඔබට නිරීක්ෂණය කිරීමට අවශ්‍ය ඒවා) නිරීක්ෂණය කරන බවට වග බලා ගන්න .
  2. දුරස්ථ ශාඛා පිළිබිඹු කිරීම සඳහා ඔබේ දේශීය ශාඛා යාවත්කාලීන කරන්න.

සියලුම දුරස්ථ ශාඛා ලුහුබඳින්න:

දුරස්ථ repo හි ඇති සියලුම ශාඛා ලුහුබඳින්න.

අතින් එය කරන්න:

<branch>ප්‍රතිදානයෙන් පෙන්වන ශාඛාවක් සමඟ ඔබ ආදේශ කරනු ඇත git branch -r.

git branch -r
git branch --track <branch>

Bash ස්ක්‍රිප්ට් එකකින් එය කරන්න

for i in $(git branch -r | grep -vE "HEAD|master"); do git branch --track ${i#*/} $i; done

ඔබේ දේශීය පරිගණකයේ දුරස්ථ ශාඛා පිළිබඳ තොරතුරු යාවත්කාලීන කරන්න:

මෙය ඔබේ දේශීය ගබඩාවේ ඔබ නිරීක්ෂණය කරන දුරස්ථ repo වෙතින් ශාඛා පිළිබඳ යාවත්කාලීන කිරීම් ලබා ගනී. මෙය ඔබේ දේශීය ශාඛා වෙනස් නොකරයි. ඔබගේ දේශීය git repo දැන් දුරස්ථ repo ශාඛා වල සිදුවී ඇති දේ පිළිබඳව දැනුවත් වී ඇත. උදාහරණයක් ලෙස දුරස්ථ මාස්ටර් වෙත නව බැඳීමක් තල්ලු කර ඇති අතර, එය ලබා ගැනීම මඟින් ඔබගේ දේශීය ස්වාමියා බැඳීම් 1 කින් පිටුපසින් සිටින බව දැන් ඔබට දැනුම් දෙනු ඇත.

git fetch --all

ඔබේ දේශීය පරිගණකයේ දුරස්ථ ශාඛා පිළිබඳ තොරතුරු යාවත්කාලීන කර දේශීය ශාඛා යාවත්කාලීන කරන්න:

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

git pull --all

8

මෙම විධානයන් තුනටම සියලු ශාඛා ලැබෙනු ඇත:

git clone --mirror repo.git  .git     (gets just .git  - bare repository)

git config --bool core.bare false

git reset --hard

මෙය ඇත්ත වශයෙන්ම OP හි ගැටලුවේ මුලයි. නිවැරදිව ක්ලෝන කර ඇත්නම්, ඔහුට එය කිරීමට අවශ්‍ය නොවනු ඇත pull --all. නමුත් තවමත් අවශ්‍ය නම්, අනෙක් පිළිතුර නම්, ජොහ්නෝ නොලා විසින්, සියලුම ශාඛා ලුහුබැඳ ඇති බව උපකල්පනය කර, මෙම පිළිතුර සමඟ මිශ්‍ර කර, යා යුතු මාර්ගයයි.
ආචාර්ය බෙකෝ

5

තනි දුරස්ථව ලුහුබැඳ යන සියලුම Git ශාඛා ලබා ගන්නේ කෙසේද.

මෙය අත්හදා බලා ඇති අතර වින්ඩෝස් 10 හි Red Hat සහ Git Bash මත ක්‍රියා කරයි.


TLDR:

for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;

පැහැදිලි කිරීම:

එක් ලයිනර් පරීක්‍ෂා කර HEAD හැර අනෙකුත් සියලුම ශාඛා ලබා ගනී.

දුරස්ථ ලුහුබැඳීමේ ශාඛා ලැයිස්තුගත කරන්න.

git branch -r

HEAD නොසලකා හරින්න.

grep -v ' -> '

දුරස්ථ (ය) වලින් ශාඛා නම ඉවත් කරන්න.

cut -d"/" -f2

තනි දුරස්ථයක් නිරීක්ෂණය කරන සියලුම ශාඛා පරීක්ෂා කරන්න.

git checkout $branch

පරීක්ෂා කළ ශාඛාව සඳහා ලබා ගන්න.

git fetch

නව දේශීය ශාඛා සඳහා තාක්‍ෂණිකව ලබා ගැනීම අවශ්‍ය නොවේ.

මෙම එක්කෝ සඳහා භාවිතා කල හැක, fetchහෝ pullදෙකම අලුත් සහ දුරස්ථ (ව) වෙනස් වන බව ශාඛා.

ඔබ ඒකාබද්ධ කිරීමට සූදානම් නම් පමණක් අදින්නට වග බලා ගන්න.


පරීක්ෂණ සැකසුම

SSH URL සමඟ ගබඩාවක් පරීක්ෂා කරන්න.

git clone git@repository.git

කලින්

දේශීය වශයෙන් ශාඛා පරීක්ෂා කරන්න.

$ git branch
* master

විධාන ක්‍රියාත්මක කරන්න

එක් ලයිනර් ක්රියාත්මක කරන්න.

for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;

පසු

දේශීය ශාඛා පරීක්ෂා කරන්න දුරස්ථ (ය) ශාඛා.

$ git branch
  cicd
  master
* preprod

4

නව රිපෝවක් ක්ලෝන කිරීම සහ දුරස්ථ ශාඛා සඳහා දේශීය ශාඛා සෑදීම සඳහා මම කුඩා පිටපතක් ලිවීය.

ඔබට නවතම අනුවාදය මෙතැනින් සොයාගත හැකිය :

#!/bin/bash

# Clones as usual but creates local tracking branches for all remote branches.
# To use, copy this file into the same directory your git binaries are (git, git-flow, git-subtree, etc)

clone_output=$((git clone "$@" ) 2>&1)
retval=$?
echo $clone_output
if [[ $retval != 0 ]] ; then
    exit 1
fi
pushd $(echo $clone_output | head -1 | sed 's/Cloning into .\(.*\).\.\.\./\1/') > /dev/null 2>&1
this_branch=$(git branch | sed 's/^..//')
for i in $(git branch -r | grep -v HEAD); do
  branch=$(echo $i | perl -pe 's/^.*?\///')
  # this doesn't have to be done for each branch, but that's how I did it.
  remote=$(echo $i | sed 's/\/.*//')
  if [[ "$this_branch" != "$branch" ]]; then
      git branch -t $branch $remote/$branch
  fi
done
popd > /dev/null 2>&1

එය භාවිතා කිරීම සඳහා, එය ඔබගේ git bin නාමාවලියට පිටපත් කරන්න (මට නම්, එය C:\Program Files (x86)\Git\bin\git-cloneall), ඉන්පසු විධාන රේඛාවේ:

git cloneall [standard-clone-options] <url>

එය සුපුරුදු පරිදි ක්ලෝන කරයි, නමුත් සියලුම දුරස්ථ ශාඛා සඳහා දේශීය ෙසොයා ගැනීෙම් ශාඛා නිර්මාණය කරයි.


4

පවර්ෂෙල් භාවිතා කරන වින්ඩෝස් පරිශීලකයින් සඳහා:

git branch -r | ForEach-Object {
    # Skip default branch, this script assumes
    # you already checked-out that branch when cloned the repo
    if (-not ($_ -match " -> ")) {
        $localBranch = ($_ -replace "^.*?/", "")
        $remoteBranch = $_.Trim()
        git branch --track "$localBranch" "$remoteBranch"
    }
}
git fetch --all
git pull --all

මෙය නාමයෙන් / සහිත ශාඛා සමඟ ක්‍රියා කරයි: git branch -r | ForEach-Object { # Skip default branch, this script assumes # you already checked-out that branch when cloned the repo if (-not ($_ -match " -> ")) { $localBranch = ($_ -replace "^.*?/", "") $remoteBranch = $_.Trim() git branch --track "$localBranch" "$remoteBranch" } }
මාකස්

4

අන්වර්ථය සකසන්න: (ඉහළ පිළිතුර මත පදනම්ව)

git config --global alias.track-all-branches '!git fetch --all && for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done && git fetch --all'

දැන් සියලුම ශාඛා නිරීක්ෂණය කිරීමට:

git track-all-branches


3

මෙන්න මම ශක්තිමත් ලෙස සලකන දෙයක්:

  • පවතින ශාඛා සඳහා දුරස්ථ ලුහුබැඳීම් යාවත්කාලීන නොකරයි
  • HEADලුහුබැඳීමට යාවත්කාලීන කිරීමට උත්සාහ නොකරයිorigin/HEAD
  • හැර වෙනත් දුරස්ථ දුරස්ථයන්ට ඉඩ දෙන්න origin
  • නිසි ලෙස ෂෙල් උපුටා දක්වා ඇත
for b in $(git branch -r --format='%(refname:short)'); do
  [[ "${b#*/}" = HEAD ]] && continue
  git show-ref -q --heads "${b#*/}" || git branch --track "${b#*/}" "$b";
done
git pull --all

මෙම විකල්පය අභ්‍යන්තරයට git fetch --allයැවීම -allසඳහා git pullගමන් කිරීම අවශ්‍ය නොවේ fetch.

මෙම පිළිතුරට ගෞරවය .


2

පිළිගත් පිළිතුරෙන් සපයා ඇති එක්-ලයිනර්හි පර්ල් අනුවාදය මෙන්න:

git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print "git branch --track $local $remote\n";}' > some-output-file

ඔබට අවශ්‍ය නම් ප්‍රතිදාන ගොනුව ෂෙල් පිටපතක් ලෙස ධාවනය කළ හැකිය.

අපි අපගේ ස්ටෑෂ් ව්‍යාපෘති ගබඩාව අහම්බෙන් මකා දැමුවෙමු. වාසනාවකට මෙන් යමෙකු හදිසි අනතුරකට පෙර දෙබලක නිර්මාණය කර ඇත. මම දෙබල මගේ ක්ලෝනයට ක්ලෝන කළා (මම එය කළ ආකාරය පිළිබඳ විස්තර මඟ හරිනු ඇත). මගේ දෙබලක මුළුමනින්ම දෙබලක තිබූ පසු, මම එක ලයිනර් එකක් ධාවනය කළෙමි. අප විසින් යථා තත්ත්වයට පත් කරමින් සිටි ඉලක්ක ගබඩාවට යොමු කිරීම සඳහා මම දුරස්ථයේ URL (මගේ නඩුවේ ආරම්භය) වෙනස් කළෙමි:

git remote set-url origin <remote-url>

අවසානයේදී සියලු ශාඛා එලෙසම ආරම්භයට තල්ලු විය:

git push --all origin

අපි ආපහු ව්‍යාපාර කටයුතුවල යෙදුණා.


1

අපට සියළුම ශාඛා හෝ ටැග් නම් තාවකාලික ගොනුවක තැබිය හැකිය, ඉන්පසු එක් එක් නම / ටැගය සඳහා git pull කරන්න:

git branch -r | grep origin | grep -v HEAD| awk -F/ '{print $NF}' > /tmp/all.txt
git tag -l >> /tmp/all.txt
for tag_or_branch in `cat /tmp/all.txt`; do git checkout $tag_or_branch; git pull origin $tag_or_branch; done

1

ඔබට ගැටළු තිබේ fetch --allනම් ඔබේ දුරස්ථ ශාඛාව නිරීක්ෂණය කරන්න:

git checkout --track origin/%branchname%

1

දෝෂ පණිවිඩය මඟ හැරීම සඳහා 'මාරාන්තික:' සම්භවය / ස්වාමියා 'නම් ශාඛාවක් දැනටමත් පවතී.' , ඔබට මගේ විසඳුම උත්සාහ කළ හැකිය:

git branch -r | grep -v '\->'  | grep -v `git branch | awk '/\*/ { print $2; }'`| while read remote; do git branch --track "${remote#origin/}" "$remote"; done

0

Learath2 මගින් පිළිතුර මත පදනම්ව, මෙහි මම කරන්නේ පසු කළේ මොකක්ද git clone [...]හා cdනිර්මානය බහලුම තුලට -ing:

git branch -r | grep -v master | awk {print\$1} | sed 's/^origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b

මා වෙනුවෙන් වැඩ කළ නමුත් එය ඔබට වැඩ කරනු ඇතැයි මට දැනගත නොහැක. පරෙස්සම් වෙන්න.


0
git remote add origin https://yourBitbucketLink

git fetch origin

git checkout -b yourNewLocalBranchName origin/requiredRemoteBranch (use tab :D)

දැන් දේශීයව ඔබේ yourNewLocalBranchNamerequiredRemoteBranch.


0

දෘශ්‍ය ස්ටුඩියෝ පරිශීලකයින් සඳහා, පැකේජ කළමනාකරු කොන්සෝලය මත:

git ශාඛාව | % {git ඉහළට ගෙන එයි; git ඒකාබද්ධ කරන්න උඩු මහල / මාස්ටර්}


0

බොහෝ ක්‍රම අත්හදා බලා ඇත, මෙය පමණක් සරල වන අතර මට වැඩ කරයි.

for branch in $(git ls-remote -h git@<your_repository>.git | awk '{print $2}' | sed 's:refs/heads/::')
do
  git checkout "$branch"
  git pull
done
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.