Git හි ඇති සියලුම දුරස්ථ ශාඛා ක්ලෝන කරන්නේ කෙසේද?


4131

මට masterසහ developmentශාඛාවක් ඇත, දෙකම GitHub වෙත තල්ලු කර ඇත . මම cloneඩී, pullඑඩ් සහ fetchඑඩ්, නමුත් masterශාඛාව හැර වෙනත් කිසිවක් ලබා ගැනීමට මට නොහැකි වී ඇත.

මට පැහැදිලිව පෙනෙන දෙයක් නැති වී ඇති බව මට විශ්වාසයි, නමුත් මම අත්පොත කියවා ඇත්තෙමි.


135
මෙහි පිළිගත් පිළිතුර ( git branch -a) මඟින් දුරස්ථයේ ඇති ශාඛා ඔබට පෙන්වයි, නමුත් ඔබ ඒවායින් කිසිවක් පරීක්ෂා කිරීමට උත්සාහ කළහොත් ඔබ සිටින්නේ 'වෙන්වූ හෙඩ්' තත්වයක ය. ඊළඟ පිළිතුර පහළට (දෙවන වැඩි දියුණු කිරීම්) වෙනස් ප්‍රශ්නයකට පිළිතුරු සපයයි (බුද්ධියට: සියලු ශාඛා අදින්නේ කෙසේද, නැවතත්, මෙය ක්‍රියාත්මක වන්නේ ඔබ දේශීයව ලුහුබඳින අයට පමණි). අදහස් කිහිපයක්ම පෙන්වා දෙන්නේ ඔබට git branch -aදුරස්ථ ශාඛා දේශීයව නිරීක්ෂණය කළ හැකි ෂෙල් ස්ක්‍රිප්ට් එකකින් ප්‍රති results ල විග්‍රහ කළ හැකි බවයි. සාරාංශය: ඔබට අවශ්‍ය දේ කිරීමට දේශීය ක්‍රමයක් නොමැත. කෙසේ වෙතත් එය එතරම් හොඳ අදහසක් නොවනු ඇත.
ඩේ ඩේවිස් වෝටර්බරි

5
සමහර විට සම්පූර්ණ ෆෝල්ඩරයම පැරණි ක්‍රමයට පිටපත් කළ හැකිද? scp some_user@example.com:/home/some_user/project_folder ~
ගිතුබ්

19
"මම ක්ලෝන කර, ඇදගෙන, ලබා ගත්තෙමි" යැයි පවසනවා වෙනුවට, ඔබ ක්‍රියාත්මක කළ නිශ්චිත විධානයන් අපට පෙන්වීමට වඩා හොඳය .
බොබ් ගිල්මෝර්

57
"ක්ලෝන" නිශ්චිත පිටපතක අර්ථයෙන් නොපවතින්නේ මන්දැයි එය සෑම විටම මට කරදර කරයි. එය නිශ්චිත ක්ලෝනයක් නම්, සියලුම ශාඛා දේශීය ගබඩාවේ කොටසක් නොවිය යුතුද? මම අදහස් කළේ එය බෙදා හැරීමේ එක් කරුණක් නොවේද? එබැවින් කිසියම් ගබඩාවක් නැති වූ විට ඔබට තවමත් සියල්ලේ සම්පූර්ණ පිටපතක් තිබේ. එසේත් නැතිනම් ඊනියා "දුරස්ථ" ඇත්ත වශයෙන්ම දැනටමත් දේශීය ගබඩාවේ කොටසක්ද?
හග්ලි

21
සියලු උඩු යටිකුරු කිරීම්, පිළිතුරු, පිළිතුරු පිළිබඳ අදහස් සහ මනස අවුල් කරවන අදහස් ගණන දැකීමෙන්, මෙය සිදු කිරීම සඳහා විධානයක් එකතු කිරීමට කාලය පැමිණ ඇතැයි මම සිතමි. හරි ඔයා ugghuggie, මගේ සිතුවිලි හරියටම.
Sнаđошƒаӽ

Answers:


4559

පළමුව, දුරස්ථ Git ගබඩාවක් ක්ලෝන කර එයට සීඩී කරන්න :

$ git clone git://example.com/myproject
$ cd myproject

ඊළඟට, ඔබේ ගබඩාවේ ඇති දේශීය ශාඛා දෙස බලන්න:

$ git branch
* master

නමුත් ඔබේ ගබඩාවේ වෙනත් ශාඛා සැඟවී තිබේ! -aධජය භාවිතා කර ඔබට මේවා දැකිය හැකිය :

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

ඔබට උඩු මහලේ ශාඛාවක් දෙස ඉක්මණින් බැලීමට අවශ්‍ය නම්, ඔබට එය කෙලින්ම පරීක්ෂා කළ හැකිය:

$ git checkout origin/experimental

නමුත් ඔබට එම ශාඛාවේ වැඩ කිරීමට අවශ්‍ය නම්, ඔබ විසින් ස්වයංක්‍රීයව සිදුකරන දේශීය ෙසොයා ගැනීෙම් ශාඛාවක් සෑදිය යුතුය:

$ git checkout experimental

එවිට ඔබට පෙනෙනු ඇත

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

එම අන්තිම පේළිය සමහර පුද්ගලයින් විසි කරයි: "නව ශාඛාව" - හාහ්? එහි ඇත්ත වශයෙන්ම අදහස් වන්නේ ශාඛාව දර්ශකයෙන් ලබා ගෙන ඔබ වෙනුවෙන් දේශීයව නිර්මාණය කිරීමයි. මෙම පෙර එය ශාඛා සාමාන්යයෙන් සම්භවය / branch_name ශාඛා, ඉන් අදහස් වන්නේ, දුරස්ථ ශාඛා නිරීක්ෂණය කිරීමට පිහිටුවන බව ඔබ පවසනවා ලෙස මාර්ගය ඇත්තටම වැඩි තොරතුරු වේ

දැන්, ඔබ ඔබේ දේශීය ශාඛා දෙස බැලුවහොත්, ඔබ දකින්නේ මෙයයි:

$ git branch
* experimental
  master

ඔබට ඇත්ත වශයෙන්ම දුරස්ථ නිධිය එකකට වඩා භාවිතා කළ හැකිය git remote.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

මෙම අවස්ථාවෙහිදී, දේවල් පිස්සු වැටෙමින් පවතී, එබැවින් gitkසිදුවන්නේ කුමක්දැයි බැලීමට දුවන්න:

$ gitk --all &

119
යමෙකු දුරස්ථ ශාඛා ස්වයංක්‍රීයව නිර්මාණය කරන්නේ කෙසේද, උදා.
ක්‍රිස්ටියන් කියුපිටු

