2009-10-14 13 views
7

Zastanawiam się, czy są jakieś inne czynniki do rozważenia dla standardowej praktyki używania Subversion.Standardowe praktyki dla Subversion

Nieliczni mam to: struktura

  • Katalog/tagów/tułowia i/oddziałów

  • Cała praca odbywa się w bagażniku, który nie łamie funkcjonalności potrzebne

  • odgałęzienia w wprowadzono istotne zmiany strukturalne lub dodano funkcję, która przerywa podstawową funkcjonalność (zależnie od preferencji)

  • Tagi zawiera stabilnych wydań

  • Zawsze wykonać aktualizację przed rozpoczęciem pracy

  • dokonać zmian na koniec dnia /, gdy funkcja została dodana

  • Commit notatki zawierać odpowiedni opis

  • Zatwierdź na podstawie funkcji - nie zatwierdzaj zbiorczo

Mam sprzeczne umysły na temat reguły, którą należy zatwierdzić pod koniec dnia i kiedy funkcja została dodana. Pod koniec dnia mówię, że repozytorium jest tak aktualne, jak to tylko możliwe. Jednak kod na koniec dnia może być funkcją niepełną/przerwaną. Jednak popełnienie tylko po zakończeniu funkcji może spowodować nieaktualność/konflikty?

Byłbym wdzięczny za krytykę któregokolwiek z moich pomysłów i któregokolwiek z pomysłów, które przeoczyłem.

Dzięki!

+1

czy to powinno być wiki? –

Odpowiedz

5

Powinieneś zawsze zrobić aktualizację przed popełnieniem, aby zapobiec ewentualnym konfliktom z innymi zobowiązaniami innych osób i bolesnymi fuzjami.

Ponadto, każde zatwierdzenie powinno zawierać coś znaczącego, takie jak poprawka lub nowa funkcja, lub ulepszenie istniejącego, coś, co może być znaczące opisane w komunikacie dziennika. Narzędzie do kontroli źródła nie jest narzędziem do tworzenia kopii zapasowych, dlatego należy unikać zatwierdzania "na koniec dnia" bez znaczącej zawartości.

+3

"Powinieneś zawsze robić aktualizację przed popełnieniem, aby zapobiec możliwym konfliktom z innymi zobowiązaniami innych osób i bolesnymi fuzjami." Subversion nie pozwoli Ci zatwierdzić, jeśli jeden z plików został zmieniony na serwerze. Zamiast tego ostrzeże Cię, że twoja kopia robocza jest nieaktualna. – Powerlord

+1

Koniec dnia commits są tym, co półki lub wip (w toku) gałęzie są dla – CaffGeek

+1

@R. Bemrose: jasne, ale wyraźna aktualizacja pomaga sprawdzić, czy nastąpiły jakieś modyfikacje i przygotować się na ewentualne konflikty lub awarie. –

4

