Mamy konfigurację dwupoziomową.Automatycznie utrzymuj wtórne repo zsynchronizowane z pierwotnym repo?
Mamy podstawowe repozytorium (zwane "podstawowym" poniżej).
I repozytorium wtórne (zwane „wtórne” poniżej), który został stworzony w taki sposób:
$ git clone --bare --shared $REPO_A/primary secondary.git
Osoby pracujące na wtórnym repozytorium zobaczyć gałęzie, które wywodzi się z pierwotnego repozytorium jak tylko czytać, ale oprzeć własną rękę odgałęzia się z tych oddziałów.
Chcemy zsynchronizować wtórne repozytorium z głównym repozytorium raz dziennie.
tj. Chcemy commits i nowe gałęzie, które zostały wypchnięte do podstawowego, aby stały się widoczne dla ludzi pracujących poza drugim repozytorium (następnym razem, gdy wykonają pull).
Nie chcemy, aby było to symetryczne, tzn. Aktywność w repozytorium wtórnym nie będzie widoczna dla osób pracujących poza podstawowym repozytorium.
Idealnie chciałbym uruchomić zadanie cron, które działa na komputerze z gołym wtórnym repozytorium, które w jakiś sposób pobiera nowe dane z podstawowego i automatycznie włącza je do drugorzędnego.
Miałem nadzieję, że może być prosty sposób na zrobienie tego (i mam nadzieję, że ktoś tutaj powie mi, że jest).
Gdybym miał napisać skrypt, aby to zrobić, by to zrobić:
Tworzenie nowego klona wtórnym.
$ git clone $REPO_B/secondary $ cd secondary
Zdobądź wszystkie swoje oddziały.
$ git branch -r | sed 's?.*origin/??'
Uzyskaj wszystkie oddziały w głównym repozytorium.
$ git ls-remote --heads $REPO_A/primary | sed 's?.*refs/heads/??'
Dla każdej głównej gałęzi, dla których nie ma już odpowiednią gałąź wtórnego:
$ git fetch $REPO_A/primary $BRANCHNAME:$BRANCHNAME $ git push origin $BRANCHNAME:refs/heads/$BRANCHNAME
Dla każdej głównej gałęzi, dla których mam już odpowiedni oddział wtórnego:
$ git checkout -b $BRANCHNAME --track origin/$BRANCHNAME $ git pull $REPO_A/primary $BRANCHNAME $ git push
Jako, że jestem nowy w git, nie byłbym zaskoczony, gdyby mi się nie udało o rozważyć pewne podstawowe kwestie?
I jak powiedziałem mam nadzieję, że jest prostszy sposób robienia tego, to znaczy, że ktoś mówi: "Och, nie rób tego wszystkiego, po prostu rób ...".
To wygląda na to, co chcę. Dzięki za linki - od nich dostałem się: '$ cd secondary.git ; git --bare fetch origin '+ refs/heads/*: refs/heads/*' ' Jako doświadczony haker UNIX zawsze lubię naprawdę rozumieć, w czym jestem. Jednak większość dokumentacji Git wydaje się być naprawdę proste przypadki Alicji i Boba, a wszystko, co jest bardziej złożone, to styl książki kucharskiej, czy możesz polecić dobrą książkę w wersji "dogłębnej" lub dokumentację internetową dla Git? –
@George: tak: http://www.newartisans.com/2008/04/ git-from-th e-bottom-up.html, chociaż http://stackoverflow.com/questions/315911/git-for-beginners-the-definitive-practical-guide oferuje wiele innych interesujących linków. http://tom.preston-werner.com/2009/05/19/the-git-parable.html też jest fajny. – VonC
Zwróć też uwagę, że te specyfikacje ref znajdują się w Twojej konfiguracji git, więc z 'fetch = + refs/*: refs/*', musisz po prostu wpisać 'git fetch' – Dustin