54
ක්‍රිස්ටියන්: මම සෑම ශාඛාවක් සඳහාම 'foo' ශාඛාවක් නිර්මාණය කිරීමට පුරුදුව සිටියෙමි, නමුත් මෙය ගැටළු දෙකකට තුඩු දුන්නේය: (1) අනුරූපී දුරස්ථ ශාඛාව පිටුපස බොහෝ කැපවීම් ඇති, සැබවින්ම පරණ ලුහුබැඳීමේ ශාඛා රාශියක් මා විසින් ඇති කරන ලදී. , සහ (2) පැරණි අනුවාද වල, 'git push' ධාවනය කිරීමෙන් මගේ සියලුම ශාඛා දුරස්ථ ස්ථානයකට තල්ලු කිරීමට උත්සාහ කරනු ඇත. එබැවින් දැන් මම දේශීය ශාඛා සක්‍රියව සංවර්ධනය කරන දේවල් සඳහා පමණක් තබාගෙන ඒවා පිළිබඳ තොරතුරු අවශ්‍ය නම් සම්භවය / * ශාඛා වෙත කෙලින්ම පිවිසෙන්න. (එයින්
කියැවෙන්නේ

49
"git fetch <origin-name> <branch-name>" ඔබ වෙනුවෙන් ශාඛාව දේශීයව පහළට ගෙන එයි.

139
හොඳ පිළිතුරක් ඇත, නමුත් ප්‍රශ්නය මග හැරී ඇත. සියලුම දුරස්ථ ශාඛා පරීක්ෂා කර බැලීමට මම එක් ලයිනර් යන්ත්‍රයක් සොයමින් සිටියෙමි.
cmcginty

32
ප්‍රශ්නය වූයේ සියලුම දුරස්ථ ශාඛා ක්ලෝන කිරීම මිස ඒවා පරීක්ෂා නොකිරීම ය. තවද, මා ඉහත සඳහන් කළ පරිදි, ඔබට අවශ්‍ය ප්‍රමාණයට වඩා දේශීය ලුහුබැඳීම් ශාඛා සෑදීමට ඔබට අවශ්‍ය නැත, මන්ද ඒවා සැබවින්ම පරණ වූ විට ඒවා හිසරදයට හේතු විය හැක.
emk

824

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

$ git pull --all

දැන් ඔබට දුරස්ථ ගබඩාවට පහර නොදී ඔබට අවශ්‍ය පරිදි ඕනෑම ශාඛාවක් පරීක්ෂා කළ හැකිය.


12
මම git clone කරන්නේ නම්, මා සතුව ප්‍රධාන ශාඛාව දේශීයව සහ ශාඛා 10 ක් "දුරස්ථ" වේ. එබැවින් ගේබ්ගේ මෙම පිළිතුර ඉතා ප්‍රයෝජනවත් වූ අතර ප්‍රශ්නයට පිළිතුරු සපයයි.
basZero

38
මෙම පමණක් එක්කෝ කොබැඳි නැත්නම් ස්ථානීකව නොපවතියි නැති බවද ඔහු පැවසීය කර ඇති බව දුරස්ථ ශාඛා බෝගයන්ගේ ඕනෑම දුරස්ථ ශාඛා
jujule

33
පළමු විධානය අතිරික්ත වේ. සරලවම git pull --allඑයම කරනු ඇත - එය දෙවරක් ලබා නොගනී. Infosec812 හරි, මෙය කෙසේ හෝ ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත. මම කල්පනා කරනවා මේක කොහොමද ඉහළ නැංවූයේ කියලා.
ස්වෙන් මාර්නාච්

6
මම කළ පසු git remote update, උත්සාහ කළ පසු git branch, මට පෙනෙන්නේ දේශීය ශාඛා පමණි. නමුත් මා එසේ කළහොත් මට git branch -aදැන් දුරස්ථ ශාඛා දැක git pull <branchname>ගත හැකි අතර මට අවශ්‍ය ශාඛාව ලබා ගැනීමට මට හැකිය . - මම ගූගල් සෙවුමකින් මෙම ප්‍රශ්නයට ගොඩ වූ අතර මෙම පිළිතුර මගේ ගැටලුව විසඳයි.
ඩබ්ලිව්.එන්. රොසෙන්බර්ග්

38
මෙය කිසිසේත්ම ප්‍රයෝජනවත් නොවේ, පවතින ඒවා හැර වෙනත් දුරස්ථ ශාඛා අදින්නේ නැත.
අවිනාශ් ආර්

446

මෙම බෑෂ් පිටපත මට උදව් විය:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

එය මාස්ටර් හැර සියලුම දුරස්ථ ශාඛා සඳහා ලුහුබැඳීමේ ශාඛා නිර්මාණය කරනු ඇත (ඔබ බොහෝ විට මුල් ක්ලෝන විධානයෙන් ලබා ගත්). මම හිතන්නේ ඔබට තවමත් එය කිරීමට අවශ්‍ය වනු ඇත

git fetch --all
git pull --all

නිසැකවම.

එක් ලයිනර් : git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
සුපුරුදු පරිදි: අප දන්නා පරිදි rm -rf විශ්වය පිටපත් කිරීමට පෙර ඔබේ සැකසුම පරීක්ෂා කරන්න

එක් ලයිනර් සඳහා බැර පරිශීලක cfi වෙත යන්න


19
මෙය පරිපූර්ණ විසඳුමක් වීමට සැබවින්ම සමීප වේ .. වඩා හොඳ වනු ඇති එකම දෙය නම් මෙම ක්‍රියාකාරිත්වය git හි විකල්පයක් ලෙස ගොඩනගා ඇත්නම් පමණි.
ඩෙවන් ෆිලිප්ස්

51
"එක් ලයිනර්": git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs සුපුරුදු පරිදි: පිටපත් කිරීමට පෙර ඔබේ සැකසුම පරීක්ෂා කරන්නrm -rf universe as we know it
cfi

4
මෙම විධානය දුරස්ථ සිට සාමාන්‍ය ශාඛා ලෙස විශේෂාංග ශාඛා නිර්මාණය කරයි (විශේෂාංග ශාඛා නොවේ) - මෙය නිවැරදි කරන්නේ කෙසේද?
Alex2php

4
ඔබ ශාඛා නාමවල "/" සමඟ ගැටලු ඇති වුවහොත් පහත විසඳුමක් git අන්වර්ථයක් භාවිතා කරයි. "කිසිවෙකු" විසින් "පිළිතුර මැයි 15 '13 ට 11:02 ට බලන්න"
wemu

8
මම නම් remotes/origin/කර ඇත්තේ නාම අවකාශයන් ආරක්ෂා කර ගැනීම සඳහා ය:for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
kgadek

349

--mirrorවිකල්පය භාවිතා කිරීමෙන් remoteලුහුබැඳීමේ ශාඛා නිසි ලෙස පිටපත් කරන බව පෙනේ . කෙසේ වෙතත්, එය නිධිය හිස් ගබඩාවක් ලෙස සකසයි, එබැවින් ඔබ එය පසුව සාමාන්‍ය ගබඩාවක් බවට පත් කළ යුතුය.

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

යොමුව: Git නිතර අසන පැන: දුරස්ථව නිරීක්ෂණය කරන ලද සියලුම ශාඛා සහිත ගබඩාවක් ක්ලෝන කරන්නේ කෙසේද?


7
ඔබ දන්නවා මෙය ඇත්ත වශයෙන්ම ඡන්දයක් නොතිබුණද එය හොඳ පිළිතුරක් බව. එය එසේ කිරීමට යම් අන්තරායන් තිබේද? එම විධානයන් ක්‍රියාත්මක කිරීමෙන් පසු මට ශාඛාවක් පැහැදිලිව පරීක්ෂා කිරීමට සිදු විය.
ලූප්

27
මෙය git push --mirror සමඟ සංයෝජනය වී ඇති අතර github.com සිට github ව්‍යවසාය ස්ථාපනයකට මාරු වන විට දුරස්ථ git repo එකක නිශ්චිත අනුපිටපතක් නිර්මාණය කිරීමට මට අවශ්‍ය විය. ස්තූතියි!
ජේකබ් ෆයික්

3
Ave ඩේව්: ක්ලෝන කරන ලද රෙපෝ git checkoutහි වත්මන් ශාඛාවේ ප්‍රධානියා පරීක්ෂා කර බැලීමට අවසාන විධානය ලෙස අවසන් එකතු කරන්න . මෙය හොඳ පිළිතුරකි. නිර්භීත වන්න, අවසානයේදී අපි ඔබව ඉහළට ගෙන
යන්නෙමු

3
Ave ඩේව්: හ්ම්. මට දෙවන සිතුවිලි ඇත: - මිරර් විසින් සියලුම ශාඛා ලුහුබැඳ යන ලෙස සැකසීමට වඩා වැඩි යමක් කරයි. එය මූලාරම්භයේ සිට සියලු යොමු පිටපත් කරන අතර පසුව git remote updateඑය නැවත කරනු ඇත. අදින්නන්ගේ හැසිරීම වෙනස් වේ. සම්පූර්ණ පිටපතට එක් පේළියේ පිටපතක් අවශ්‍ය යැයි මම නැවත විශ්වාස කරමි.
cfi

5
git clone --mirrorඔබගේ git ගබඩාවල උපස්ථ කිරීම සඳහා ඉතා හොඳයි ^ _ ^
TrinitronX

220

විසිතුරු "git checkout -b somebranch origin / somebranch" සින්ටැක්ස් භාවිතා නොකර ඔබට පහසුවෙන් ශාඛාවකට මාරු විය හැකිය. ඔබට කළ හැක්කේ:

git checkout somebranch

Git ස්වයංක්‍රීයව නිවැරදි දේ කරයි:

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

එකම නමක් ඇති ශාඛාවක් හරියටම එක් දුරස්ථයක තිබේද යන්න Git විසින් පරීක්ෂා කරනු ඇති අතර, එය එසේ වන්නේ නම්, එය දුරස්ථ ශාඛාවක් බව ඔබ පැහැදිලිව දක්වා ඇති ආකාරයටම එය නිරීක්ෂණය කරයි. Git 1.8.2.1 හි git-checkout man පිටුවෙන්:

<branch> සොයාගත නොහැකි නමුත් ගැලපෙන නමක් සහිත හරියටම එක් දුරස්ථයක (එය <remote> අමතන්න) ලුහුබැඳීමේ ශාඛාවක් තිබේ නම්, ඊට සමාන ලෙස සලකන්න

$ git checkout -b <branch> --track <remote>/<branch>

1
එබැවින්, ශාඛාවේ නම ඔබ checkoutදුරස්ථ ශාඛාවේ නමට සමාන නම්, "/" ට පසුව ඇති සෑම දෙයක්ම, එවිට git එකම නමකින් යුත් ශාඛාවක් නිර්මාණය කරයි, "/", "ලුහුබැඳීමෙන්" පසුව එම දුරස්ථය ? සහ ෙසොයා ගැනීෙම් විසින්, අපි අදහස්: git push, git pull, ආදිය දුරස්ථ මත සිදු වනු ඇත? මෙය නිවැරදි නම්, වැඩි විස්තර සහිතව ඔබේ පිළිතුර පුළුල් කරන්න, මම an ඩැනියෙල් සමඟ එකඟ වන නිසා, මෙම පිළිතුරට වැඩි ප්‍රතිචාරයක් ලැබිය යුතුය.
ජෙරාඩ් රොචේ

5
UllBullfrogBlues, ඔබගේ සියලු ප්‍රශ්න වලට පිළිතුර ඔව් යැයි පෙනේ (මම git v1.7.7.4 භාවිතා කරමි). මෙම හැසිරීම වඩාත් හොඳින් දැන සිටිය යුතු බවට මම එකඟ වෙමි. (මෙම git අනුවාදය සඳහා එය අත්පොතේ නොමැත.) මම ඇත්ත වශයෙන්ම මෙම හැසිරීමට කැමති නැත, මම දෝෂයක් ලබාගෙන git checkout --track origin/somebranchපැහැදිලිවම පැවසිය යුතුය.
dubiousjim

3
@dubiousjim: ඇත්තටම මෙය අත්පොතෙහි ඇත. git-checkout (1) මෙසේ කියයි: “<branch> සොයාගත නොහැකි නමුත් ගැලපෙන නමක් සහිත හරියටම එක් දුරස්ථයක (එය <remote> අමතන්න) ලුහුබැඳීමේ ශාඛාවක් තිබේ නම්, එය 'git checkout -b <branch' ට සමාන ලෙස සලකන්න. > --track <remote> / <branch> '"(Git V.1.8.1.1).
sleske

අපට අවශ්‍ය වන්නේ $ git pull * <remote> / * - එහිදී "*" ආදේශක කාඩ්පතක් වන අතර එමඟින් එය තවමත් දේශීය පද්ධතියේ නොමැති සියලුම ශාඛා ඇද ගනී. මෙය කරන්නේ කෙසේද? අපගේ ප්‍රාදේශීය පද්ධතියට කේතය ඇද ගැනීම සඳහා අපි සෑම ශාඛාවක්ම ඉවත් කර අදින්නද?
ජෝසප්

98

සම්බන්ධයෙන්,

check git checkout -b පර්යේෂණාත්මක සම්භවය / පර්යේෂණාත්මක

භාවිතා කිරීම

$ git checkout -t origin/experimental

හෝ වඩා වාචික නමුත් මතක තබා ගැනීමට පහසුය

$ git checkout --track origin/experimental

දුරස්ථ ගබඩාවක් නිරීක්ෂණය කිරීමේදී වඩා හොඳ විය හැකිය.


ඉතින් ඔබ අදහස් කරන්නේ දෙවන පෝරමය මතක තබා ගැනීම පහසු වන අතර වෙනත් වෙනසක් නැතිද?
aderchox

79

ඔබ කරමින් සිටින දුරස්ථ ශාඛා සියල්ලම ලබා ගත යුතුය, නමුත් එය ඔවුන් සඳහා දේශීය ශාඛා නිර්මාණය නොකරයි. ඔබ gitk භාවිතා කරන්නේ නම්, දුරස්ථ ශාඛා "දුරස්ථ / සම්භවය / dev" හෝ ඊට සමාන දෙයක් ලෙස විස්තර කළ යුතුය.

දුරස්ථ ශාඛාවක් මත පදනම්ව දේශීය ශාඛාවක් නිර්මාණය කිරීම සඳහා, මෙවැනි දෙයක් කරන්න:

git checkout -b dev refs / දුරස්ථ / සම්භවය / dev

කුමන දෙයක් ආපසු ලබා දිය යුතුද:

දුරස්ථ ශාඛා refs / දුරස්ථ / සම්භවය / dev නිරීක්ෂණය කිරීම සඳහා පිහිටුවා ඇති ශාඛාව dev.
නව ශාඛාවකට "dev" වෙත මාරු විය

දැන්, ඔබ dev ශාඛාවේ සිටින විට, "git pull" මඟින් ඔබේ දේශීය dev දුරස්ථ dev ශාඛාව හා සමාන ස්ථානයකට යාවත්කාලීන කරනු ඇත. එය සියලු අතු ලබා ගන්නා බව සලකන්න, නමුත් ඔබ ගස මුදුනට අදින්න.


14
ඔබට මෙහි refs / දුරස්ථ අවශ්‍ය නොවේ. git checkout -b dev origin / dev හොඳින් ක්‍රියා කරයි.
emk

3
මෙය සැමවිටම ක්‍රියාත්මක වනු ඇත : git checkout -b newlocaldev --track origin/dev. ඔබට අවශ්‍ය නම් ප්‍රාදේශීය ශාඛාවට දුරස්ථ නමට සමාන නමක් ඇති අතර දුරස්ථයට ව්‍යාකූල නමක් නොමැති නම්, ඔබට එය මඟ හැරිය හැක -b newlocaldev. පෙරනිමි branch.autosetupmergeවින්‍යාස සැකසුම සමඟ, සහ ඔබට ප්‍රාදේශීය ශාඛාවක් නොමැති බව උපකල්පනය කිරීමෙන් dev, මෙම විධානයන් දෙකම එකම දේ කළ හැකිය: git checkout -b dev origin/devසරල ය git checkout dev. අවසාන වශයෙන්, git checkout origin/devනව ශාඛාවක් සාදන්නේ නැත, නමුත් ඔබව වෙන් කළ හෙඩ් තත්වයට පත් කරයි.
dubiousjim

දුරස්ථය තවදුරටත් නොපවතින නමුත් Git එය මකා දැමූ බව පිළිගැනීමට තරම් මෝඩ බැවින් කුමක් සිදුවේද? මෙය ඔබ යාවත්කාලීන git branch -aකර ඇති අතර එය දුරස්ථ ශාඛාවක් ලෙස ලැයිස්තුගත කරයි.
jww

අපි මෙය කරන්නේ ශාඛා දුසිම් ගණනක් සඳහාද?
ජෝසප්

59

ඔබ "git clone git: // location" කරන විට, සියලුම ශාඛා සහ ටැග් ලබා ගනී.

නිශ්චිත දුරස්ථ ශාඛාවක් මත වැඩ කිරීම සඳහා, එය මූලාරම්භක දුරස්ථ යැයි උපකල්පනය කරමින්:

git checkout -b branch origin/branchname

2
"සියලු ශාඛා සහ ටැග් ලබාගෙන ඇත" යන ඔබේ සටහන මම අගය කරමි. මම ඔබේ පිළිතුර වැරදියි කියා අදහස් දැක්වීමට ගිය නමුත් පසුව මම එය පරීක්ෂා කර බැලුවෙමි, ඔබ හරියටම හරි. එබැවින් එක්තරා ආකාරයකින්, ඔබ කෙටිම පිළිතුර ලබා දී ඇත - ඔබ ක්ලෝන කර ඇත්නම්, ඔබට දැනටමත් එය තිබේ. හොඳයි. එක් කිරීමට කෙනෙකුට උත්සාහ කළ හැකිය: $ git branch -aඉගෙනීමට උත්සාහ කරන්න , දැනටමත් පවතින දුරස්ථ ශාඛා මොනවාද.
Jan Vlcinsky

මා පළ කළ පිළිතුර දෙස බලන්න. ඔබට දුරස්ථ ශාඛා බොහොමයක දේශීයව වැඩ කිරීමට අවශ්‍ය බවත් ඒවා එකින් එක පරීක්ෂා කර බැලිය යුතු නැති බවත් ඔබ දන්නේ නම් මෙය ප්‍රයෝජනවත් වේ.
lacostenycoder

ඔබ මට පැහැදිලි අතර වෙනස මොකක්ද හැකි git checkout -b master origin/masterසහ git checkout --track origin/masterකරුණාකරලා?
aderchox

1
@aderchox මේ දවස්වල මම හිතන්නේ නැහැ.
එල්මාර්කෝ

58

අන්වර්ථ නාම භාවිතා කරන්න. කිසිදු දේශීය Git එක්-ලයිනර් නොමැති වුවද, ඔබට ඔබේම ලෙස අර්ථ දැක්විය හැකිය

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

ඉන්පසු එය භාවිතා කරන්න

git clone-branches

ස්තූතියි. මෙය අනෙක් සියලුම පිළිතුරු මෙන් නොව සියලුම දුරස්ථ ශාඛා ක්ලෝන කරයි
FearlessHyena

50

ඔබ "ස්වාමියා" පමණක් දකින්නේ ඇයි

git cloneඔබගේ නව ගබඩාවේ ලිපිගොනු පිහිටා තිබුණද, දුරස්ථ ශාඛා සියල්ලම බාගත කරන නමුත් ඒවා "දුරස්ථ" ලෙස සලකයි. මෙයට එක් ව්‍යතිරේකයක් ඇත, එනම් ක්ලෝනකරණ ක්‍රියාවලිය දුරස්ථ ශාඛාවෙන් “මාස්ටර්” නම් දේශීය ශාඛාවක් නිර්මාණය කරයි. පෙරනිමියෙන්, git branchදේශීය ශාඛා පමණක් පෙන්වයි, එබැවින් ඔබ දකින්නේ "ස්වාමියා" පමණි.

git branch -aදුරස්ථ ශාඛා ඇතුළුව සියලුම ශාඛා පෙන්වයි .


දේශීය ශාඛා ලබා ගන්නේ කෙසේද

ඔබට ඇත්ත වශයෙන්ම ශාඛාවක වැඩ කිරීමට අවශ්‍ය නම්, ඔබට බොහෝ විට එහි “දේශීය” අනුවාදයක් අවශ්‍ය වනු ඇත. දුරස්ථ ශාඛා වලින් දේශීය ශාඛා නිර්මාණය කිරීම සඳහා (ඒවා පරීක්ෂා කර බලා ඔබේ වැඩ කරන නාමාවලියෙහි අන්තර්ගතය වෙනස් නොකර) , ඔබට මේ ආකාරයට කළ හැකිය:

git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree

මෙම උදාහරණයේ දී, branchoneඔබ නිර්මාණය කරන දේශීය ශාඛාවක නම වේorigin/branchone ; ඔබට ඒ වෙනුවට විවිධ නම් සහිත දේශීය ශාඛා සෑදීමට අවශ්‍ය නම්, ඔබට මෙය කළ හැකිය:

git branch localbranchname origin/branchone

ඔබ දේශීය ශාඛාවක් නිර්මාණය කළ පසු, ඔබට එය දැක ගත හැකිය git branch(මතක තබා ගන්න, ඔබට -aදේශීය ශාඛා දැකීමට අවශ්‍ය නැත ).


origin/branchoneපවතින්නේ නම් , ඔබට git checkout branchoneඑකම නමකින් දේශීය ශාඛාවක් නිර්මාණය කර දුරස්ථව නිරීක්ෂණය කිරීමට එය භාවිතා කළ හැකිය .
ඊවාන්

47

මෙය එතරම් සංකීර්ණ නොවේ, ඉතා සරල හා forward ජු ඉදිරි පියවර පහත පරිදි වේ;

git fetch origin මෙය සියලුම දුරස්ථ ශාඛා ඔබේ ප්‍රදේශයට ගෙන එනු ඇත.

git branch -a මෙය ඔබට සියලුම දුරස්ථ ශාඛා පෙන්වනු ඇත.

git checkout --track origin/<branch you want to checkout>

පහත දැක්වෙන විධානය මඟින් ඔබ අපේක්ෂිත ශාඛාවේ සිටී දැයි තහවුරු කරගන්න;

git branch

ප්‍රතිදානය මෙයට කැමති වනු ඇත;

*your current branch 
some branch2
some branch3 

වත්මන් ශාඛාව දැක්වෙන * ලකුණ සැලකිල්ලට ගන්න.


1
ස්තූතියි සුරාජ්. එයට හේතුව එය එතරම් ඡන්දය නොදීමයි. තවද පිළිතුරු අසන්නා ප්‍රශ්නකරු විසින් පිළිගනු නොලැබේ.
සෑම්

"Git fetch සම්භවය" දුරස්ථ ශාඛා කිසිවක් මගේ ප්‍රදේශයට ගෙනාවේ නැත - නැතහොත් ඒවා කොහේ හෝ සඟවා තිබේද? ඉහත සියලු පිළිතුරු කියවීම මට හිසරදයක් විය. අපි සොයන්නේ "සියලු ශාඛා දේශීයව ලබා ගන්න". මෙය සිදු කිරීම සඳහා bash-scripts හැර වෙනත් ක්‍රමයක් තිබිය යුතුය.
ජෝශප් කේ

1
ඔබ "git fetch origin" ක්‍රියාත්මක කළ පසු, එය ඔබේ පර්යන්තයේ මෙවැනි ප්‍රතිදානය පෙන්වනු ඇත - "* [නව ශාඛාව] branch_name -> origin / branch_name", නමුත් ඔබ "git branch" ධාවනය කරන විට එය පෙන්වන්නේ ඔබේ දේශීය පමණි ශාඛා ඒ වෙනුවට, ඔබට කළ හැකි සියලුම ශාඛා බැලීමට “git branch -a” සහ දුරස්ථ ශාඛාවට මාරුවීමට ඔබට “git checkout --track origin / <check out to out out>” ධාවනය කළ යුතුය. මෙය උපකාරී වේ යැයි සිතමි. :-)
සෑම්

