jak korzystać z systemu kontroli wersji

19

Zajmuję się tworzeniem strony internetowej w php w localhost, a kiedy moduły się kończą, przesyłam ją do chmury, aby moi przyjaciele mogli ją przetestować w wersji alfa.

Jak zachować się rozwija, mam wiele plików i tracę poczucie który plik mam edytowane lub zmienione itd. Słyszałem o czymś jako „kontroli wersji” do zarządzania wszystkim, ale nie jestem pewien, jak to działa.

Moje pytanie brzmi więc: czy jest dostępny łatwy sposób / usługa / aplikacja do śledzenia wszystkich zmian / zmian / nowych plików i zarządzania nimi podczas tworzenia witryny. Jak tylko skończę z modułem, chcę załadować go do chmury (korzystam z usługi Amazon Cloud). Jeśli coś się dzieje, do nowych plików, może chcę wrócić do starego pliku. A może za jednym lub dwoma kliknięciami mogę zobaczyć pliki, które edytowałem lub zmieniłem od czasu ostatniego przesłania?

ptamzz
źródło
5
Istnieje wiele sugestii dotyczących tego, jakiego systemu kontroli wersji użyć, i szczerze mówiąc, wszystkie z nich są lepsze niż twój obecny „ręczny” sposób.
Johan

Odpowiedzi:

28

Zarządzanie konfiguracją oprogramowania , którego częścią jest Kontrola wersji , jest nieco bardziej skomplikowane niż śledzenie zmian w plikach, choć na pewno możesz zacząć od tego. Ale czy czytać artykuły Wikipedii umieszczony powyżej wraz z samouczka Joel Spolky w sprawie Mercurial .

Na początek wybierz jeden z Mercurial, GIT lub Bazaar, w tej kolejności, i zainstaluj go wraz z narzędziami do IDE i systemu operacyjnego (wolę Mercurial z HGE dla Eclipse).

  1. Zainicjuj repozytorium z katalogu roboczego ( hg init z Mercurial) ..
  2. Zdecyduj, które pliki i katalogi chcesz śledzić, a które nie. Ogólna zasada nie polega na śledzeniu plików generowanych przez kompilatory i inne narzędzia.
  3. Użyj polecenia, aby dodać pliki i katalogi do repozytorium ( hg add dla Mercurial).
  4. Poinformuj narzędzie o wzorach plików, których nie chcesz śledzić (edytuj .hgignore dla Mercurial).
  5. Wykonaj zatwierdzenie, aby śledzić oryginalne wersje ( hg ci ).
  6. Wykonaj zatwierdzenie po każdym logicznym kamieniu milowym, nawet jeśli jest mały.
  7. Dodaj nowe pliki podczas ich tworzenia.
  8. Powtórz dwa ostatnie.
  9. Wykonaj kopię zapasową katalogu roboczego i repozytorium tak często, jak to uzasadnione.

Dzięki plikom w repozytorium możesz poznać różnice między dowolnymi dwiema wersjami pliku lub katalogu albo kompletnym projektem ( hg diff ), zobaczyć historię zmian ( hg hist ) i wycofać zmiany ( hg w górę -r ).

Dobrym pomysłem jest otagowanie repozytorium (tag hg ) przed opublikowaniem kodu, aby łatwo było wrócić do dokładnie tego, co opublikowałeś w celu poprawek lub porównań.

Jeśli chcesz eksperymentować z innej linii rozwoju, zrób to w prosty oddziału przez klonowanie głównego repozytorium ( hg clone ) i nie zepchnięcie aż eksperyment jest rozstrzygający. To tak proste, jak to ma inny katalog roboczy dla eksperymentu.

Jeżeli eksperyment jest dla nowej, zmodernizowanej wersji następnie klon, a następnie gałąź ( hg branch ), więc można zachować wszystkie kopie repozytoriach zaktualizowanych jeden eksperyment bez zakłócania innych.

Linus Torvalds (który zajmuje się dziesiątkami tysięcy plików i milionami linii kodu w swoich projektach) wygłosił w Google rozmowę na temat tego, dlaczego narzędziem nie może być CVS, SVN, ani żadna z wielu darmowych i komercyjnych ; to jest bardzo dużo warte oglądania.

