2013-01-21 18 views
6

Mam dwa ściśle powiązane projekty (A i B), które mają wspólny kod źródłowy (S). Obie zostaną wydane w tym samym czasie, a wydana wersja powinna zawsze używać tej samej wersji wspólnego kodu. Współdzielony kod S będzie często zmieniany.Udostępnianie kodu między dwoma projektami w git

Tak będzie wyglądał kiedyś tak:

  • Wersja 1 używa wersji S 1
  • B wersja 1 wykorzystuje wersja S 1
  • wersja 2 korzysta z wersji S 2
  • B wersja 2 używa S wersji 2

Jaki jest najlepszy sposób na obsłużenie tego z git (i/lub niektórych narzędzi, które używają git)?

Oto moje obawy:

  • Projekt A i Project B powinna być w oddzielnych repozytoriów (są one powiązane, ale nie chcą mieć swobodny przepływ kodu między nimi)
  • Jeśli współdzielony kod jest aktualizowany w jednym projekcie, powinien być automatycznie aktualizowany w innym (nie chcę mieć sytuacji, gdy programista zapomniał coś zrobić i zakończył posiadanie przestarzałej wersji udostępnionego kodu).

Jak rozumiem jedną z odpowiedzi kanonicznych jest "użyj git submodule". Jednak przeczytałem o tym około criticism. Czułem, że jest bardziej zaprojektowany do dzielenia bibliotek, które rzadko się zmieniają.

Innym podejściem, które czytam używał git subtree

I istnieje kilka mniej popularnych metod: Repo, GitSlave

Jaki byłby najlepszym podejściem do obsługi tego typu dzielenia kodu?

+0

linki nie są dobre, naprawiłem podtekst, ale nie mogę odgadnąć innych (użyj submodule i krytyki git) – CharlesB

+0

Dzięki. Naprawiłem wszystkie linki poza jednym. Jeśli wstawię go, z jakiegoś powodu został on podłączony do niewłaściwego linku. –

+0

Możesz to naprawić bezpośrednio w kodzie kodowania – CharlesB

Odpowiedz

3

Bardzo prostym rozwiązaniem byłoby użycie trzech repozytoriów: A, B i S. Repozytoria projektu A i B miałyby sprawdzić w swoich plikach Makefile, aby sprawdzić, czy programista używa najnowszego kodu przekazanego do repozytorium, na przykład

check: 
     git fetch /path/to/S master:tip 
     git branch --contains tip | grep -q master 

Drugi wiersz będzie miał niezerową wartość zwracaną, jeśli programista ma starą wersję współużytkowanego repozytorium. Spowoduje to przerwanie kompilacji z błędem. Programista może następnie ręcznie uruchomić repozytorium, aby kontynuować.

Zamiast sprawdzać główną gałąź S, można również sprawdzić inną gałąź, która jest zdefiniowana jako ta, której deweloperzy powinni używać.

Powiązane problemy