4
සුරාජ්, ප්‍රශ්නය වූයේ “සියලු දුරස්ථ ශාඛා ක්ලෝන කරන්නේ කෙසේද” - වරකට එකක් අතින් යාවත්කාලීන කරන්නේ කෙසේද යන්න නොවේ. සත්‍ය ප්‍රශ්නයට පිළිතුරක් නොමැති බව පෙනේ - ඔබට ශාඛා විශාල ප්‍රමාණයක් තිබේ නම් සම්පූර්ණ යතුරු ලියනය කිරීමේ ක්‍රම.
ජෝසප්

47

වෙන කවරදාටත් වඩා ප්‍රමාදයි, නමුත් මෙය කිරීමට හොඳම ක්‍රමය මෙන්න:

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

මෙම අවස්ථාවෙහිදී, දුරස්ථ repo හි සියලුම ශාඛා සමඟ සම්පූර්ණ පිටපතක් ඔබ සතුව ඇත (සත්‍යාපනය කරන්න git branch). ඔබේ දුරස්ථ ගබඩාවට තමන්ගේම දුරස්ථ තිබේ නම් --mirrorඒ වෙනුවට ඔබට භාවිතා කළ හැකිය --bare.


මෙහි සංස්කරණ අතරතුර යමක් වැරදී ඇත. දැන් මෙම පිළිතුර තේරුමක් නැත. --bareඅවසාන වාක්‍යයේ සඳහන් " " ලබා දී ඇති විධාන ලැයිස්තුවේ නොමැත.
සෙරාන්

