2009-07-05 9 views
5

Muszę opracować dwa projekty Django, które mają 90% tego samego kodu, ale mają pewne wariacje w kilku aplikacjach, szablonach i wewnątrz samego modelu.Najlepsza praktyka zarządzania wariantami projektu w Git?

Używam Git do rozproszonego sterowania źródłami.

Moje wymagania są następujące:

  • wspólny kod dla obu projektów jest rozwijany w jednym miejscu (środowisko programistyczne project1'S)

  • okresowo to jest połączone w środowisku programistycznym drugiego projektu (Project2)

  • odmiany nie są łatwo hermetyzowane w aplikacjach. (Np. Istnieją aplikacje. Takie jak „profile”, które różnią się między project1 i Project2 ale dla których nie ma też trwają wspólne Evolution)

  • zarówno Project1 i Project2 mieć repozytoria publicznych, tak, że mogę współpracować z innymi

  • Podobnie Project1 i Project2 powinny mieć serwery programistyczne, demonstracyjne, testowe i produkcyjne.

  • Jednak publiczne repozytorium nie znajduje się na tym samym serwerze w obu przypadkach. Tak więc, na przykład, kiedy rozwijam się w Project1, chcę być w stanie "popchnąć" do mojego serwera github, ale nie mam tam rzeczy Project2.

  • istnieją pliki, takie jak local_settings.py które są całkowicie różne od project1 i Project2, ale powinny być dzielone między wielu twórców każdego projektu

Więc co jest najlepszym sposobem zarządzania w tej sytuacji?

To, co wydawałoby się idealne, byłoby czymś w rodzaju "filtrowanego przyciągania", gdzie zamiast .gitignore mówiąc "ignoruj ​​ten plik w całości", mogę powiedzieć "zignoruj ​​ten plik podczas wyciągania z tego repo", którego nie mogłem zobaczyć coś podobnego do tego w dokumentacji, ale czy może być coś takiego?

Odpowiedz

0

Zrobiłbym trzecie repozytorium, w którym umieściłbym kod, który udostępniają Projekty. Następnie Project1 i Project2 będą miały własne repozytorium i będą mogły wycofać się z tego "wspólnego" trzeciego repo.

Myślę, że twoja idea "filtrowanego przyciągania" utrudni mantein.

+0

Cześć Macarse, myślałem o wspólnym repo, ale nie sądzę, że to wystarczające. (W dalszym ciągu będę musiał opracować (naprawienie błędu) w repozytoriach Project1 i Project2 i będę chciał wypchnąć wspólne poprawki z powrotem do wspólnego repo.) Problem polega na tym, że chcę częściowo odepchnąć, nie pozostawiając myśli, że repozytorium wspólne jest nieaktualne Czy to źle? – interstar

4

Przeniesienie wspólnego kodu do własnej biblioteki i uzależnienie od tych dwóch projektów. To nie jest kwestia kontroli wersji, ale kwestia ponownego użycia kodu, projektowania i eliminowania duplikacji.

+0

Witaj, Esko, to naprawdę nie jest biblioteka, to strona Django/Pinax, warianty muszą być rozproszone w różnych aplikacjach, nie jest łatwo zamknąć to, co jest często, lub co zmienia się w jednym miejscu: – interstar

+0

Podaj bardziej szczegółowe przykłady tego, co się zmieni.Nie znam aplikacji Django –

+0

Na przykład, możemy mieć aplikację "profile" użytkownika, gdzie szablon profilu żyje w "/templates/profiles/profile.html". Musimy zachować drobne różnice między tym plikiem w naszych dwóch projektach, ale nie chcemy dodawać pro file.html do .gitignore, ponieważ wtedy zmiany nie będą współdzielone między różnymi programistami pracującymi w ramach tego projektu. – interstar

4

Biorąc pod uwagę, że jest to strona Django/Pinax z wariantów rozsianych wokół wewnątrz kilku różnych zastosowań, nie polecam korzystania submodules.

Warianty należy zarządzać niezależnie w gałęzi projektu1 i gałęzi projektu2, eliminując potrzebę "filtrowania" wyniku gitignore.

Jeśli zidentyfikować kilka naprawdę wspólnych kodów, mogą zakończyć się w trzecim repo można następnie „poddrzewo połączyła” do project1 i project2 repozytoriach (rozumieniu subtree strategia seryjnej jest illustrated in this SO answer)

2

można korzystać z dwóch różne gałęzie git do rozwoju. Kiedy wprowadzasz zmiany w jednym wspólnym dla drugiego, po prostu przekręć je. Możesz także naciskać i przeciągać określone gałęzie, aby nikt nie musiał wiedzieć, że pracujesz nad nimi w tym samym czasie.

Powiązane problemy