Apalala
źródło
1
Ja też wolę Mercurial. I podobnie jak wsparcie w NetBeans ponieważ podczas kodowania to pokazuje każdą linię, które zmieniły się od czasu ostatniego popełnić. Koloruje także nowe / zmienione / niezmienione pliki w drzewie produktów. Co brzmi jak byłoby to pomocne dla OP: I lose track of which file I've edited or changed. HGE też może to zrobić, nie użyłem tego.
JD Isaacks,
1
+1 do opisania procesu, jak również część jak korzystać z narzędzi, aby to zrobić.
Donal Fellows
Jako pytanie poboczne, czy .xcodeprojplik, który Xcode wykorzystuje w projektach na iOS, powinien być uważany za coś, co każe Mercurialowi zignorować, czy też ważne jest, aby zachować synchronizację pliku?
Kevin Yap
1
@Kevin Nie wiem o Xcode, ale najnowsze IDE i narzędzia mają osobne pliki konfiguracyjne dla ogólnych elementów projektu (wersje językowe i biblioteczne, reguły formatowania kodu, zależności itp.) Oraz preferencji użytkownika (katalogi, w których umieszczam elementy, panel układ, skórki, rozmiar czcionki, podpis osobisty). Ten pierwszy może zostać włączony do repozytorium, jeśli zespół wyrazi zgodę. To ostatnie nie powinno być uwzględnione, ponieważ aktualizacja z repozytorium nadpisałaby twoje preferencje preferencjami innej osoby, a to szybko staje się denerwujące i przynosi efekt przeciwny do zamierzonego.
Apalala
1
@John: NetBeans robi to za każdym VCS, że obsługuje. W tym momencie jest to tylko podstawowa funkcja IDE.
Mike Barańczak
13

Gorąco polecam Git. Dowiedz się więcej o tym tutaj: https://lab.github.com/

Jeśli nie podoba Git, istnieją inne rozwiązania kontroli wersji. Możecie sprawdzić SVN.

Todd
źródło
1
Jako codzienny użytkownik Git chciałbym dodać, że wybieranie niezbędnych poleceń jest niezwykle łatwe i intuicyjne. Wsparcie jest świetne, więc nie zgubisz się, gdy będziesz szukać pomocy. Użyłem SVN, ale nie było to dla mnie takie łatwe , ale dla wielu użytkowników może być w porządku.
Muhammad Usman,
1
+1 rozważyć także: ludzie decydują się przenieść z SVN (a VCS) do git (DVCS - d = dystrybuowane), ale nie z GIT do SVN (przez wybór).
Michael Durrant
7

Jest to po prostu ?, użyć DVCS

Choć wydaje się to sprzeczne z intuicją, rozproszony system kontroli wersji (mercurial, git, bazaar) lepiej jest zacząć od systemu scentralizowanego (svn, cvs). Dlaczego ?, go zainstalować na komputerze i uruchomić repozytorium lokalnie, i to wszystko. Na scentralizowanego systemu, takich jak svn trzeba ustawić się, klient i serwer ... a potem, trzeba być łączenia się z serwerem, aby zapisać zmiany.

Z DVCS to ty, lokalnym repozytorium, a jeśli chcesz, możesz skorzystać z usługi jak bitbucket.org lub github.com.

IMHO, mercurial jest bardziej przyjaznym i równie zdolnym DVCS na początek.

Czy są jeszcze inni ?, użyj DVCS!

Korzystanie z DVCS do pracy z zespołem ma wiele zalet , najważniejsze w przeciwieństwie do scentralizowanego systemu polega na tym, że nie ma żadnych wyścigów zatwierdzania, a to dlatego, że technicznie, repozytorium każdej osoby jest oddziałem i kiedy udostępniasz swoje zmiany te gałęzie są dla ciebie scalone, a ty nawet tego nie zauważysz, co oznacza, że ​​zamiast mieć taką historię wersji, w której ludzie kierują swoją pracą w linii prostej:

wprowadź opis zdjęcia tutaj

W końcu masz coś takiego, w którym każdy po prostu popełnia ad hoc:

wprowadź opis zdjęcia tutaj

Każdy z nich martwi się o swoją pracę podczas wersjonowania (tj. Nie ściga się o zatwierdzenie) i nie martwi się o połączenie z serwerem tylko do zatwierdzenia.

Powodzenia

dukeofgaming
źródło
1
+1 Bardzo fajne przykłady! Powinieneś edytować, aby podkreślić nieobecny ból w złożonych drzewach scalania za pomocą nowoczesnych narzędzi.
Apalala
5

Krótko mówiąc, istnieje wiele alternatyw, wśród których Subversion (SVN) i Git wydają się najbardziej popularne (dlatego najłatwiej jest znaleźć rozwiązania w Internecie).

Oba się różnią. SVN jest prostszy, ale Git nie wymaga posiadania serwera na początek - możesz kontrolować wersję lokalnie.

Zakładając, że masz Linuksa i chcesz zacząć używać Git:

  1. Zainstaluj Git
  2. Przejdź do katalogu i uruchom polecenie „git init”
  3. Dowiedz się, jak dodać pliki, zmiany ocena, popełnić je ...
  4. ... i zrobić bardziej zaawansowanych rzeczy (przeglądanie logów, odwracania zmian, ignorując plików, tworzenie oddziałów, ich łączenie, tworzenie i korzystanie piloty, za pomocą submodules, wykorzystując wsparcie SVN etc.).