ඩේව්ගේ පිළිතුරෙන් පහතින්. 'Git config unset core.bare' වෙනුවට 'git config --bool core.bare false' භාවිතා කිරීම කාර්යය කරන බව පෙනේ.
ව්‍යාකූල වෝර්ලන්

මට තියෙනවා error: key does not contain a section: unset. මෙම ඩේව් ගේ පිළිතුර වඩා හොඳ වැඩ කරයි.
ඔලිබ්‍රේ

එය git config --unset core.bareඇත්ත වශයෙන්ම ... මට නම්, මෙහි පිළිතුරු වලින් ඉදිරිපත් කර ඇති සියල්ලන්ගේම පිරිසිදු විසඳුම මෙයයි. අනුකම්පාවකින් එය එතරම් ඉහළ මට්ටමක පවතී ...
ඩර්ක් හිල්බ්‍රෙෂ්ට්

1
ස්තූතියි h ක්‍රිස්සිම් මම එකඟයි git config --bool core.bare false. මේ නිසා මම ඒ වෙනුවට ඩේව්ගේ පිළිතුර නිර්දේශ කරමි . ඩේව්ගේ පිළිතුර ගැන ඔබ සිතන්නේ කුමක්ද? චියර්ස්
ඔලිබ්‍රේ

39

