Skonfiguruj git, aby ciągnął i pchał wszystkie gałęzie
Chciałbym domyślnie popchnąć i pociągnąć wszystkie gałęzie, łącznie z nowo utworzonymi.
Czy jest jakieś ustawienie, które mogę dla niego zdefiniować?
W Przeciwnym Razie, kiedy dodam nową gałąź lokalnie i chcę ją wyciągnąć z serwera, jaki jest najprostszy sposób na to?
Utworzyłem nową gałąź o tej samej nazwie i próbowałem ją ściągnąć, ale nie działa. Pyta mnie o wszystkie zdalne konfiguracje gałęzi. Jak to ustawić?
9 answers
Najprostszym sposobem jest:
git push --all origin
To wypchnie znaczniki i gałęzie.
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-01-05 11:50:43
W nowoczesnym git zawsze pobierasz wszystkie gałęzie (jako gałęzie zdalnego śledzenia do refs/remotes/origin/*
przestrzeni nazw, widocznej z git branch -r
lub git remote show origin
).
Domyślnie (patrz dokumentacja zmiennej konfiguracyjnej push.default
) naciskasz pasujące gałęzie, co oznacza, że najpierw musisz zrobić git push origin branch
, aby git wcisnął go zawsze na git push
.
Jeśli chcesz zawsze naciskać wszystkie gałęzie, możesz ustawić push refspec. Zakładając, że pilot ma nazwę origin
możesz albo użyj Git config :
$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'
Lub bezpośrednio edytuj .git/config
plik, aby mieć coś takiego:
[remote "origin"] url = [email protected]:/srv/git/repo.git fetch = +refs/heads/*:refs/remotes/origin/* fetch = +refs/tags/*:refs/tags/* push = +refs/heads/*:refs/heads/* push = +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
2009-12-16 14:38:09
Włączenie + w specyfikację push jest prawdopodobnie złym pomysłem, ponieważ oznacza to, że git z radością wykona non-fast-forward push nawet bez-f , a jeśli zdalny serwer jest skonfigurowany tak, aby je akceptować, możesz stracić historię.
Spróbuj tego:
$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'
$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'
$ git config --add remote.origin.fetch '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
2011-06-17 04:48:45
Użyłem poniższych poleceń do migracji wszystkich gałęzi do nowego repozytorium.
~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin master
~$ git push new-origin --mirror
Uwaga: musiałem użyć polecenia second last (tj. push master first) podczas klonowania repo z Atlassian Stash do AWS CodeCommit (puste repo). Nie jestem pewien powodu, ale po naciśnięciu (git push new-origin --mirror
) domyślna gałąź odnosiła się do innej gałęzi niż 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-06-03 03:55:49
Jeśli przenosisz gałęzie do nowego repo ze starego i nie masz wszystkich lokalnych gałęzi repo, musisz najpierw je śledzić.
for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done
Następnie dodaj swój nowy zdalny repo:
git remote add bb <path-to-new-repo>
Następnie możesz wcisnąć wszystkie używając tego polecenia:
git push -u bb --all
Lub możesz skonfigurować repo używając poleceń Git config, które zostały zapisane w innych odpowiedziach tutaj, jeśli nie robisz tego jeden raz lub chcesz przenieść tylko lokalne gałęzie.
Ważny punkt, drugi odpowiedzi popychają tylko wszystkie lokalne gałęzie. Jeśli gałęzie istnieją tylko w alternatywnym zdalnym repozytorium, nie zostaną przeniesione bez ich śledzenia. W tym pomoże przedstawiona tutaj pętla for.
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-02-02 17:08:24
Aby zobaczyć wszystkie gałęzie z out używając git branch -a
należy wykonać:
for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all
Teraz możesz zobaczyć wszystkie gałęzie:
git branch
Aby wcisnąć wszystkie gałęzie spróbuj:
git push --all
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-01-15 10:14:04
Jeśli przenosisz wszystkie gałęzie do nowego repo ze starego, to w Twoim lokalnym repo musisz skonfigurować śledzenie każdej gałęzi do istniejących gałęzi origin, przed przesunięciem do nowego repo, w przeciwnym razie Wszystkie twoje gałęzie origin nie pojawią się w nowym origin. Można to zrobić ręcznie, śledząc lub sprawdzając każdą gałąź, lub używając jednej wkładki:
for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done
To polecenie z jednej linii jest oparte na wersjach z innych odpowiedzi na tej stronie, ale jest prawdopodobnie lepsze ponieważ:
- poprawnie ustawia śledzenie gałęzi, w przeciwieństwie do niektórych starszych wariantów tego polecenia na tej stronie, które dostarczają tylko jeden parametr do --track, a tym samym każda gałąź kończy się śledzeniem master-not good
- nazywa lokalne oddziały bez przedrostka " origin/", którego osobiście nie chcę - i jest zgodne z tym, co dzieje się podczas kasowania oddziału normalnie.
- pomija mistrza śledzenia, ponieważ to już się dzieje
- właściwie nie checkout anything thus is fast
- unika potknięcia się o - > w wyjściu Git branch-R
Następnie, jeśli zmieniasz origins, zastąp link do starego origin i wskaż Nowy pilot. Upewnij się, że najpierw utworzysz nowego pilota, używając interfejsu graficznego bitbucket / github, ale nie dodawaj do niego żadnych plików, ponieważ pojawi się problem z połączeniem. Np.
git remote set-url origin [email protected]:YOUR/SOMEREPO.git
Przyj. Uwaga do wypchnięcia znaczników potrzebne jest również drugie polecenie:
git push -u --all origin
git push --tags origin
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-03-29 06:28:46
for b in $(git branch -a | grep -v master | \
sed -e "s|remotes\/origin\/\(.*\)|\1|g"); do git checkout $b && \
git push origin $b; done
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
2016-11-14 11:33:49
Rozwiązanie bez hardcodingu origin
w config
Użyj poniższego w swoim global gitconfig
[remote]
push = +refs/heads/*
push = +refs/tags/*
To wypycha wszystkie gałęzie i wszystkie znaczniki
Dlaczego nie powinieneś używać hardcode origin
w config?
If you hardcode:
- skończysz z
origin
jako pilot we wszystkich repozytoriach. Więc nie będziesz mógł dodać origin, ale musisz użyćset-url
. - jeśli narzędzie utworzy pilota o innej nazwie push Wszystkie config nie będą stosowane. Wtedy będziesz musiał zmienić nazwę pilota, ale zmiana nazwy nie będzie działać, ponieważ
origin
już istnieje (z punktu 1) pamiętaj:)
Pobieranie jest już obsługiwane przez nowoczesny git
Zgodnie z odpowiedzią Jakuba Narębskiego:
Z nowoczesnym Gitem zawsze pobierasz wszystkie gałęzie (jako gałęzie zdalnego śledzenia do przestrzeni nazw refs/remotes/ origin / *]}
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-06-18 12:25:48