Chciałbym domyślnie wypychać i wyciągać wszystkie gałęzie, w tym nowo utworzone.
Czy istnieje ustawienie, które mogę dla niego zdefiniować?
W przeciwnym razie, kiedy dodam nowy oddział lokalnie i chcę go pobrać z serwera, jaki jest najprostszy sposób, aby to zrobić?
Utworzyłem nowy oddział o tej samej nazwie i próbowałem go ściągnąć, ale to nie działa. Pyta mnie o całą zdalną konfigurację oddziału. Jak to ustawić.
git
version-control
branch
push
Lakshman Prasad
źródło
źródło
Odpowiedzi:
Najprostszym sposobem jest:
Spowoduje to przesuwanie tagów i gałęzi.
źródło
-u
jeden raz, np.git push --all origin -u
Śledzenie zostanie skonfigurowane, a potem możesz po prostu użyćgit push
.git push --tags origin
do wypchnięcia wszystkich tagów.W nowoczesnym git zawsze pobierasz wszystkie gałęzie (jako gałęzie zdalnego śledzenia do
refs/remotes/origin/*
przestrzeni nazw, widoczne za pomocągit branch -r
lubgit remote show origin
).Domyślnie (patrz dokumentacja
push.default
zmiennej config) wypychasz pasujące gałęzie , co oznacza, że najpierw musisz zrobić,git push origin branch
aby git zawsze wypychał jągit push
.Jeśli chcesz zawsze wypychać wszystkie gałęzie , możesz skonfigurować push refspec. Zakładając, że pilot ma nazwę
origin
, możesz użyć git config :lub bezpośrednio edytuj
.git/config
plik, aby mieć coś takiego:źródło
git push --all origin
jest dobre do jednorazowego opublikowania wszystkich gałęzi i tagów, choć domyślnie aż do obecnej wersji semantyczne „dopasowanie” oznaczałoby, że później pchnąłbyś wszystkie gałęzie… chyba że dodasz nową gałąź lub tag. Ustawienie na „wciśnij [...] wszystkie gałęzie domyślnie” jest tak napisane.fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''
(Uwaga: korzystam z git 2.0. Nadal pracuję nad tym, jak to naprawić).push.default
jestsimple
.Dołączenie + do specyfikacji wypychania jest prawdopodobnie złym pomysłem, ponieważ oznacza to, że git z przyjemnością wykona wypychanie nie do przodu nawet bez opcji -f , a jeśli zdalny serwer jest skonfigurowany do akceptowania tych, możesz stracić historię.
Spróbuj tego:
źródło
--global
opcję do każdego z nich, aby ustawić globalną wartość domyślną dla wszystkich swoich repozytoriów.git remote add
.Użyłem poniższych poleceń do migracji wszystkich gałęzi do nowego repozytorium.
UWAGA : Musiałem użyć drugiej komendy (tj. Push master first) podczas klonowania repozytorium z Atlassian Stash do AWS CodeCommit (puste repo). Nie jestem pewien powodu, ale po wypchnięciu (
git push new-origin --mirror
) domyślna gałąź odnosiła się do innej gałęzi niżmaster
.źródło
git push new_origin --all
po prostu wypchnij bieżące lokalne gałęzie do new_origin, nie wszystkie gałęzie pochodzenia.--bare
repozytorium, które nieco różni się od zwykłego repozytorium, zawiera tylko.git
pliki, a nie pliki. Wystarczy, jeśli nie zamierzasz w tym pracować. Zobacz--bare
i--mirror
git-scm.com/docs/git-clone .Jeśli przenosisz oddziały do nowego repozytorium ze starego i NIE masz lokalnych wszystkich starych repozytoriów, musisz je najpierw śledzić.
Następnie dodaj nowe zdalne repozytorium:
Następnie możesz wypchnąć wszystkich za pomocą tego polecenia:
Lub możesz skonfigurować repo za pomocą komend git config wymienionych w innych odpowiedziach tutaj, jeśli nie robisz tego jednorazowo lub chcesz jedynie przenieść lokalne oddziały.
Ważny punkt, pozostałe odpowiedzi popychają tylko wszystkie LOKALNE gałęzie. Jeśli gałęzie istnieją tylko w alternatywnym repozytorium ZDALNYM, nie będą się one poruszać bez uprzedniego ich śledzenia. Zaprezentowana tutaj pętla for pomoże w tym.
źródło
git branch --track reponame origin/reponame
inaczej, aby wszystkie zdalne gałęzie były śledzone w bieżącej gałęzi lokalnejgit branch -r | grep -v '\->' | sed 's/ origin\///'
, który daje tylko nazwę oddziału zdalnego.Aby zobaczyć wszystkie gałęzie bez użycia
git branch -a
, należy wykonać:Teraz możesz zobaczyć wszystkie gałęzie:
Aby wypchnąć wszystkie gałęzie, spróbuj:
źródło
git fetch --all
?Jeśli przenosisz wszystkie gałęzie do nowej repozytorium ze starej, wtedy w repozytorium lokalnym musisz skonfigurować śledzenie każdej gałęzi do istniejących gałęzi początkowych, przed wypchnięciem do nowej repozytorium, w przeciwnym razie wszystkie gałęzie początkowe nie pojawią się w nowe pochodzenie. Zrób to ręcznie, śledząc lub sprawdzając każdy oddział, lub użyj jednego linera:
To jedno wierszowe polecenie oparte jest na jego wersjach w innych odpowiedziach na tej stronie, ale jest prawdopodobnie lepsze, ponieważ:
Następnie, jeśli zmieniasz źródła, zastąp link do starego źródła i wskaż nowego pilota. Upewnij się, że najpierw utworzysz nowy pilot przy użyciu GUI bitbucket / github, ale nie dodawaj do niego żadnych plików, w przeciwnym razie wystąpi problem z scalaniem. Na przykład
Teraz pchnij. Zauważ, że drugie polecenie jest również potrzebne do wypchnięcia tagów:
źródło
Rozwiązanie bez kodowania
origin
w konfiguracjiW globalnej gitconfig użyj następujących opcji
Spycha to wszystkie gałęzie i wszystkie tagi
Dlaczego NIE powinieneś hardcode
origin
w konfiguracji?Jeśli kodujesz na stałe:
origin
jako zdalny we wszystkich repozytoriach. Więc nie będziesz w stanie dodać pochodzenia, ale musisz użyćset-url
.origin
już istnieje (od punktu 1) pamiętaj :)Pobieranie jest już obsługiwane przez nowoczesny git
Zgodnie z odpowiedzią Jakuba Narębskiego:
źródło