Mam nadzieję, że to pomoże Ci zacząć.

Tadeck
źródło
1
SVN nie wymaga serwera, ale wymaga to repozytorium być w innym katalogu z jednej pracy. SVN i CVS są ogólnie zastąpiona ot narzędzi, takich jak Git i Mercurial, które nie wymagają połączenia z siecią w codziennej pracy i nie wymagają centralnego repozytorium dla wspólnego i rozproszonego wytwarzania oprogramowania.
Apalala
Czy nie sądzisz, że jest to w rzeczywistości identyczne z tworzeniem serwera repozytorium SVN na localhost? Co potrzebne jest do skonfigurowania centralne repozytorium i utrzymać go i podczas przenoszenia plików mus upewnić repozytorium SVN jest nadal dostępne (nawet nie myśleć o tym, kopiując cały centralne repozytorium przy każdym przeniesieniu plików na innym komputerze). Nie sądzę też, aby Subversion było przestarzałe (choć nie mówię o CVS) - jest ono po prostu scentralizowane, aw niektórych przypadkach lepszym rozwiązaniem byłoby wymuszenie centralizacji.
Tadeck
Apalala, jakieś pytanie: jak Mercurial radzi sobie z informacjami, który użytkownik jest autorem konkretnej zmiany? W Git możesz to zmienić i zatwierdzić zmianę jak ktoś inny, tworząc w ten sposób trochę bałaganu (istnieje funkcja odróżniająca commiter od osoby wysyłającej, ale nie jest to wystarczająco oczywiste). Czy Mercurial rozwiązał ten problem związany z kontrolą wersji rozproszonych?
Tadeck
2
@ Tadeck W moim rozumieniu Mercurial i GIT nie działają w ten sposób. W nich jedna osoba odpowiada za to, co trafia do repozytorium, czy to przez zatwierdzenia, wyciągnięcia czy łatki. W repozytoriach rozproszonych, jeśli ktoś ma uprawnienia wypychania, to już mu ufasz całym sercem. Linus Torvalds wyjaśnia to dobrze w tej rozmowie: youtube.com/watch?v=4XpnKHJAok8
Apalala
@Tadeck chodzi SVN, użyłem go, dużo, a skończyło się na myśli, że nie był to postęp w stosunku CVS (który przynajmniej ma repozytoriów zwykły ASCII i jest wystarczająco dojrzałe, aby nie zaburzyć ich). Ponownie Torvalds dobrze to wyjaśnia w filmie, który wcześniej zamieściłem. Brak możliwości pracy w trybie offline i brak możliwości scalenia powodują, że stare narzędzia SCM są przestarzałe.
Apalala
2

Jak sugeruje Apalala, polecam zakup hginit . Ponieważ dopiero zaczynasz kontrolę wersji, możesz pominąć pierwszą stronę. To powinno dać ci dobre wprowadzenie, a następnie możesz pisać na SO, jeśli masz konkretne pytania.

JD Isaacks
źródło
0

Sprzeciwiam się opinii większości i polecam Subversion. Subversion jest łatwe w użyciu i robi wszystko, czego potrzebują ludzie i małe zespoły. To dojrzały produkt, więc każde IDE ma dla niego dobre wsparcie. Tak, nie ma wszystkich funkcji Git. (Nigdy nie korzystałem z Mercurial, więc nie będę o tym rozmawiać.) Ale większość programistów tak naprawdę nie potrzebuje tych dodatkowych funkcji.

Wiele repozytoriów? Jestem pewien, że istnieją pewne uzasadnione zastosowania, ale nigdy ich nie spotkałem.

Czy możesz dokonywać lokalnych zatwierdzeń bez dostępu do sieci? Miło jest mieć, jeśli zdarza się, że wprowadzasz kilka dyskretnych zmian i nie masz dostępu do serwera repozytorium - ale szczerze mówiąc, jak często to się zdarza?

Git ułatwia radzenie sobie z rozgałęzianiem i scalaniem. Ale dla jednoosobowego zespołu to nie jest taka wielka sprawa.

Aby uzyskać coś w skali jądra Linux - tak, użyj Git. Dla reszty z nas Subversion jest wystarczająco dobre.

Mike Baranczak
źródło
Downvoting. Cechy Git, które nie są w SVN (takie jak rozgałęzienia lekkiej i łatwej przejmująca) są pomocne, a może nawet niezbędne, na małych projektach tak samo jak na dużych.
Marnen Laibow-Koser
1
@ MarnenLaibow-Kosera Tak, to było moim zdaniem w tym czasie, ale po użyciu Git zawodowo od kilku lat bym musiał się z tobą zgodzić.
Mike Baranczak
Doskonały! Zostaniesz zasymilowany. : D
Marnen Laibow-Koser