Bardzo dobre i proste rozwiązanie. BTW, możesz użyć xargs -l zamiast -L 1, opcja -l jest taka sama jak -L 1. Ponadto czasami dodam --all do git push. git zdalny | xargs -l git push --all
Git umożliwia wykonanie tego połączenia w niestandardowym poleceniu. Wystarczy umieścić go w pliku, który 1) znajduje się na twojej ścieżce, 2) masz uprawnienia do wykonywania, oraz 3) o nazwie „git- [nazwa niestandardowa]” (np. Git-foo, git-push-all), a będziesz móc po prostu wpisać „git [nazwa niestandardowa]” (np. git foo, git push-all).
Andrew Martin,
2
@ Tony Na Ubuntu man xargsmówi , że opcja -ljest przestarzała, ponieważ nie ma jej w specyfikacji POISX.
wjandrea
2
@kyb W składni aliasu git !oznacza, że poniższe polecenie nie jest wewnętrznym poleceniem git, ale zewnętrznym poleceniem powłoki.
słaby
285
Utwórz allzdalny z kilkoma adresami URL repo do jego nazwy:
git remote add all origin-host:path/proj.git
git remote set-url --add all nodester-host:path/proj.git
git remote set-url --add all duostack-host:path/proj.git
Super fajna sztuczka! Jedyną wadą jest to, że nie porusza zdalnymi głowami. Musisz biec git fetch --allzaraz po wykonaniu takiego pushu.
madhead
8
Pan Torvalds (twórca Git) wspomina, że stosuje tę metodę, ale twierdzi, że jest ona jedynie dla wygody i nie oferuje żadnej technicznej korzyści marc.info/?l=git&m=116231242118202&w=2 „A na koniec nawet„ git push all ", który wypycha do wielu repozytoriów, w rzeczywistości połączy się raz dla każdego repozytorium, więc jest to naprawdę tylko skrót do robienia wielu operacji" git push ". Nie ma żadnej rzeczywistej przewagi technicznej, tylko wygoda."
Matt
14
Jednym z problemów związanych z tym podejściem jest to, że musisz dodawać nowe adresy URL do allzdalnego, gdy git remote | xargs -L1 git push --allbędą one dostępne, podczas gdy automatycznie będą zbierać nowe piloty.
Raffi Khatchadourian
2
Wskazówka: Aby nie trzeba pisać przy allwysyłaniu zatwierdzenia, po prostu użyj „origin” zamiast „all”:git remote set-url --add origin nodester-host:path/proj.git
Macabeus
zapomniałem ustawić adresy URL push, w przeciwnym razie git pushnie zaktualizuje wszystkich adresów URL. odpowiedź odpowiednio zaktualizowana
user3338098
88
Jeśli chcesz zawsze wypychać repo1, repo2 i repo3, ale zawsze wyciągaj tylko z repo1, ustaw zdalne „pochodzenie” jako
Napisałem funkcję krótkiego uderzenia, aby wcisnąć wiele pilotów za jednym razem. Możesz określić jednego pilota jako parametr, wiele pilotów oddzielonych spacjami lub nie podawać żadnego, który będzie przekazywał wszystkie piloty.
Można to dodać do pliku .bashrc lub .bash_profile.
function GitPush {
REMOTES=$@
# If no remotes were passed in, push to all remotes.
if [[ -z "$REMOTES" ]]; then
REM=`git remote`
# Break the remotes into an array
REMOTES=$(echo $REM | tr " " "\n")
fi
# Iterate through the array, pushing to each remote
for R in $REMOTES; do
echo "Pushing to $R..."
git push $R
done
}
Przykład: załóżmy, że twoje repo ma 3 piloty: rem1, rem2 i rem3.
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush
all
pilota do obsługi wszystkich pilotów, patrz: stackoverflow.com/a/18637593/802365Odpowiedzi:
Aby przekazać wszystkie gałęzie do wszystkich pilotów:
Lub jeśli chcesz przekazać określoną gałąź do wszystkich pilotów:
Zastąp
master
gałąź, którą chcesz wypchnąć.(Bonus) Aby utworzyć alias git dla polecenia:
Uruchomienie
git pushall
spowoduje teraz przekazanie wszystkich gałęzi do wszystkich pilotów.źródło
xargs: illegal option -- l
OSX.git remote | xargs -L1 git push
man xargs
mówi , że opcja-l
jest przestarzała, ponieważ nie ma jej w specyfikacji POISX.!
oznacza, że poniższe polecenie nie jest wewnętrznym poleceniem git, ale zewnętrznym poleceniem powłoki.Utwórz
all
zdalny z kilkoma adresami URL repo do jego nazwy:Więc po prostu
git push all --all
.Tak to wygląda w
.git/config
:źródło
git fetch --all
zaraz po wykonaniu takiego pushu.all
zdalnego, gdygit remote | xargs -L1 git push --all
będą one dostępne, podczas gdy automatycznie będą zbierać nowe piloty.all
wysyłaniu zatwierdzenia, po prostu użyj „origin” zamiast „all”:git remote set-url --add origin nodester-host:path/proj.git
git push
nie zaktualizuje wszystkich adresów URL. odpowiedź odpowiednio zaktualizowanaJeśli chcesz zawsze wypychać repo1, repo2 i repo3, ale zawsze wyciągaj tylko z repo1, ustaw zdalne „pochodzenie” jako
Skonfiguruj w wierszu polecenia:
Jeśli tylko chcesz ciągnąć od
repo1
, ale push torepo1
irepo2
dla konkretnej branżyspecialBranch
:Zobacz https://git-scm.com/docs/git-config#git-config-branchltnamegtremote .
źródło
git push
bez żadnych argumentów.Jako alternatywa interfejsu CLI do edycji pliku .git / config, możesz użyć następujących poleceń:
To samo
git push all --all
działa tutaj.Osiągnąłeś to samo co odpowiedź nr 1. Właśnie to zrobiłeś za pomocą wiersza poleceń zamiast surowej edycji pliku konfiguracyjnego.
źródło
Napisałem funkcję krótkiego uderzenia, aby wcisnąć wiele pilotów za jednym razem. Możesz określić jednego pilota jako parametr, wiele pilotów oddzielonych spacjami lub nie podawać żadnego, który będzie przekazywał wszystkie piloty.
Można to dodać do pliku .bashrc lub .bash_profile.
Przykład: załóżmy, że twoje repo ma 3 piloty: rem1, rem2 i rem3.
źródło
Możesz używać haczyków git - szczególnie
pre-push
: dodawaj pchnięcia nie pochodzące od.git/hooks/pre-push
.źródło