මෙය කරන්න:

$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
  master
$ git branch -a
* branchxyz
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branchxyz
  remotes/origin/branch123

'Git clone git: //example.com/myprojectt' සෑම දෙයක්ම ලබා ගනී, අතු පවා, ඔබ ඒවා පරීක්ෂා කර බැලිය යුතුය, එවිට ඔබේ ප්‍රාදේශීය ශාඛාව නිර්මාණය වනු ඇත.


25

ඔබට අවශ්‍ය වන්නේ සියලුම ශාඛා ලබා ගැනීම සඳහා "git clone" පමණි.

git clone <your_http_url>

ඔබ ප්‍රධාන ශාඛාව පමණක් දුටුවද, ඔබට සියලු ශාඛා බැලීමට "git branch -a" භාවිතා කළ හැකිය.

git branch -a

ඔබට දැනටමත් ඇති ඕනෑම ශාඛාවකට මාරු විය හැකිය.

git checkout <your_branch_name>

ඔබ "git clone" පසු, දුරස්ථ repo සමඟ සම්බන්ධ වීමට අවශ්‍ය නොවන බව කණගාටු නොවන්න, ඔබ ඔබේ wifi වසා දැමූ විට "git branch -a" සහ "git checkout" සාර්ථකව ක්‍රියාත්මක කළ හැකිය. එබැවින් ඔබ "git clone" කරන විට, එය දැනටමත් දුරස්ථ repo වෙතින් සියලුම ශාඛා පිටපත් කර ඇති බව සනාථ වේ. ඊට පසු, ඔබට දුරස්ථ repo අවශ්‍ය නොවේ, ඔබේ ප්‍රාදේශීයයට දැනටමත් සියලුම ශාඛා කේත ඇත.


මෙහි ඉතා පැහැදිලි ප්‍රතිචාරයක්. මෙම මාතෘකාව පිළිබඳව බොහෝ මිනිසුන් ව්‍යාකූල වී ඇත.
XMAN

ඔබේ ප්‍රකාශය දෙවනුව කිරීමට මම කැමතියි "ඔබ ඔබේ වයිෆයි වසා දැමූ විට සාර්ථකව ක්‍රියාත්මක කළ හැකිය". “Git clone” සැබවින්ම සියලු ශාඛා අඩංගු repo එකකට හේතු වේ.
bvgheluwe

