Git push branch z jednego pilota do drugiego?
Mam ustawione następujące piloty:
$ git remote
korg
rorg
Oraz następujące gałęzie:
$ git branch -a
* (no branch)
remotes/korg/gingerbread
remotes/korg/gingerbread-release
remotes/korg/honeycomb
remotes/korg/honeycomb-mr1-release
remotes/korg/master
remotes/m/android-2.3.3_r1 -> refs/tags/android-2.3.3_r1a
remotes/m/gingerbread -> korg/gingerbread
Teraz chcę wypchnąć wszystkie zdalne gałęzie z korg
do rorg
zdalnego. Jak mam to zrobić?
Najlepiej bez tworzenia lokalnego oddziału dla każdego pierwszego, jeśli można tego uniknąć.
5 answers
Szybki test tworzenia tymczasowych repozytoriów pokazuje, że możesz skonstruować refspec, który może to zrobić:
$ git push rorg origin/one:refs/heads/one
Counting objects: 5, done.
Writing objects: 100% (3/3), 240 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /tmp/rorg
* [new branch] origin/one -> one
So origin/BRANCHNAME: refs/heads / BRANCHNAME
Sprawdzanie w moim rorg
pilocie:
pat@host /tmp/rorg (BARE:master)
$ git graph --all
* 5750bca (HEAD, master) c
| * 13fd55a (one) b
|/
* 822e0de a
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-19 09:33:15
Znalazłem ten:
git push rorg 'refs/remotes/korg/*:refs/heads/*'
I wypchnął wszystkie moje odległe gałęzie z korg do rorg (nawet bez lokalnych kopii gałęzi). Zobacz wynik poniżej:
Counting objects: 293, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (67/67), done.
Writing objects: 100% (176/176), 48.32 KiB, done.
Total 176 (delta 105), reused 168 (delta 97)
remote: Resolving deltas: 11% (12/105)
To <<MY_REPOSITORY_URL>>
* [new branch] korg/gingerbread-> gingerbread
* [new branch] korg/gingerbread-release -> gingerbread-release
* [new branch] korg/honeycomb-> honeycomb
* [new branch] korg/HEAD -> HEAD
* [new branch] korg/honeycomb-mr1-release-> honeycomb-mr1-release
* [new branch] korg/master -> master
I wtedy możesz zrobić to samo dla tags
refs:
git push rorg 'refs/tags/*:refs/tags/*'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 19:54:49
Aby uzupełnić odpowiedź patthoyta , Oto krótki skrypt powłoki, który przepycha wszystkie gałęzie z jednego pilota do drugiego:
SRC_REMOTE=korg
DST_REMOTE=rorg
for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->')
do git push "$DST_REMOTE" "$a:refs/heads/${a//$SRC_REMOTE\/}"
done
Podsumowując, dla każdej zdalnej gałęzi na zdalnym źródłowym (z wyjątkiem gałęzi "pointer", takich jak HEAD), naciśnij ten ref do zdalnego docelowego. (Bit ${a//$SRC_REMOTE\/}
usuwa zdalną nazwę źródłową z nazwy gałęzi, tzn. origin/master
staje się master
.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:25
To działa w Zsh
git push rorg 'refs/remotes/korg/*:refs/heads/*'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-04 01:11:51
Dla każdego skryptu, który sugeruję Ci uruchomić, mądrze byłoby ukryć lub zatwierdzić wszystkie zmiany.
Musiałem przepchnąć kilka gałęzi z jednego pilota do drugiego. Odpowiedzi te wymagały, że lokalne oddziały istniały wcześniejSRC_R=origin1
DEST_R=origin2
for cbranch in $(git branch -r | grep $SRC_R | cut -d '/' -f2,3,4,5 | cut -d ' ' -f1)
do
git checkout $cbranch
git push $DEST_R $cbranch
done
Po prostu zmień origin1 na zdalny źródłowy, a origin2 na zdalny docelowy. Skopiuj to do "remoteBranchCloner.sh" i nazwij to używając "sh callBranchCloner.sh".
Może być lepszy sposób, który nie Kilka pchnięć.
Jeśli używasz mojego kodu, prawdopodobnie chcesz użyć cachowania poświadczeń, w przeciwnym razie musisz wpisać swoje poświadczenia serveral times.
Dla windows :
Uwaga: Ten skrypt jest dla Linuksa . Jeśli uruchomisz go w "Git bash" skrypt będzie działał, ale nie możesz go uruchomić z natywnej konsoli bez zainstalowania czegoś specjalnego.
git config [--global] credential.helper wincred
Dla Linuksa
git config [--global] credential.helper cache
Gdzie [--global] oznacza opcjonalnie add --global
Jeśli chcesz ustawić zdalne śledzenie wszystkich gałęzi na nowy:
DEST_R=remotename
for cbranch in `git branch`
do
git checkout $cbranch
git branch -u guru/$cbranch
done
Zapisany jako plik. sh i uruchomiony z "sh filename.sh" ustawia wszystkie upstreams do śledzenia zdalnego 'remotename'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 19:42:35