pull / push z wielu zdalnych lokalizacji
W skrócie: czy istnieje sposób, aby Git repo push to and pull from a list of remote repos (a nie pojedynczy "origin")?
Długi: Często mam sytuację, gdy rozwijam aplikację na wielu komputerach, z różnymi połączeniami-powiedzmy laptop podczas transportu, komputer "A", gdy jestem w określonym miejscu, a inny komputer" B", gdy jestem na innym. Ponadto laptop może mieć łączność tylko z "A" lub "B" , a czasami jedno i drugie.
Chciałbym, aby git zawsze "wyciągał" i "pchał" do wszystkich komputerów, z którymi może się obecnie połączyć, więc łatwiej jest przeskoczyć z jednej maszyny do drugiej i kontynuować płynną pracę.
14 answers
Możesz skonfigurować wiele zdalnych repozytoriów za pomocą polecenia git remote
:
git remote add alt alt-machine:/path/to/repo
Aby pobrać ze wszystkich skonfigurowanych pilotów i zaktualizować gałęzie śledzenia, ale nie połączyć się z głową, wykonaj:
git remote update
Jeśli nie jest obecnie podłączony do jednego z pilotów, zajmie to trochę czasu lub wyrzuci błąd i przejdzie do następnego. Będziesz musiał ręcznie scalić z pobranych repozytoriów lub wybrać cherry-pick, w zależności od tego, jak chcesz zorganizować zbieranie zmian.
Aby sprowadzić mistrza gałąź z alt i wciągnij ją do bieżącej głowy, zrób:
git pull alt master
Więc w rzeczywistości git pull
jest prawie skrótem od git pull origin HEAD
(w rzeczywistości wygląda w pliku konfiguracyjnym, aby to określić, ale masz pomysł).
Aby wysyłać aktualizacje, musisz to zrobić ręcznie dla każdego repo. Myślę, że push został zaprojektowany z myślą o obiegu pracy z centralnym repozytorium.
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-07-25 21:19:56
Wykonywanie tego ręcznie nie jest już konieczne , w nowoczesnych wersjach git
! Zobacz też Malwina'S rozwiązanie, poniżej.
Tutaj:
git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>
Oryginalna odpowiedź:
To coś, czego używam od dłuższego czasu bez złych konsekwencji i zasugerował Linus Torvalds na liście dyskusyjnej git.
Rozwiązanie Araqnid jest właściwym rozwiązaniem do wprowadzenia kodu do twojego repozytorium… ale kiedy, podobnie jak ja, masz wiele równoważnych autorytatywnych strumieni upstream (niektóre z moich bardziej krytycznych projektów klonuję zarówno do prywatnego upstream, GitHub, jak i Codaset), może to być ból, aby wcisnąć zmiany do każdego z nich, każdego dnia.
W skrócie, git remote add
wszystkie Twoje piloty osobno... a następnie git config -e
i dodaj scalony pilot. Zakładając, że masz to repozytorium config
:
[remote "GitHub"]
url = [email protected]:elliottcable/Paws.o.git
fetch = +refs/heads/*:refs/remotes/GitHub/*
[branch "Master"]
remote = GitHub
merge = refs/heads/Master
[remote "Codaset"]
url = [email protected]:elliottcable/paws-o.git
fetch = +refs/heads/*:refs/remotes/Codaset/*
[remote "Paws"]
url = [email protected]:Paws/Paws.o.git
fetch = +refs/heads/*:refs/remotes/Paws/*
... aby utworzyć merged-remote dla "Paws"
i "Codaset"
, Mogę dodać po wszystkim te:
[remote "Origin"]
url = [email protected]:Paws/Paws.o.git
url = [email protected]:elliottcable/paws-o.git
Kiedy już to zrobię, kiedy git push Origin Master
, będzie naciskać kolejno na Paws/Master
i Codaset/Master
, ułatwiając życie.
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-05-23 12:02:48
Najnowsza wersja git (stan na październik 2012) pozwala ci to zrobić z linii poleceń:
git remote set-url origin --push --add user1@repo1
git remote set-url origin --push --add user2@repo2
git remote -v
Następnie git push
naciśnie na user1@repo1, a następnie naciśnie na user2@repo2. Zostaw --push
jeśli chcesz również być w stanie git pull
od nich też.
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-02-04 04:54:34
Dodałem te aliasy do mojego~/.bashrc:
alias pushall='for i in `git remote`; do git push $i; done;'
alias pullall='for i in `git remote`; do git pull $i; done;'
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
2010-12-25 03:06:25
Możesz dodać piloty za pomocą:
git remote add a urla
git remote add b urlb
Następnie zaktualizować wszystkie repos zrobić:
git remote update
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-07-16 00:27:26
Oto mój przykład ze skryptem bash wewnątrz .gitconfig
sekcja alias
[alias]
pushall = "!f(){ for i in `git remote`; do git push $i; done; };f"
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
2012-11-30 01:20:52
Dodałem dwa oddzielne pushurl do zdalnego "origin" w .plik git congfig. Kiedy uruchamiam git push origin "branchName"
, to będzie przebiegać i naciskać na każdy adres url. Nie jestem pewien, czy jest łatwiejszy sposób, aby to osiągnąć, ale to działa dla mnie, aby wcisnąć do kodu źródłowego Github i wcisnąć do mojego.kod źródłowy visualStudio w tym samym czasie.
[remote "origin"]
url = "Main Repo URL"
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = "repo1 URL"
pushurl = "reop2 URl"
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-01 17:11:56
Będziesz potrzebował skryptu, aby je zapętlić. Git doesn 't a provide a" push all."Teoretycznie można wykonać push w wielu wątkach, ale natywna metoda nie jest dostępna.
Fetch jest jeszcze bardziej skomplikowany i polecam zrobić to liniowo.
Myślę, że najlepszą odpowiedzią jest mieć raz Maszyny, że każdy robi push / pull do, jeśli to w ogóle możliwe.
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-05-11 18:19:59
Pozwoliłem sobie rozszerzyć odpowiedź z nona-urbiz; po prostu dodaj to do swojego ~/.bashrc:
git-pullall () { for RMT in $(git remote); do git pull -v $RMT $1; done; }
alias git-pullall=git-pullall
git-pushall () { for RMT in $(git remote); do git push -v $RMT $1; done; }
alias git-pushall=git-pushall
Użycie:
git-pullall master
git-pushall master ## or
git-pushall
Jeśli nie podasz żadnego argumentu branch dla git-pullall, to ściąganie z niestandardowych pilotów nie powiedzie się; pozostawić to zachowanie tak, jak jest, ponieważ jest analogiczne do git.
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-05-23 11:47:30
Do aktualizacji pilotów (tj. przypadku pull
), rzeczy stały się łatwiejsze.
Twierdzenie Linusa
Niestety, nie ma nawet sposobu, aby sfałszować to z Gitem alias.
W podanym wpisie na liście dyskusyjnej Git w odpowiedź elliottcable nie jest już prawdziwa.
git fetch
nauczyłem się parametru --all
gdzieś w przeszłości pozwalającego pobrać wszystkie piloty za jednym razem.
Jeśli nie wszystkie są wymagane, można użyć przełącznika --multiple
w celu określenia wielu pilotów lub grupy.
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-05-23 11:55:00
Dodaj alias do globalnego gitconfig (/home/user/.gitconfig) z poniższym poleceniem.
git config --global alias.pushall '!f(){ for var in $(git remote show); do echo "pushing to $var"; git push $var; done; }; f'
Po zatwierdzeniu kodu mówimy
Git push
Aby domyślnie wcisnąć do origin. Po powyższym aliasie możemy powiedzieć
Git pushall
I Kod zostanie zaktualizowany do wszystkich pilotów, w tym origin remote.
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-12-15 11:03:04
Dodawanie pilota all
staje się trochę żmudne, ponieważ musisz skonfigurować każdy komputer, którego używasz.
Również bash
i git
aliasy pod warunkiem, że wszystkie zakładają, że masz wypchnie do wszystkie piloty.
(Ex: mam Widelec sshag
, który utrzymuję na GitHubie i gitlab. Mam dodanego upstream remote, ale nie mam uprawnień, aby go wcisnąć.)
Oto git
alias , który wypycha tylko do pilotów z adresem URL push, który zawiera @
.
psall = "!f() { \
for R in $(git remote -v | awk '/@.*push/ { print $1 }'); do \
git push $R $1; \
done \
}; f"
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-10-16 22:15:45
Chciałem pracować w VSO / TFS, a następnie publicznie wcisnąć GitHub, gdy będzie gotowy. Początkowe repo utworzone w prywatnym VSO. Kiedy przyszedł czas na dodanie do Githuba zrobiłem:
git remote add mygithubrepo https://github.com/jhealy/kinect2.git
git push -f mygithubrepo master
Zadziałało jak mistrz...
Aby sprawdzić stan zdrowia psychicznego, wydaj "git remote-v", aby wyświetlić listę repozytoriów powiązanych z projektem.
C:\dev\kinect\vso-repo-k2work\FaceNSkinWPF>git remote -v
githubrepo https://github.com/jhealy/kinect2.git (fetch)
githubrepo https://github.com/jhealy/kinect2.git (push)
origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (fetch)
origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (push)
Prosty sposób, zadziałał dla mnie... Mam nadzieję, że to komuś pomoże.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
2018-06-22 03:02:42
Dodawanie nowego pilota
git remote add upstream https://github.com/example-org/example-repo.git
git remote -vv
Pobieranie z wielu lokalizacji
git fetch --all
Push to locations
git push -u upstream/dev
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-05-04 09:15:50