Pytanie git push jednocześnie do wielu repozytoriów [duplicate]


To pytanie już zawiera odpowiedź:

Jak mogę zrobić git push popychać nie tylko origin ale także inne zdalne repozytorium?

tak jak git push jest tylko aliasem dla git push origin, czy mogę alias git push, aby przesłać do 2 zdalnych repozytoriów jednocześnie (za pomocą tylko jednego polecenia)?

Nie szukam tutaj skryptu innego niż git, ale chciałbym ustawić to dla mojego lokalnego repozytorium w git.

Kiedy wypróbowałem to ze skryptami post-push, nie udało mi się.


76
2017-11-23 12:10


pochodzenie


Czy to by służyło twoim potrzebom? - klang
interesujące, że znalezienie powielonych pytań / odpowiedzi zajęło prawie 4 lata - g19fanatic


Odpowiedzi:


Nie sądzę, że możesz to zrobić po prostu ustawiając flagę na gitarze, ale możesz zmodyfikować plik konfiguracyjny, który pozwoli ci na wysyłanie do wielu zdalnych repozytoriów bez ręcznego wpisywania ich wszystkich (tylko wpisywanie ich po raz pierwszy i nie później)

w .git/config plik możesz dodać wiele adresów URL do zdefiniowanego zdalnego:

[remote "all"]
    url=ssh://user@server/repos/g0.git
    url=ssh://user@server/repos/g1.git

Jeśli ty git push all teraz naciskasz na wszystkie zdalne adresy URL.


119
2017-11-23 12:18



Zdalny "hack" jest prawdopodobnie tym, czego szukałem. (To nie jest redefiniowanie git push -> git push origin HEAD alias, ale robi to, co chcę.) In .git/config raz można dodać wiele urls do a remote. Dzięki. - Kissaki
Coś mi nie działa: stackoverflow.com/questions/15273040/... - ripper234
Świetna tam @ g19fanatic. Działa jak urok :) - d3r1ck
to jest wyjątkowe - cambunctious
Co się stanie, jeśli dwa repozytorium ma inne hasło dla tej samej nazwy użytkownika (e-mail)? - MASh


Bez ręcznej edycji

Możesz dodać wiele adresów URL do oddziału zdalnego (np. all) bezpośrednio z wiersza poleceń za pomocą git config --add remote.xyz.url z różnym adresem URL:

git config --add remote.all.url ssh://user@server/repos/g0.git
git config --add remote.all.url ssh://user@server/repos/g1.git

Całkowicie automatyczny

Jeśli jesteś bardzo leniwy i nie musisz wielokrotnie kopiować / przesyłać adresu URL, to jest dla Ciebie:

function git-add-push-all() {
  while read -r name url method; do
    git config --add remote.all.url "$url"
  done < <(git remote -v | awk '!/^all/ && /push/')
}

git-add-push-all # from git (sub)directory

Pełny skrypt bashy jest możliwy (test $name i $method), ale awk jest słodka i jest miłość dla wszystkich.

Pchać

Następnie możesz naciskać na wszystkie zdalne za pomocą

git push all

Referencje


52
2017-09-05 13:24



Dziękuję za tę odpowiedź. Po prostu ustawiłem to i prawdopodobnie warto zauważyć, że muszę pominąć ssh: // w adresach URL (używam bitbucket i bluehost), więc moje polecenie git config wyglądało tak: git config --add remote. all.url user@server/repos/g0.git - MatthewLee
dodatkowe informacje: pierwsze git config -add utworzy pilota do pobierania i pchania, podczas gdy następny git config -add utworzy tylko pilota zdalnego sterowania. - Paul Verschoor
Przykro mi, w jaki sposób użytkownicy systemu Windows mogą używać Twojego automatycznego skryptu? Dzięki. - Саша Черных
@ СашаЧерных try Bash w systemie Windows - Édouard Lopez
@ ÉdouardLopez: Mam system Windows 10 LTSB, w tej chwili Bash w systemie Windows nie obsługuj LTSB. Dzięki. - Саша Черных


Możesz również uzyskać URL ze skonfigurowanych pilotów:

for repo in g0 g1 ...
do
    git config --add remote.all.url `git config remote.$repo.url`
done

gdzie g0, g1, ... są nazwami twoich pilotów.


0
2018-03-03 15:15