[GIT] użycie branchów jako "configów" do programu

Witam,

Piszę aktualnie program w Javie i mam pytanie dotyczące systemu kontroli wersji GITa - wiem że to nie problem programistyczny, jednak do żadnego innego działu mi to nie pasowało, a programiści jak wiadomo mają duże doświadczenie z GITem lub innymi systemami kontroli wersji.

 

Chciałbym, aby moja aplikacja działała dla paru podmiotów, dajmy na to sklepów:

 sklepA;

 sklepB;

 sklepC;

 

Główne działanie programu dla każdego sklepu jest takie same - zmiany pomiędzy sklepami dotyczą tylko jednego folderu, dajmy na to “config” - w którym przechowuję schemy dla danego sklepu - każdy ma inną, ale program poprawnie to przetwarza i co najważniejsze - to działa.

 

Jednak teraz zaczynają się schody: wymyśliłem sobie, że wygodnie byłoby (skoro każdy sklep ma taki sam program główny a różni się wyłącznie schemami) utworzyć sobie w GIT’cie twór następujący:

  1.   Branch master  przechowuje mi program główny, który na bieżąco rozwijam i w nim “grzebię”
  2.   Branch  sklepA przechowuje folder “config” ze schemami do sklepu A
  3.   Branch  sklepB  przechowuje folder “config” ze schemami do sklepu B
  4.   Branch  sklepC  przechowuje folder “config” ze schemami do sklepu C

Chciałbym, aby branche:  sklepA, sklepB, sklepC posiadały na bieżąco zaktualizowaną podstawę (czyli  master ) - gdy tylko wrzucę Commita na master , na branchu sklepA automatycznie zaciągnie się najnowsza wersja programu.

 

Innymi słowami: klonując branch sklepA ściąga mi się cały projekt, razem najnowszą wersją Mastera.

 

Wydaje mi się, że można do tego użyć modułów zależnych, jednak jeszcze nigdy się tym nie bawiłem i jak na razie wiem, że istnieją :slight_smile: Być może są jakieś inne metody na synchronizację branchów z masterem?

Oczywiście można rebase’ować mastera z brancha - lub po prostu mergować brancha sklepA z master em - ale zależy mi na tym, aby każdy klonujący branch sklepA dostał od razu najnowszą wersję programu bazowego .

 

Najlepiej, gdyby dało się to zrobić w obrębie jednego repo. 

 

Być może ktoś z Was używał branchy w ten sposób i mógłby doradzić, w jaki sposób to najlepiej zrealizować? 

 

Pozdrawiam :slight_smile:

Do tego co chcesz zrobić nie służy system zarządzania wersjami (Versioning System), tylko ciągłej integracji (Continuous Integration). Pewnie dlatego ci tak topornie idzie - wbijanie gwoździ wiertarką choć możliwe do wygodnych nie należy. Poczytaj o Jenkins.

narzędzia CI(Continuous Integration), w twoim przypadku, takie jak Jenkins mogą być nie potrzebne;

Wystarczy Ci mały skrypt - bash, perl, plik bat, ant czy maven zależnie od tego w czym czujesz się mocny.

 

Możesz to zrobić nawet w oparciu o jedno repo, ale na pewno nie o wiele branchy - nie prościej Ci będzie trzymać konfiguacje dla każdego w osobny katalogu i odpowiedni z nich kopiować ? automatycznie oczywiście.

Mercurial ma możliwość dopięcia hooków na akcje pulla czy pusha, git pewnie też ma;

a jak nie to wykonuje się petlę działającą co np.5 min, która sprawdza czy są nowe commity i wtedy pobierająca nowości i tam też może być wykonany skrypt.

 

jak nie chcesz trzymać wszystkiego w różnych katalogach - choć jest to dość wygodne, to użyć subrepozytoriów/submodulów.

Trzymanie tych danych w branch wymagało by od ciebie mergowania branchy master -> sklepN, co nie zawsze można (nie powinno) się automatyzowac;

Podejrzewam, że wystarczy odpowiednio skonfigurować narzędzia budujące trzymane w osobnych katalogach dla róznych wersji sklepu.