විශිෂ්ට පැහැදිලි සරල පිළිතුරක්.
අම්ර්

24

A git cloneමුළු ගබඩාවම පිටපත් කළ යුතුය. එය ක්ලෝන කිරීමට උත්සාහ කරන්න, පසුව ධාවනය කරන්න git branch -a. එය සියලුම ශාඛා ලැයිස්තුගත කළ යුතුය. එසේ නම් ඔබට "මාස්ටර්" වෙනුවට "foo" ශාඛාවට මාරු වීමට අවශ්‍ය නම් භාවිතා කරන්න git checkout foo.


1
ඔබට යටි ඉර සමඟ හෝ නැතිව git විධාන ක්‍රියාත්මක කළ හැකිය. "Git-branch" සහ "git branch" යන දෙකම ක්‍රියාත්මක වේ.
පීටර් බූටන්

21
බොහෝ විට මෙම පිළිතුර බොහෝ කලකට පෙර ලබා දී ඇත්තේ වෙනස් ආකාරයකින් ක්‍රියා කරන විට විය හැකි නමුත් මම සිතන්නේ එය අද නොමඟ යවන සුළුය. git cloneසියලුම දුරස්ථ ශාඛා බාගත කරයි, නමුත් එය කරන්නේ මාස්ටර්ගේ දේශීය ශාඛාවක් පමණි. git branchදේශීය ශාඛා පමණක් පෙන්වන බැවින් , ඔබ git branch -aදුරස්ථ ශාඛා ද දැකිය යුතුය .
සෙරාන්

ඔබට ස්තුතියි. මෙය අමුතු පෙරනිමි හැසිරීමකි IMO. මම එය වඩාත් ගුප්ත ගායනයට යොමු කරමි. එය ශාඛා බාගත කළේ නම්, එය git ශාඛාව අමතන විට ඒවා සඟවන්නේ ඇයි?
ඇඩම් හියුස්

1
Er සෙරාන්, ස්තූතියි; මම ඒ අනුව මගේ පිළිතුර යාවත්කාලීන කර ඇත.
මැටොක්ස්බෙක්මන්

"සියලුම දුරස්ථ ශාඛා බාගත කරයි, නමුත් එය දේශීය මාස්ටර් ශාඛාවක් පමණක් කරයි". මෙය තේරුම් ගැනීමට මට උදව් අවශ්‍යයි. Git clone මාස්ටර් හැර වෙනත් ශාඛා ක්ලෝන නොකරන බව පෙනේ, ඔබ "git branch -a" කරන විට එයින් පෙන්නුම් කරන්නේ "සංවර්ධනය" ශාඛාව "දුරස්ථ / සම්භවය / සංවර්ධනය" තුළ පමණක් බවයි. මෙයින් කියැවෙන්නේ ඔබට මෙම ශාඛාව දේශීයව කොතැනකවත් නොමැති බවයි, එය දැනට පවතින්නේ ආරම්භයේදීම පමණක්ද?
ජෝන් ලිට්ල්

19

මගේ මෙවලම git_remote_branch භාවිතා කරන්න (ඔබේ පරිගණකයේ රූබි ස්ථාපනය කළ යුතුය). දුරස්ථ ශාඛා හැසිරවීම පහසු කිරීම සඳහා එය විශේෂයෙන් ඉදිකර ඇත.

එය ඔබ වෙනුවෙන් මෙහෙයුමක් කරන සෑම අවස්ථාවකම එය කොන්සෝලයෙහි රතු පැහැයෙන් මුද්‍රණය කරයි. කාලයාගේ ඇවෑමෙන්, ඔවුන් අවසානයේ ඔබේ මොළයට ඇලී සිටියි :-)

ඔබ වෙනුවෙන් grb විධාන ක්‍රියාත්මක කිරීමට ඔබට අවශ්‍ය නැතිනම්, 'පැහැදිලි කරන්න' විශේෂාංගය භාවිතා කරන්න. ඔබ වෙනුවෙන් ක්‍රියාත්මක කිරීම වෙනුවට විධාන ඔබේ කොන්සෝලය වෙත මුද්‍රණය කෙරේ.

අවසාන වශයෙන්, කටපාඩම් කිරීම පහසු කිරීම සඳහා සියලුම විධානයන්ට අන්වර්ථයන් ඇත.

මෙය ඇල්ෆා මෘදුකාංගයක් බව සලකන්න ;-)

ඔබ grb උදව් ක්‍රියාත්මක කරන විට මෙන්න උදව්:

git_remote_branch අනුවාදය 0.2.6

  භාවිතය:

  grb ශාඛා නාමය සාදන්න [origin_server] 

  grb ශාඛා නාමය ප්‍රකාශයට පත් කරන්න [origin_server] 

  grb නැවත නම් කරන්න ශාඛා නාමය [සම්භවය_ සේවාදායකය] 

  grb ශාඛා නාමය මකන්න [origin_server] 

  grb track branch_name [origin_server] 



  සටහන්:
  Origin_server නිශ්චිතව දක්වා නොමැති නම්, 'සම්භවය' යන නාමය උපකල්පනය කෙරේ 
    (git හි පෙරනිමිය)
  - නැවත නම් කිරීමේ ක්‍රියාකාරිත්වය වත්මන් ශාඛාව නැවත නම් කරයි

  මෙටා-විධානය පැහැදිලි කරන්න: ඔබට ඕනෑම විධානයක් සමඟ සූදානම් කළ හැකිය 
'පැහැදිලි කරන්න' යන පදය. විධානය ක්‍රියාත්මක කරනවා වෙනුවට git_remote_branch
එය ඉටු කිරීම සඳහා ඔබ ධාවනය කළ යුතු විධාන ලැයිස්තුව ප්‍රතිදානය කරයි 
ඒ ඉලක්කය.

  උදාහරණයක්: 
    grb පැහැදිලි කරන්න create
    grb පැහැදිලි කරන්න my_branch github සාදන්න

  සියලුම විධානයන්ට අන්වර්ථයන් ඇත:
  create: create, new
  මකන්න: මකන්න, විනාශ කරන්න, මරන්න, ඉවත් කරන්න, rm
  ප්‍රකාශ කරන්න: ප්‍රකාශ කරන්න, දුරස්ථ කරන්න
  rename: නැවත නම් කරන්න, rn, mv, චලනය
  ධාවන පථය: ලුහුබඳින්න, අනුගමනය කරන්න, අල්ලා ගන්න, ලබා ගන්න

6
Wise ානවන්තයින්ට වචනය: මෙම පිළිතුර පළ කරන කාලය වන විට මෙම ව්‍යාපෘතිය අතහැර දමා ඇති බවක් පෙනේ. 2008 න් පසු මට කිසිදු යාවත්කාලීනයක් සොයාගත නොහැක. කේවියට් එම්ප්ටර් සහ ඒ සියල්ල. මම වැරදියි නම්, යමෙකු සංස්කරණය කර වත්මන් දර්ශකයක් ලබා දෙනු ඇතැයි මම බලාපොරොත්තු වෙමි, මන්ද මේ වැනි මෙවලමක් ලබා ගැනීමට මා කැමතිය.
bradheintz

