2017-10-12 85 views
10

Chcę uruchomić coś w tle, które zasadniczo robi git pull --rebase, gdy zmiany w moim oddziale zdalnego. Najczęściej pracuje cicho w tle, jeśli nie ma konfliktów. W przypadku konfliktu po prostu pozostawi mnie w fazie rebase-resolve-conflict i dopóki nie rozwiążę wszystkiego, na co czeka. Jak mam to zrobic? Czy istnieje istniejące oprogramowanie, które już to robi?Git: Jak automatycznie zaktualizować mój lokalny oddział, gdy zmiana nastąpi w oddziale zdalnego śledzenia?

+2

Trzeba by dodać hak do zdalnego repozytorium lub uruchomić zadanie co x minut lokalnie. –

+0

Na którym serwerze git jest przechowywane twoje repozytorium? Github, Gitlab, Bitbucket, ..? –

+0

@OrtomalaLokni: Dlaczego to ma znaczenie? Zadaję pytanie ogólnie dla każdego zdalnego serwera Git ... – pathikrit

Odpowiedz

5

Jeśli nie masz kontroli nad zdalnym repozytorium, jednym rozwiązaniem jest użycie crontab uruchomić okresowo git fetch a może nawet git pull --rebase jak proponujesz. Dokładna komenda do wyboru zależy od twojego przepływu pracy, osobiście wolę używać git fetch, ponieważ mogę zdecydować, kiedy i jak scalić lub zmienić bazę.

Aby uruchomić komendę okresowo uruchomić:

crontab -e 

I dodać linię takich jak:

* * * * * git -C PATH_TO_LOCAL_REPO fetch 

lub

* * * * * git -C PATH_TO_LOCAL_REPO pull --rebase 

To będzie uruchomić polecenie git co minut z telefonem uprawnienia użytkownika.

Jeśli chcesz zastosować polecenie git na liście repozytorium, można również dodać linię:

* * * * * /home/myself/scripts/git-refresh.sh 

gdzie git-odświeżania skrypt zastosowania na wszystkich repozytoriów.

Opcja -C umożliwia uruchomienie polecenia git bez zmiany katalogu. Z man page:

-C <path>

Run jakby git rozpoczęła się w zamiast bieżącego katalogu roboczego.

+0

Ale muszę dodać to ręcznie dla każdego repo na pulpicie! Mam prawdopodobnie setki transakcji repo na mojej maszynie. Jak mogę to zrobić w mniej ręczny sposób, np. Uruchomiam skrypt taki jak 'git-keep-fresh.sh &' w terminalu w katalogu głównym projektu git. Po drugie, w jaki sposób zajmuje się on drugą częścią mojego pytania dotyczącego konfliktów itp. – pathikrit

+0

Zaktualizowałem swoją odpowiedź wziąć pod uwagę aspekt wielorepozytoryjny. W przypadku rozwiązywania konfliktów czasami musi być ręczna, w każdym przypadku nie można jej zautomatyzować. –

+0

@pathikrit: zauważ, że początkowe pytanie wymagało znalezienia rozwiązania dla jednego repo. Cronjob pozwoli ci uruchomić dowolny skrypt, który chcesz. Możesz mieć skrypt, który skanuje twoje katalogi pod kątem ewentualnych repozytoriów git (punktem początkowym może być: 'find $ HOME-name .git'), lub możesz przekazać jawną listę repozytoriów (' cat $ HOME/.repositories') . – LeGEC

0

Ten proces nazywa się synchronizacją widelcem

Sync widelec z repozytorium, aby utrzymać ją na bieżąco z górnej repozytorium. Niestety GitHub nie ma żadnej funkcji automatycznej synchronizacji. Dodanie zadania crona na serwerze jest jednak trywialne, więc nie trzeba tego robić ręcznie. Na przykład:

cd/srv/mirrorrepo; git fetch upstream master; pochodzenie Push git mistrz

Po Wtyczka może pomóc

https://github.com/trilbymedia/grav-plugin-git-sync