Krótko mówiąc: czy istnieje sposób na wypchnięcie repozytorium git i pobranie z listy zdalnych repozytoriów (zamiast pojedynczego „pochodzenia”)?
Długie: często mam sytuację, gdy tworzę aplikację na wielu komputerach, z różnymi łączami - powiedz laptop podczas transportu, komputer „A”, gdy jestem w określonej lokalizacji, i inny komputer „B” podczas gdy na innym. Ponadto laptop może mieć łączność tylko z „A” lub „B”, a czasami jednocześnie.
Chciałbym, aby git zawsze „ściągał” i „przepychał” do wszystkich komputerów, z którymi może się obecnie łączyć, więc łatwiej jest przeskakiwać z jednej maszyny na drugą i kontynuować płynną pracę.
git
cech, jest zawarty w malvineous „s odpowiedź poniżej . Przyjęta odpowiedź jest niepoprawna.Odpowiedzi:
Możesz skonfigurować wiele zdalnych repozytoriów za pomocą
git remote
polecenia:Aby pobrać ze wszystkich skonfigurowanych pilotów i zaktualizować gałęzie śledzenia, ale nie scalić się z nimi
HEAD
, wykonaj:Jeśli nie jest on aktualnie podłączony do jednego z pilotów, upłynie limit czasu lub zgłosi błąd i przejdzie do następnego. Będziesz musiał ręcznie scalić z pobranych repozytoriów lub
cherry-pick
, w zależności od tego, jak chcesz zorganizować zbieranie zmian.Aby pobrać gałąź master z alt i przeciągnąć ją do bieżącej głowy, wykonaj:
W rzeczywistości
git pull
jest to prawie skrótgit pull origin HEAD
(właściwie wygląda to w pliku konfiguracyjnym, aby to ustalić, ale masz pomysł).W przypadku wypychania aktualizacji musisz to zrobić ręcznie dla każdego repozytorium.
Myślę, że push został zaprojektowany z myślą o przepływie pracy centralnego repozytorium.
źródło
Robienie tego ręcznie nie jest już konieczne , dzięki nowoczesnym wersjom
git
! Zobacz rozwiązanie Malvineousa poniżej.Reprodukcja tutaj:
Oryginalna odpowiedź:
Tego używam od dłuższego czasu bez złych konsekwencji i zasugerował Linus Torvalds na liście mailowej git .
Rozwiązanie araqnid jest odpowiednie do wprowadzenia kodu do repozytorium… ale kiedy, tak jak ja, masz wiele równoważnych autorytatywnych upstreamów (trzymam niektóre z moich bardziej krytycznych projektów sklonowane zarówno na prywatnym serwerze, GitHub, jak i Codaset), codzienne zmiany mogą być trudne.
Krótko mówiąc,
git remote add
wszystkie Twoje piloty indywidualnie… a następniegit config -e
dodaj scalonego pilota. Zakładając, że masz to repozytoriumconfig
:… Aby utworzyć scalony-zdalny dla
"Paws"
i"Codaset"
, mogę dodać następujące po tych wszystkich:Kiedy to zrobię, kiedy
git push Origin Master
to zrobię, popchnie to jednoPaws/Master
i drugieCodaset/Master
, co ułatwi życie.źródło
git config -e
otwiera.git/config
plik w preferowanym edytorze.git
wiersz poleceń obsługuje to natywnie, zgit remote set-url ... --add
.[branch "Master"]
zestawieremote = Origin
igit pull
będą używać oba piloty.Od wersji 1.8 Gitta (październik 2012 r.) Możesz to zrobić z wiersza poleceń:
Następnie
git push
prześle do użytkownika user1 @ repo1, a następnie do user2 @ repo2.źródło
git fetch
. (Biorąc to pod uwagę, nie rozumiem, bez czegogit remote set-url --add
może być cel--push
.)Dodałem te aliasy do mojego ~ / .bashrc:
źródło
git config alias.pushall '!for i in
git remote; do git push $i; done;'
alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'
Możesz dodawać piloty za pomocą:
Następnie, aby zaktualizować wszystkie repozytoria:
źródło
Oto mój przykład ze skryptem bash w
.gitconfig
sekcji aliasówźródło
Dodałem dwa oddzielne pushurl do zdalnego „origin” w pliku .git congfig. Kiedy biegnę,
git push origin "branchName"
to przejdzie i przepchnie do każdego adresu URL. Nie jestem pewien, czy istnieje łatwiejszy sposób na osiągnięcie tego, ale to działa na mnie, aby jednocześnie przesłać do kodu źródłowego Github i do kodu źródłowego My.visualStudio.źródło
Pozwoliłem sobie rozszerzyć odpowiedź od non-urbiz; po prostu dodaj to do swojego ~ / .bashrc:
Stosowanie:
Jeśli nie podasz żadnego argumentu gałęzi dla git-pullall, ściąganie z innych niż domyślne pilotów zakończy się niepowodzeniem; pozostawił takie zachowanie, ponieważ jest analogiczne do git.
źródło
Będziesz potrzebował skryptu, aby przejść przez nie. Git nie zapewnia „push all”. Można teoretycznie wykonać wypychanie w wielu wątkach, ale natywna metoda nie jest dostępna.
Pobieranie jest jeszcze bardziej skomplikowane i polecam to zrobić liniowo.
Myślę, że twoją najlepszą odpowiedzią jest posiadanie maszyny, na którą wszyscy robią push / pull, jeśli to w ogóle możliwe.
źródło
W przypadku aktualizacji pilotów (tj.
pull
Obudowy) sprawy stały się łatwiejsze.Oświadczenie Linusa
w wymienionej wpisu na listę mailingową Git w odpowiedzi elliottcable użytkownika nie jest już prawdą.
git fetch
nauczyłem się--all
gdzieś w przeszłości parametru pozwalającego pobrać wszystkie piloty za jednym razem.Jeśli nie wszystkie są wymagane, można użyć
--multiple
przełącznika, aby określić wiele pilotów lub grupę.źródło
Chciałem pracować w VSO / TFS, a następnie pchnąć publicznie do GitHub, gdy będzie gotowy. Pierwsze repo utworzone w prywatnym VSO. Kiedy przyszedł czas na dodanie do GitHub, zrobiłem:
Pracował jak mistrz ...
W celu sprawdzenia poprawności należy wydać polecenie „git remote -v”, aby wyświetlić listę repozytoriów powiązanych z projektem.
Prosty sposób, pracował dla mnie ... Mam nadzieję, że to komuś pomaga.
źródło
git push -f
bez powodu, np. Niepowodzeniegit push
lub wiedza o tym, co się robi, jest złym pomysłem, potencjalnie szkodliwym. To również nie odpowiada na pytanie, ale jak dodać drugiego pilota.dodaj alias do globalnego gitconfig (/home/user/.gitconfig) za pomocą poniższego polecenia.
Po zatwierdzeniu kodu mówimy
domyślnie wypychać do źródła. Po powyższym aliasie możemy powiedzieć
a kod zostanie zaktualizowany do wszystkich pilotów, w tym zdalnego pochodzenia.
źródło
Dodawanie
all
pilota staje się trochę żmudne, ponieważ musisz skonfigurować na każdym używanym komputerze.Ponadto wszystkie podane aliasy
bash
i zakładają, że będziesz naciskać na wszystkie piloty. (Np .: Mam rozwidlenie, które utrzymuję w GitHub i GitLab. Mam upstreamgit
sshag
dodany pilot , ale nie mam uprawnień, aby do niego pchać.)Oto
git
alias, który naciska tylko na piloty z włączonym wypychanym adresem URL@
.źródło
źródło