answerbradheintz මෙම පිළිතුර පරීක්ෂා කරන්න, එය git අන්වර්ථයක් සකසයි
user151841

19

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

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

$ git branch -a

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

$ git checkout -b branchname origin/branchname

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


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

  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" විධානයක් දැකිය හැකිය.

  1. දෙවන පියවර

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

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

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

$ git reset --hard

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

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


"බාගත කරන්න" යන වචනය ඔබ භාවිතා කිරීමට මා කැමති නැත ... ඒවා එකවර අතින් බාගත කරන්න . සියලු තොරතුරු, ඇත්ත වශයෙන්ම, repo ක්ලෝන කිරීමෙන් පසුව දැනටමත් බාගත කර ඇත. කෙනෙකුට කළ යුතු එකම දෙය වන්නේ දේශීය ෙසොයා ගැනීෙම් ශාඛා නිර්මාණය කිරීමයි (එය නොබැඳි විට ද කළ හැකි ය, එමඟින් සියලු තොරතුරු ගබඩාවේ ඇති බව සනාථ වේ).
bvgheluwe

vbvgheluwe ඒ නිසා එය උපුටා දැක්වීම්වල ඇත.
ෆෙඩරිකෝ කැපල්ඩෝ

15

දේශීය ගබඩාවකින් ක්ලෝන කිරීම git clone & git fetch සමඟ ක්‍රියා නොකරනු ඇත: බොහෝ ශාඛා / ටැග් නොවිසඳී පවතිනු ඇත.

සියලුම ශාඛා හා ටැග් සහිත ක්ලෝනයක් ලබා ගැනීමට.

git clone --mirror git://example.com/myproject myproject-local-bare-repo.git

සියලුම ශාඛා හා ටැග් සහිත ක්ලෝනයක් ලබා ගැනීමට පමණක් නොව වැඩ කරන පිටපතක් සමඟ:

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master

13

හරි, ඔබ ඔබේ ගබඩාව ක්ලෝන කරන විට, ඔබට එහි සියලුම ශාඛා තිබේ ...

ඔබ එසේ කළහොත් git branch, ඒවා සැඟවී ඇත ...

එබැවින් ඔබ සියලු ශාඛා වල නම දැකීමට --allකැමති නම්, මේ ආකාරයට ධජය එක් කරන්න :

git branch --all හෝ git branch -a

ඔබ ශාඛාවට පිවිසෙන්නේ නම්, ඔබට අවශ්‍ය සියල්ල ලැබේ.

නමුත් ඔබ ක්ලෝන කිරීමෙන් පසුව වෙනත් අයෙකු විසින් නිර්මාණය කරන ලද ශාඛාව ගැන කුමක් කිව හැකිද?

මෙම අවස්ථාවේදී, කරන්න:

git fetch

සියලු ශාඛා නැවත පරීක්ෂා කරන්න ...

ඔබ එකවර ලබා ගැනීමට සහ පිටවීමට කැමති නම්, ඔබට කළ හැක්කේ:

git fetch && git checkout your_branch_name

මා පැවසූ දේ සරල කිරීම සඳහා පහත රූපය ද නිර්මාණය කර ඇත:

git branch - සියලුම ශාඛා ලබා ගැනීමට


3
"ඔබට එය තිබේ" සහ "ඔබට එය පෙනේ" අතර වෙනසක් ඇත. git branch -all ඔබ දුරස්ථ ගබඩාව ඉවත් කරන විට දුරස්ථ ශාඛා තවදුරටත් ලැයිස්තුගත නොකරනු ඇත.
ගුස්ටාව්

12

