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ć?

Author: Lakshman Prasad, 2009-12-16

9 answers

Najprostszym sposobem jest:

git push --all origin

To wypchnie znaczniki i gałęzie.

 1037
Author: brimble2010,
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/*
 140
Author: Jakub Narębski,
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/*'
 32
Author: Mark Reed,
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.

 16
Author: vikas027,
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.

 9
Author: Lance Cleveland,
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
 5
Author: tokhi,
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ż:

  1. 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
  2. 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.
  3. pomija mistrza śledzenia, ponieważ to już się dzieje
  4. właściwie nie checkout anything thus is fast
  5. 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
 2
Author: abulka,
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
 0
Author: 030,
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:

  1. skończysz z origin jako pilot we wszystkich repozytoriach. Więc nie będziesz mógł dodać origin, ale musisz użyć set-url.
  2. 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 / *]}

 0
Author: Dheeraj Bhaskar,
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