2009-12-07 13 views
10

Utrzymuję dwa różne repozytorium git, które musi udostępniać niektóre pliki, i chciałbym, żeby zatwierdzenia w jednym repo ukazały się w drugim. Co to jest dobry sposób na bieżące utrzymanie w każdym repo?Jak mogę zsynchronizować pliki w dwóch różnych repozytoriach git (nie klonach) i zachować historię?

Byłem jednym z opiekunów na perlfaq (Github), a ostatnio wpadłem w rolę utrzymania podstawowej dokumentacji Perla, która jest również w git.

Na długo przed rozpoczęciem konserwacji perlfaq, żył w osobnym repozytorium kontroli źródła. Niedawno przekonwertowałem to na git. Okresowo jeden z perl5-porterów synchronizowałby udostępnione pliki w repozytorium perlfaq i repo perl. Odkąd przeszliśmy na git, byliśmy trochę leniwi, konwertując narzędzia i teraz to ja to robię. Na razie te dwie transakcje zostaną rozdzielone.

Obecnie, aby zsynchronizować nas na nowy (miesięcznie) wydaniu Perl, jestem prawie wstydzi się powiedzieć, że po prostu skopiować perlfaq * .pod plików w repo perlfaq i pokryjesz je w repo perla . Traci to historię itp. Dodatkowo, czasami ktoś wprowadza zmiany w tych plikach w repo perlu i w końcu nadpisuję je (tak, sprawdź git diff, idioto!). Pliki nie mają tych samych ścieżek w repozytorium, ale myślę, że to jest coś, co mogę zmienić.

W magicznym wszechświecie tęczy i kucyków chciałbym wyciągnąć przedmioty z repozytorium perlfaq i zastosować je w perlu repo, i na odwrót, tak aby historia i identyfikator commit odpowiadały w każdy.

  • Tworzenie łatki działa, ale jest to również praca dużo zarządzać
  • Git Submoduły wydają się tylko pracy, aby pociągnąć w całym repo zewnętrznego
  • Nie znalazłem coś zewnętrznymi plików SVN, ale że będzie działać w obu kierunkach i tak
  • Chciałbym tylko pobrać obiektów z jednego i wi odebrać je w drugiej

Co to jest dobrym sposobem, aby poradzić sobie z tym?

+0

Możliwy duplikat [Jak przenieść pliki z jednego repozytorium git na inny (nie klonować), zachowując historię] (http://stackoverflow.com/questions/1365541/how-to-move-files-from-one -git-repo-to-another-not-a-clone-preserving-history) – dr0i

+0

To naprawdę nie jest duplikat.Pytam o synchronizację z ciągłym rozwojem w dwóch różnych repo, zamiast jednorazowego ruchu. –

+0

OK, ale jak się wydaje nie ma prostej odpowiedzi na to pytanie, co z odpisywaniem skryptu w "duplikacie" i użyciem haka git do wykonania tego skryptu? – dr0i

Odpowiedz

1

Strategia łączenia podtrektów w połączeniu ze skryptem git subtree może pomóc tutaj.
Będzie działać na zasadzie push i pull.
Ciągle ma wartość issue with merges, chociaż Git1.7.0 naprawi to za pomocą opcji "-Xsubtree", ale nadal warto się nią zająć.

+0

To nie są poddrzew, więc wygląda na to, że to nie zadziała. Wybrane pliki z jednego katalogu w jednym repo pokazują się w innym katalogu w innym repo. Ten inny katalog zawiera wiele plików, które nie powinny zostać przeniesione do pierwszego repozytorium. –

-2

Zakładam, że chcesz historię perlfaq w perl repo. Chciałbym to zrobić (w Perl repo)

git remote add perlfaq git://perlfaq... # real uri 
git checkout perlfaq/master -b perlfaq 
git checkout master # or whatever 
git merge perlfaq 

Wbrew powszechnemu przekonaniu git robi nie mieć wspólną historię do wykonywania seryjnej. Wiem, że scalałem 3+ repo w ten sposób w regen2. To może być bolesne za pierwszym razem. Ale po tym nie powinno być zbyt bolesne . Niestety możesz scalić tylko jednokierunkowo, ale prawdopodobnie możesz wybrać łatki z perl repo na perlfaq, jeśli chcesz.

+1

Nie chcę scalać dwóch repozytoriów. Chcę scalić wybrane pliki (obiekty) w jednym repo na inny. –

Powiązane problemy