ප්‍රශ්නයට එක් පිළිතුරක් දෙස බැලීමෙන් එය කෙටි කළ හැකි බව මම දුටුවෙමි.

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
 git branch --track ${branch##*/} $branch;
done

නමුත් පරෙස්සම් වන්න, දුරස්ථ ශාඛා වලින් එකක් උදා. Admin_master ලෙස නම් කළහොත් එය බාගත නොවනු ඇත!

මුල් අදහස සඳහා බිග්ෆිෂ් වලට ස්තූතියි


grepව්‍යාජ ධනාත්මක තත්ත්වයන් වළක්වා ගැනීම සඳහා පෙරණය වැඩි දියුණු කිරීම සඳහා ඔබට රීජෙක්ස් වැඩි දියුණු කළ හැකිය, නැතහොත් ඒ වෙනුවට ඒක් භාවිතා කරන්න .
ත්‍රිත්ව

සියලුම ශාඛා 'සම්භවය \ my_branch_name' වන අතර එය අනිවාර්යයෙන්ම මට අවශ්‍ය දේ නොවේ.
Sнаđошƒаӽ

Construction {ශාඛාව ## * /} මම මීට පෙර දැක නැත - ඇත්තෙන්ම ප්‍රයෝජනවත් බව පෙනේ - ඒ ගැන වැඩි විස්තර දැනගත හැකි අදහසක් තිබේද? කිසිම තැනක බාෂ් යටතේ සොයාගත නොහැක. Thx.
සමිනෝස්


10

විධාන රේඛාවට පිටපත් කිරීම සඳහා:

git checkout master ; remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master

වැඩි කියවීම සඳහා:

git checkout master ;
remote=origin ;
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD 
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
    git branch -D $brname ;
    git checkout -b $brname $remote/$brname ;
done ;
git checkout master


මෙය:

  1. මාස්ටර් පරීක්ෂා කරන්න (එවිට අප සිටින ශාඛාව මකා දැමිය හැකිය)
  2. පිටවීම සඳහා දුරස්ථය තෝරන්න (ඔබ සතුව ඇති ඕනෑම දුරස්ථයකට එය වෙනස් කරන්න)
  3. මාස්ටර් සහ හෙඩ් හැර දුරස්ථයේ සියලුම ශාඛා හරහා ලූප
    1. දේශීය ශාඛාව මකන්න (එවිට අපට බලෙන් යාවත්කාලීන කළ ශාඛා පරීක්ෂා කළ හැකිය)
    2. දුරස්ථයෙන් ශාඛාව පරීක්ෂා කරන්න
  4. ස්වාමියා පරීක්ෂා කරන්න (ඒ වෙනුවෙන්)

මත පදනම් පිළිතුරVonC .


10

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

Function git-GetAllRemoteBranches {
     iex "git branch -r"                       <# get all remote branches #> `
     | % { $_ -Match "origin\/(?'name'\S+)" }  <# select only names of the branches #> `
     | % { Out-Null; $matches['name'] }        <# write does names #>
}


Function git-CheckoutAllBranches {
    git-GetAllRemoteBranches `
        | % { iex "git checkout $_" }          <# execute ' git checkout <branch>' #>
}

මගේ git settings repo හි තවත් git කාර්යයන් සොයාගත හැකිය


9

මෙන්න අමුතු භාවිතා කරන පිළිතුරක්. නව repo එකක භාවිතා කරන්නේ නම් මෙම ක්‍රමය ප්‍රමාණවත් වේ.

git branch -r | awk -F/ '{ system("git checkout " $NF) }'

පවත්නා ශාඛා හුදෙක් පරීක්ෂා කර හෝ දැනටමත් එහි ඇති බව ප්‍රකාශයට පත් කරනු ඇත, නමුත් ගැටුම් වළක්වා ගැනීම සඳහා පෙරහන් එකතු කළ හැකිය.

එය වෙනස් කළ හැකි බැවින් එය පැහැදිලි git checkout -b <branch> -t <remote>/<branch>විධානයක් ලෙස හැඳින්වේ .

මෙම පිළිතුර නිකොස් සී ගේ අදහස අනුගමනය කරයි.


විකල්පයක් ලෙස අපට ඒ වෙනුවට දුරස්ථ ශාඛාව නියම කළ හැකිය. මෙම මත පදනම් වේ murphytalk ගේ පිළිතුර .

git branch -r | awk '{ system("git checkout -t " $NF) }'

එය ගැටුම් මත මාරාන්තික දෝෂ පණිවිඩ විසි කරන නමුත් ඒවා හානිකර නොවන බව මට පෙනේ.


විධාන දෙකම අන්වර්ථ කළ හැකිය.

භාවිතා කිසිවෙක් ගේ පිළිතුර යොමු ලෙස, අපි අන්වර්ථ කිරීම සඳහා පහත සඳහන් විධානය ඇත:

git config --global alias.clone-branches '! git branch -r | awk -F/ "{ system(\"git checkout \" \$NF) }"'
git config --global alias.clone-branches '! git branch -r | awk "{ system(\"git checkout -t \" \$NF) }"'

පුද්ගලිකව මම භාවිතා කරමි track-allහෝ track-all-branches.


ඔබට ස්තූති කිරීමට අවශ්‍යයි. මෙය මනාව ක්‍රියාත්මක වූ අතර, යම් යම් අදින්න හැසිරීම් වෙනස් කිරීම වැනි
හිස් ගබඩාවක්

8

මට හරියටම එය කිරීමට අවශ්‍ය විය. මෙන්න මගේ රූබි පිටපත.

#!/usr/bin/env ruby

local = []
remote = {}

# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
  line.strip!
  if /origin\//.match(line)
     remote[line.gsub(/origin\//, '')] = line
   else
     local << line
   end
end
# Update 
remote.each_pair do |loc, rem|
  next if local.include?(loc)
  %x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]

මෙම ස්ක්‍රිප්ට් එක කිසිසේත් ක්‍රියාත්මක නොකිරීමට මා තව දුරටත් පළ කළ පිළිතුර බලන්න.
lacostenycoder

8

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

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

එබැවින් මෙම ක්‍රම දෙක ඉතා ප්‍රයෝජනවත් බව මට පෙනී ගියේය. ඔවුන් වෙනත් කෙනෙකුට උදව් කරයි කියා සිතනවා.

ක්රමය 1:

git clone --mirror OLD_REPO_URL
cd new-cloned-project
mkdir .git
mv * .git
git config --local --bool core.bare false
git reset --hard HEAD
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo

ක්රමය 2:

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
git clone OLD_REPO_URL
cd new-cloned-project
git clone-branches
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo


7

Git සාමාන්‍යයෙන් (නිශ්චිතව දක්වා නොමැති විට) සියළුම ශාඛා සහ / හෝ ටැග් (refs, බලන්න :) වෙනත් ගබඩාවලින් git ls-refsඑකක් හෝ වැඩි ගණනකින් සහ ඒවායේ ඉතිහාසය සම්පූර්ණ කිරීමට අවශ්‍ය වස්තූන් ලබා ගනී. වෙනත් වචන වලින් කිවහොත්, එය දැනටමත් බාගත කර ඇති වස්තූන් වෙත ළඟා විය හැකි වස්තූන් ලබා ගනී. බලන්න: කුමක් කරයිද?git fetch ඇත්තටම කරන්නේ?

සමහර විට ඔබට දැනට පවතින ඒවාට කෙලින්ම සම්බන්ධ නොවන ශාඛා / ටැග් තිබිය හැක, එබැවින් git pull --all/ git fetch --allඑවැනි අවස්ථාවකදී උදව් නොකරනු ඇත, නමුත් ඔබට ඒවා ලැයිස්තු ගත කළ හැකිය:

git ls-remote -h -t origin

ref නම් දැන ගැනීමෙන් ඒවා අතින් ලබා ගන්න.

එබැවින් ඒවා සියල්ලම ලබා ගැනීමට උත්සාහ කරන්න:

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

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

ඉන්පසු ඔබේ සියලුම ශාඛා නැවත පරීක්ෂා කරන්න:

git branch -avv

ඉහත උදව් නොකෙරේ නම්, ඔබ විසින් අස්ථානගත වූ අතු අතින් ලුහුබැඳ ඇති ලැයිස්තුවට එකතු කළ යුතුය (ඒවා කෙසේ හෝ නැතිවී ගොස් ඇති බැවින්):

$ git remote -v show origin
...
  Remote branches:
    master      tracked

විසින් git remote set-branchesවගේ:

git remote set-branches --add origin missing_branch

එය ලබා remotes/originගැනීමෙන් පසු එය දිස්වනු ඇත :

$ git remote -v show origin
...
  Remote branches:
    missing_branch new (next fetch will store in remotes/origin)
$ git fetch
From github.com:Foo/Bar
 * [new branch]      missing_branch -> origin/missing_branch

දෝෂගවේෂණය

ඔබට තවමත් ප්‍රධාන ශාඛාව හැර වෙනත් කිසිවක් ලබා ගත නොහැකි නම්, පහත සඳහන් දෑ පරීක්ෂා කරන්න:

  • ඔබගේ දුරස්ථයන් දෙවරක් පරීක්ෂා කරන්න (git remote -v ), උදා
    • බව වලංගුකරණය git config branch.master.remoteවේorigin .
    • originනිවැරදි URL වෙත යොමු වන්නේ දැයි පරීක්ෂා කරන්න : git remote show origin(මෙම ලිපිය බලන්න ).

7

මුල් 2017 වන විට, පිළිතුර මේ අදහස් තුළ වැඩ:

git fetch <origin-name> <branch-name>ඔබ වෙනුවෙන් ශාඛාව පහතට ගෙන එයි. මෙය සියලුම ශාඛා එකවර ඇද නොගත්තද, ඔබට එක් ශාඛාවකට ඒකීයව ක්‍රියාත්මක කළ හැකිය.


මේ සඳහා ඔබ එක් එක් ශාඛාව එකවර ලබා ගත යුතුය. ඔබට අතු ගොඩක් තිබේ නම් එතරම් හොඳ නැත.
lacostenycoder

6

සියලුම දුරස්ථ ශාඛා සඳහා දේශීය ශාඛා නිර්මාණය කරන තවත් කෙටි එක්-ලයිනර් විධානයක් මෙන්න:

(git branch -r | sed -n '/->/!s#^  origin/##p' && echo master) | xargs -L1 git checkout

දේශීය ශාඛා ලුහුබැඳීම දැනටමත් නිර්මාණය කර ඇත්නම් එය නිසියාකාරව ක්‍රියාත්මක වේ. පළමු git cloneහෝ ඕනෑම වේලාවක පසුව ඔබට එය ඇමතිය හැකිය .

masterක්ලෝන කිරීමෙන් පසු ඔබට ශාඛා පරීක්ෂා කිරීම අවශ්‍ය නොවේ නම් , භාවිතා කරන්න

git branch -r | sed -n '/->/!s#^  origin/##p'| xargs -L1 git checkout
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.