Jeśli jesteś nowym użytkownikiem SVN, dobrym (darmowym) zasobem jest SVN Book (kopie z martwych drzew można również kupić od O'Reilly).

3

"Jednak zatwierdzenie tylko po zakończeniu operacji może spowodować nieaktualność/konflikty?"

Jeśli zmiana jest tak duża, że ​​martwisz się o to, prawdopodobnie powinnaś się rozgałęzić. Umożliwiłoby to wykonywanie mniejszych zatwierdzeń w przypadku przyrostowej pracy bez przerywania kompilacji i pozostawienia czystej historii po scaleniu w trunk.

4

Jeśli „cecha” będą wymagać więcej niż kilka (4-6) godzin do zakończenia, chciałbym albo

  • podzielić „cecha” na podzadania, które można wykonać w ciągu kilku godzin, a sprawdzane do kontroli źródła
  • utworzyć oddział
  • obu powyższych
0

Istnieje wiele różnic w stosunku do przepływów pracy kontroli kodu źródłowego. Ten, którego używamy, jest rozszerzeniem tego, co opisujesz w swoim poście. Twój przepływ pracy jest wystarczająco dobry dla drobnych modyfikacji, ale nie, jeśli masz kilka zespołów pracujących nad różnymi problemami o znacznej złożoności.

Co robimy, to rozgałęzienie dla każdej drużyny, niż zespół może zaangażować się w zespół (projekt). Każdy zespół jest również odpowiedzialny za synchronizowanie gałęzi zespołu z pnia poprzez połączenie pnia do gałęzi, najlepiej po każdym zatwierdzeniu do pnia. Po zakończeniu projektu oddział jest ponownie łączony z powrotem w trunk (ponownie zintegrowany) i usuwany.

Podejście oddział - scalanie ... seryjnej - scalić z powrotem - usunięcie działa dobrze dla nas

3

będę próbować popełnić tak często, jak to możliwe. Aby na to pozwolić, musisz upewnić się, że kod, który napiszesz, nie jest jeszcze użyty lub jest taki, że wszystkie testy mijają. Jeśli pozostaniesz w jednym z tych dwóch trybów (ten drugi jest znacznie lepszy od poprzedniego), nie powinieneś martwić się tymi dużymi okresami, kiedy nie możesz zatwierdzić.

TDD bardzo pomaga w tym zakresie.

2

Oddziały są dobrym pomysłem na dokonywanie dużych, potencjalnie przełomowych zmian. Jeśli serwer jest aktualizowany w tym samym czasie, od czasu do czasu można połączyć serwer z odgałęzieniem, aby zaktualizować gałąź.

Zatwierdź zestaw atomowy powiązanych zmian. Nie rób dużego zobowiązania z niezwiązanymi zmianami. To znacznie ułatwia śledzenie określonych zmian.

Możesz mieć wiele kas z tego samego źródła - przydatne, jeśli eksperymentujesz z niepowiązanymi zmianami.

Unikaj podawania złamanego kodu lub kodu z nieudanymi testami lub z innymi nierozstrzygniętymi problemami.

6

Nieco więcej uwagi: (próbowałem nie powtarzać tego, co już zostało powiedziane ..)

branżach:

  1. Poza rozgałęzienia dla dużych kawałków rozwoju cech wymienionych powyżej, można rozgałęziać kiedy musisz pracować nad poprawkami po wydaniu, podczas gdy praca równoległa postępuje na linii głównej/pniu.

  2. Odwrotne scalanie regularnie, jeśli korzystasz z oddziałów, które żyją długo, bez łączenia się w główny projekt. Pomoże to zachować synchronizację z rozwojem pnia i zminimalizować komplikacje związane z połączeniem z Wielkim Wybuchem.

  3. Zwróć uwagę na sposób, w jaki nazywasz swoje gałęzie. Staramy się nazwać gałęzie po tym, jak kamień milowy jest oparty. Pomaga, gdy potrzebujesz szybkich różnic lub raportów, a nawet podczas przeglądania czegoś, jeśli nazwy są oczywiste.

  4. Ponieważ w SVN gałąź jest tanim egzemplarzem, staramy się zawsze rozgałęzić w katalogu głównym projektu (jeśli jest to sam folder, to gałąź będzie wyłączona z pnia) - to pozwoli uniknąć późniejszego zamieszania który rozgałęział się w miejscu i unikał konieczności uruchamiania poleceń, aby go znaleźć. A jeśli potrzebujesz wypłaty materiałów z oddziału, wszystko, co znajduje się pod odgałęzieniem, będzie Ci dostępne - jeśli będziesz tego potrzebował.

Commits:

  1. zagłosuję za popełnia często iw logiczne części, dzięki czemu można powiązać odpowiednie pliki przez wspólny popełnić wiadomość. Jest to świetne rozwiązanie, gdy chcesz mieć dziennik, a raportowanie odbywa się w porcjach, a wszystkie pliki są porządnie powiązane z odpowiednimi komentarzami.

  2. Głosuję za częstym popełnianiem, jeśli nie codziennie. To jest sposób myślenia. Gdy zauważysz korzyści wynikające z wcześniejszych zatwierdzeń (oczywiście po sprawdzeniu przez programistów podstawowych błędów kompilacji i uruchomieniu testów jednostkowych w ich skrzynce dev), z przyjemnością znajdziesz te wczesne błędy/problemy z kompilacją. Jeśli planujesz uruchamiać nocne kompilacje lub korzystać z ciągłego narzędzia integracyjnego, lepiej byłoby, gdyby ludzie robili to tak wcześnie, jak to tylko możliwe, aby uzyskać wgląd w zintegrowane strumienie pracy i przeprowadzić testy na nich.

Tagi:

  1. paznokci uwolnienie konwencje nazewnictwa - choć wydaje się to banalne to pomaga na dobre nazwy znacznika. Upewnij się również, że komentarze do commit dla tagów dokładnie określają, dlaczego tagujesz tę wersję repozytorium. Oznaczamy tylko wtedy, gdy budujemy kamienie milowe, dlatego w naszym przypadku mapujemy komunikaty zatwierdzania tagów z ciągłym numerem kompilacji (tag budowy rejsowej), którego używamy dla danej kompilacji. Pomaga również w określeniu schematu numerowania wersji i pól, dzięki czemu można ich użyć do tagów.
0

Niedawno uczestniczyłem w doskonaleniu technik zarządzania konfiguracją oprogramowania (SCM) w firmie, w której pracuję. Odkryliśmy, że zarówno "rozgałęzienia do rozwoju", jak i "rozgałęzienia do wydania" działają raczej dobrze.

Dobra książka na temat wzorców SCM/standardowych procedur, które uważam za pomocne, to "Wzorce zarządzania konfiguracją oprogramowania: efektywna praca zespołowa, praktyczna integracja Berczuka i Appletona".

Powiązane problemy