Trochę googlowałem i nie mogłem znaleźć dobrego przewodnika po SVN dla „początkujących” , raczej nie w znaczeniu „jak używać poleceń”; Jak mogę kontrolować swój kod źródłowy?
Chciałbym wyjaśnić następujące tematy:
- Jak często się angażujesz? Tak często, jak ktoś wciska Ctrl+ s?
- Co to jest gałąź i co to jest tag i jak nimi sterujesz?
- Co trafia do SVN? Tylko kod źródłowy, czy też udostępniasz tutaj inne pliki? (Nie uważane za wersjonowane pliki ...)
Nie mam pojęcia, jaka jest gałąź i tag, więc nie wiem, do czego służy, ale przypuszczam, że przesyłasz rzeczy do bagażnika, a kiedy robisz dużą kompilację, przenosisz ją do gałęzi? Więc co jest uważane za główną wersję w tym przypadku?
svn
version-control
Filip Ekberg
źródło
źródło
Odpowiedzi:
Książka Subversion jest doskonałym źródłem informacji na temat strategii dla układania repozytorium, rozgałęzienia i znakowanie.
Zobacz też:
Czy kontynuujesz rozwój w gałęzi lub w pniu
Strategie rozgałęziania
źródło
Zadałem sobie te same pytania, kiedy zaczęliśmy wdrażać Subversion tutaj - około 20 programistów zajmujących się 4-6 projektami. Nie znalazłem ani jednego dobrego źródła z „odpowiedzią”. Oto kilka części tego, jak rozwinęła się nasza odpowiedź w ciągu ostatnich 3 lat:
- popełniać tak często, jak jest to przydatne; naszą praktyczną zasadą jest zatwierdzanie za każdym razem, gdy wykonałeś wystarczająco dużo pracy, że byłoby problem z ponownym wykonaniem tego, jeśli modyfikacje zostałyby utracone; czasami zatwierdzam co około 15 minut, innym razem mogą to być dni (tak, czasami napisanie 1 linii kodu zajmuje mi dzień)
- używamy oddziałów, jak sugerowała jedna z wcześniejszych odpowiedzi, dla różnych ścieżek rozwoju; w tej chwili dla jednego z naszych programów mamy 3 aktywne gałęzie: 1 dla głównego rozwoju, 1 dla jeszcze niedokończonych prac nad zrównoleglenie programu i 1 dla próby poprawienia go tak, aby używał plików wejściowych i wyjściowych XML;
- rzadko używamy tagów, chociaż uważamy, że powinniśmy ich używać do identyfikacji wydań do produkcji;
Pomyśl o rozwoju postępującym jedną ścieżką. W pewnym momencie marketingu deweloperskiego zdecyduj się na wypuszczenie pierwszej wersji produktu, więc umieszczasz flagę na ścieżce oznaczonej jako '1' (lub '1.0' lub co masz). W innym czasie jakaś jasna iskra decyduje się na zrównoleglenie programu, ale decyduje, że zajmie to kilka tygodni, a ludzie chcą w międzyczasie podążać główną ścieżką. Więc budujesz rozwidlenie na ścieżce, a różni ludzie wędrują po różnych widłach.
Flagi na drodze nazywane są „tagami”, a rozwidlenia jezdni to miejsca, w których dzielą się „gałęzie”. Czasami też gałęzie ponownie się łączą.
- umieszczamy w repozytorium cały materiał potrzebny do zbudowania pliku wykonywalnego (lub systemu); Oznacza to co najmniej kod źródłowy i tworzenie plików (lub plików projektu dla programu Visual Studio). Ale kiedy mamy ikony, pliki konfiguracyjne i wszystkie inne rzeczy, to trafia do repozytorium. Część dokumentacji trafia do repozytorium; z pewnością każda dokumentacja, taka jak pliki pomocy, które mogą być integralną częścią programu, robi to i jest to przydatne miejsce na umieszczenie dokumentacji programisty.
Umieściliśmy tam nawet pliki wykonywalne systemu Windows dla naszych wydań produkcyjnych, aby zapewnić jedną lokalizację dla osób poszukujących oprogramowania - nasze wersje Linuksa trafiają na serwer, więc nie trzeba ich przechowywać.
- nie wymagamy, aby repozytorium zawsze było w stanie dostarczyć najnowszą wersję, która jest budowana i uruchamiana; niektóre projekty działają w ten sposób, inne nie; decyzja należy do kierownika projektu i zależy od wielu czynników, ale myślę, że załamuje się przy dokonywaniu większych zmian w programie.
źródło
Tak często jak to możliwe. Kod nie istnieje, chyba że jest pod kontrolą źródła :)
Częste zatwierdzenia (a następnie mniejsze zestawy zmian) pozwalają łatwo zintegrować zmiany i zwiększyć szanse, że czegoś nie zepsujesz.
Inne osoby zauważyły, że powinieneś zatwierdzać, gdy masz funkcjonalny fragment kodu, jednak uważam, że warto robić to nieco częściej. Kilka razy zauważyłem, że używam kontroli źródła jako mechanizmu szybkiego cofania / ponawiania.
Kiedy pracuję na własnej gałęzi, wolę angażować się jak najwięcej (dosłownie tak często, jak wciskam ctrl + s).
Przeczytaj książkę o SVN - to miejsce, od którego powinieneś zacząć naukę SVN:
Dokumentacja, małe pliki binarne wymagane do kompilacji i inne rzeczy, które mają jakąś wartość, przechodzą do kontroli źródła.
źródło
Oto kilka zasobów dotyczących częstotliwości zatwierdzania, komunikatów dotyczących zatwierdzania, struktury projektu, tego, co należy poddać kontroli źródła i innych ogólnych wskazówek:
Te pytania dotyczące przepełnienia stosu zawierają również przydatne informacje, które mogą być interesujące:
Jeśli chodzi o podstawowe koncepcje Subversion, takie jak rozgałęzianie i tagowanie, myślę, że jest to bardzo dobrze wyjaśnione w książce Subversion .
Jak możesz sobie uświadomić po dokładniejszym przeczytaniu na ten temat, opinie ludzi na temat najlepszych praktyk w tej dziedzinie są często różne, a czasem sprzeczne. Myślę, że najlepszą opcją dla Ciebie jest przeczytanie o tym, co robią inni ludzie i wybranie wskazówek i praktyk, które uważasz za najbardziej sensowne.
Uważam, że nie jest dobrym pomysłem przyjmowanie praktyki, jeśli nie rozumiesz jej celu lub nie zgadzasz się z jej uzasadnieniem. Dlatego nie stosuj się do żadnych rad na ślepo, ale zdecyduj się na to, co Twoim zdaniem będzie najlepsze dla Ciebie. Eksperymentowanie z różnymi sposobami robienia rzeczy jest również dobrym sposobem na naukę i ustalenie, jak najbardziej lubisz pracować. Dobrym przykładem tego jest struktura repozytorium. Nie ma dobrego lub złego sposobu, aby to zrobić i często trudno jest określić, który sposób wolisz, dopóki nie wypróbujesz ich w praktyce.
źródło
Częstotliwość zatwierdzania zależy od stylu zarządzania projektem. Wiele osób powstrzymuje się od zatwierdzania, jeśli spowoduje to uszkodzenie kompilacji (lub funkcjonalności).
Gałęzi można używać na dwa sposoby, zazwyczaj: 1) Jedna aktywna gałąź do rozwoju (a pień pozostaje stabilny) lub 2) gałęzie dla alternatywnych ścieżek deweloperskich.
Tagi są zwykle używane do identyfikowania wydań, więc nie gubią się w miksie. Definicja „uwolnienia” zależy od Ciebie.
źródło
Myślę, że głównym problemem jest zagmatwanie mentalnego obrazu kontroli źródła. Zwykle mamy tułów i gałęzie, ale wtedy otrzymujemy niepowiązane pomysły na tagi / wydania lub coś, co ma wpływ.
Jeśli pełniej wykorzystasz ideę drzewa, stanie się to jaśniejsze, przynajmniej dla mnie tak jest.
Otrzymujemy pień -> formujemy gałęzie -> produkujemy owoce (tagi / wydania).
Chodzi o to, aby wyhodować projekt z pnia, który następnie tworzy gałęzie, gdy pień jest wystarczająco stabilny, aby utrzymać gałąź. Następnie, gdy gałąź wyda owoc, zrywasz go z gałęzi i puszczasz jako etykietę.
Tagi są zasadniczo produktami dostarczanymi. Natomiast produkują je pień i gałęzie.
źródło
Jak powiedzieli inni, książka SVN to najlepsze miejsce do rozpoczęcia i świetne źródło informacji, gdy już opanujesz morskie nogi. A teraz do twoich pytań ...
Jak często się angażujesz? Tak często, jak ktoś wciska ctrl + s?
Często, ale nie tak często, jak wciskasz ctrl + s. To kwestia osobistego gustu i / lub zasad zespołu. Osobiście powiedziałbym, że dokonaj zatwierdzenia, gdy ukończysz funkcjonalny fragment kodu, nawet jeśli jest mały.
Co to jest gałąź i co to jest tag i jak nimi sterujesz?
Po pierwsze, tułów to miejsce, w którym aktywnie się rozwijasz. To jest główna linia twojego kodu. Gałąź to pewne odchylenie od głównej linii. Może to być poważne odchylenie, jak w poprzedniej wersji, lub po prostu drobna poprawka, którą chcesz wypróbować. Tag jest migawką Twojego kodu. Jest to sposób na dołączenie etykiety lub zakładki do określonej wersji.
Warto też wspomnieć, że w subversion pnia, gałęzie i tagi są tylko konwencją. Nic nie stoi na przeszkodzie, abyś wykonywał pracę z tagami lub posiadał gałęzie, które są twoją główną linią, lub ignorował schemat tag-branch-trunk. Ale jeśli nie masz bardzo dobrego powodu, najlepiej trzymać się konwencji.
Co trafia do SVN? Tylko kod źródłowy, czy też udostępniasz tutaj inne pliki?
Również wybór osobisty lub zespołowy. Wolę zachować wszystko związane z kompilacją w moim repozytorium. Który zawiera pliki konfiguracyjne, skrypty budować, pliki związane z mediami, Dokumenty, itd Należy nie sprawdzać w plikach, które muszą być różne na każdej maszynie programisty. Nie musisz też sprawdzać produktów ubocznych swojego kodu. Myślę głównie o folderach kompilacji, plikach obiektowych i tym podobnych.
źródło
Eric Sink, który pojawił się w podcastie SO nr 36 w styczniu 2009 roku, napisał znakomitą serię artykułów pod tytułem Source Control How-to .
(Eric jest założycielem SourceGear, który sprzedaje wersję SourceSafe kompatybilną z wtyczkami, ale bez okropności.)
źródło
Wystarczy dodać kolejny zestaw odpowiedzi:
źródło
Inni stwierdzili, że to zależy od twojego stylu.
Głównym pytaniem dla Ciebie jest to, jak często „integrujesz” swoje oprogramowanie. Rozwój oparty na testach, Agile i Scrum (i wiele, wiele innych) opierają się na małych zmianach i ciągłej integracji. Głoszą, że wprowadzane są drobne zmiany, każdy znajduje przerwy i cały czas je naprawia.
Jednak w przypadku większego projektu (np. Rząd, obrona, 100 000 + LOC) po prostu nie można używać ciągłej integracji, ponieważ nie jest to możliwe. W takich sytuacjach może być lepiej użyć rozgałęzienia, aby wykonać wiele małych zatwierdzeń, ale przywróć TYLKO do linii głównej to, co zadziała i jest gotowe do zintegrowania z kompilacją.
Jedynym zastrzeżeniem związanym z rozgałęzianiem jest to, że jeśli nie są one odpowiednio zarządzane, może to być koszmar w twoim repozytorium, aby dostać się do pnia, ponieważ każdy rozwija się z różnych miejsc na pniu (co jest jednym z największych argumentów przemawiających za ciągła integracja).
Nie ma ostatecznej odpowiedzi na to pytanie, najlepszym sposobem jest współpraca z zespołem, aby znaleźć najlepsze rozwiązanie kompromisowe.
źródło
Kontrola wersji z Subversion to przewodnik zarówno dla początkujących, jak i starszych graczy.
Nie sądzę, abyś mógł efektywnie używać Subversion bez czytania przynajmniej kilku pierwszych rozdziałów tego.
źródło
Do zatwierdzania używam następujących strategii:
podejmuj tak często, jak to możliwe.
Każda zmiana funkcji / naprawa błędu powinna otrzymać własne zatwierdzenie (nie zatwierdzaj wielu plików naraz, ponieważ spowoduje to, że historia tego pliku będzie niejasna - np. Jeśli zmienię moduł logowania i moduł GUI niezależnie i zatwierdzę oba naraz, obie zmiany będą widoczne w obu historiach plików. Utrudnia to odczytanie historii plików),
nie przerywaj kompilacji na żadnym zatwierdzeniu - powinno być możliwe pobranie dowolnej wersji repozytorium i zbudowanie go.
Wszystkie pliki niezbędne do zbudowania i uruchomienia aplikacji powinny być w formacie SVN. Pliki testowe i takie nie powinny, chyba że są częścią testów jednostkowych.
źródło
Wiele dobrych komentarzy, ale coś, o czym nie zostało wspomniane, to komunikaty o zmianach. Powinny być obowiązkowe i sensowne. Szczególnie w przypadku rozgałęziania / łączenia. Umożliwi to śledzenie, jakie zmiany dotyczą poszczególnych funkcji błędów.
na przykład svn
commit . -m 'bug #201 fixed y2k bug in code'
powie każdemu, kto przegląda historię, do czego służy ta rewizja.Niektóre systemy śledzenia błędów (np. Trac) mogą przeszukiwać repozytorium pod kątem takich wiadomości i kojarzyć je z biletami. Dzięki temu ustalenie, jakie zmiany są związane z każdym biletem, jest bardzo łatwe.
źródło
Polityka w naszej pracy wygląda następująco (zespół wielu programistów pracujący na frameworku zorientowanym obiektowo):
Aktualizuj z SVN każdego dnia, aby uzyskać zmiany z poprzedniego dnia
Zobowiązuj się codziennie, więc jeśli będziesz chory lub nieobecny następnego dnia (dni), ktoś inny może łatwo przejąć miejsce, w którym przerwałeś.
Nie publikuj kodu, który cokolwiek psuje, ponieważ wpłynie to na innych programistów.
Pracuj nad małymi kawałkami i wykonuj codziennie ZNACZNE KOMENTARZE!
Jako zespół: zachowaj gałąź programistyczną, a następnie przenieś kod przedpremierowy (do kontroli jakości) do gałęzi produkcyjnej. Ta gałąź powinna zawsze mieć tylko w pełni działający kod.
źródło
Podręcznik TortoiseSVN TSVN jest oparty na książce subversion , ale jest dostępny w znacznie większej liczbie języków.
źródło
Myślę, że istnieją dwa sposoby na zatwierdzanie częstotliwości:
Wolę to pierwsze - bo korzystanie z systemu kontroli wersji jest bardzo przydatne nie tylko dla projektu czy firmy, przede wszystkim dla dewelopera. Dla mnie najlepszą funkcją jest cofnięcie całego kodu podczas wyszukiwania najlepiej przypisanej implementacji zadania.
źródło