2008-12-05 8 views
39

Używam teraz SVN, a ja używałem CVS i VSS w przeszłości. SVN jest obecnie ulubionym w moich książkach, ale słyszałem dużo o git. Spośród ludzi, którzy używali git, jakie są plusy i minusy z twojego doświadczenia?Jakie są twoje plusy i minusy git po użyciu?

+1

To jest dobre pytanie, wstyd, że jest zamknięty. Jedną z rzeczywistych wad gita jest to, że trudniej jest go użyć, gdy trzeba pobrać bardzo duże repozytorium z ogromną historią commitów, aby zobaczyć źródło lub zrobić prostą łatkę. W svn otrzymujesz bezpośrednio źródła najnowszej głowicy i możesz wznowić pobieranie, jeśli połączenie nie powiedzie się. W git, nawet z '--depth 1' dostajesz ogromną sumę innych rzeczy, a jeśli korzystasz z niestabilnego i wolnego połączenia, to może być nawet niemożliwe, aby je zdobyć – Petr

+0

Najbardziej lubię git, ale plusy są objęte Wspomnę cona. Con jest to, że dla początkujących bardzo łatwo jest stracić zmiany. Kiedy zaczynałem, często znajdowałem się w stanie odłączenia głowy i kiedy przełączyłem się na inną wersję/gałąź, straciłem moje zatwierdzenia. – Chance

Odpowiedz

28

ja nie mam dużo doświadczenia z git, ale:

Plusy:

  • To naprawdę szybkie
  • lokalny zobowiązuje skała
  • Szybkie rozpoczęcie nowego repozytorium (brak konfiguracji itp.)
  • github jest łatwy w użyciu

(. I tak naprawdę nie „potrzebne” rozproszonych stronie rzeczy jeszcze, poza mogąc mieć lokalne repozytorium i popchnąć do jednego publicznego)

Wady:

  • wsparcie Windows jest nadal pozostaje w tyle, wierzę - i nie można po prostu używać go od normalnej wiersza polecenia
  • Lack of IDE i integracji Explorer
  • zajęło mi trochę czasu, aby znaleźć good introductory text wzdłuż linii na Redbean książki.
  • Fakt, że „dodawanie” odmienionym plik dodaje tylko zawartość w tym momencie (więc może pokazać się jako wystawił do popełnienia i jeszcze modyfikacji, które wymagają innego git add) zajęło to trochę czasu, aby zrozumieć
+0

Co do książek - jest to książka Beta od pragmatycznych programistów: http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git – Abizern

+2

Nie ma problemu z użyciem Git z wiersza poleceń systemu Windows, naprawdę. Używam msys Git z Powershell i cmd.exe bez problemów na chwilę. Jeśli chodzi o brak integracji Explorer, to jest dla mnie Pro :-))). –

+2

Ooh ... Nie zdawałem sobie sprawy, że git jest w porządku z normalnego cmd.exe. Musisz spróbować ... –

1

Świetne pytanie, używam SVN od dłuższego czasu i czuję się z tym dobrze. Ale musiałem użyć Git kilka razy, aby uzyskać kod źródłowy z różnych projektów open source. Nadal nie poświęcam czasu, aby naprawdę się o tym dowiedzieć. Czy warto?

Chciałbym również zapytać, jakie są zalety używania kontroli wersji rozproszonej nad normalnym VCS jako subwersji.

1

Skeet ma większość z nich, ale:

Pro:

  • Rozgałęzienia! O wiele lepiej jest pracować nad fragmentami funkcjonalności w oddzielnych oddziałach i nadal być w stanie kontrolować ich wersję, niż gdy wiele rzeczy dzieje się w jednej gałęzi. A gdy już postanowił cię jak rozgałęzienia, trzeba kochać, jak łatwo git sprawia, że ​​w porównaniu do SVN
+0

Zawsze uważałem, że jest to dość łatwe w svn (i często go używam) - ale nie próbowałem go jeszcze w git. –

+3

Rozgałęzianie nie jest dużo prostsze niż SVN, ale łączenie w git jest banalne. To ogromna różnica. –

4

Łączenie jest znacznie bardziej proste w git ponieważ tworzenie oddziałów jest domyślnym, a nie dodatkowa opcja. Więc kiedy musisz coś scalić, po prostu je zatwierdzisz, a następnie scalisz dwie gałęzie (istniejącą i nową, która jest automatycznie tworzona dla twojego ostatniego sprawdzenia).

Ponadto, używając git, zawsze masz przy sobie całe repozytorium. Możesz zameldować się w trybie offline i scalać później (ponieważ scalanie jest o wiele prostsze).

Wadą jest to, że GIT prawie nie nadaje się do użytku na dysku USB w systemie Windows.System Windows wyłącza buforowanie, a GIT działa z milionami małych plików. Brakuje również wsparcia dla IDE. Nie jestem pewien, czy to naprawdę jest problem. Interfejs użytkownika dołączony do GIT jest całkiem niezły.

Ponadto, nie jestem w 100% zadowolony, że trzeba "dodawać" istniejące pliki przez cały czas [EDYCJA] i ogromną liczbę funkcji. Dla początkujących są one przytłaczające i często nie jest jasne, dlaczego chciałbyś użyć określonej opcji/polecenia. Mam na myśli, że CVS ma na przykład 20 poleceń. GIT ma 73 i każdy ma wiele opcji (i to nie liczy się z poleceniami instalacyjnymi ...).

+0

Git commit - w połączeniu z przyzwoitym .gitignore działa wokół problemu dodawania istniejących plików. –

9

Obsługa systemu Windows jest przerażająca, więc przeniosłem się do Mercurial, kolejnej DVCS, która jest równie dobra.

Korzyści z DVCS stają się widoczne, gdy na przykład masz repozytorium na serwerze w biurze i pracujesz na stronie. Możliwość lokalnego zatwierdzenia bez dostępu do biura serwera (i jeśli to konieczne, wycofywanie zmian) jest genialna!

10

Wiele osób zaprzeczyłoby temu, ale wybór narzędzia do zarządzania kodem źródłowym wpływa na sposób pracy. Dużo pracowałem z Subversion - dopóki nie odkryłem Gita dla mnie. W zasadzie unikałem rozgałęzień w Subversion. Kiedykolwiek nie mogłem tego uniknąć, wolałem ustawić lokalne lustro (używając svk). Chociaż rozgałęzienie jest łatwe do zrobienia zarówno w Subversion, jak i Git, tylko Git sprawia, że ​​łączenie się (i ponowne rozpisywanie!) Sprawia, że ​​Subversion zawsze był królewskim bólem, jeśli chodzi o łączenie czasu.

Drugą rzeczą, która naprawdę podoba mi się w Git (poza wszystkimi punktami, o których już wspomniano) jest "indeks", obszar przemieszczania, który przechowuje kolejne zatwierdzenie, oraz możliwość dodania tylko pojedynczych fragmentów zmienionego plik do niego.

2

Najnowsza wersja Gita może działać bezpośrednio w wierszu polecenia Window, w ten sposób go używam. Ten proces jest teraz dla mnie dość banalny.

Mam też Gita zainstalowanego na zewnętrznym dysku twardym i na moim skoku. Ilekroć na nowym komputerze uruchamiam skrypt, który tymczasowo ustawia ścieżkę do narzędzi Gita. Następnie możesz kontynuować rozwój!

11

Pro:

  • Szybko - bardzo szybko.
  • Tworzenie nowego repo jest bardzo łatwy w porównaniu do SVN
  • Pełne repo jest zawarta w jednym .git folderu - nie doda folder .svn w każdym folderze kodzie (nie jest wielka sprawa, ale ja lubię to)
  • Rozgałęzienie jest łatwiejsze
  • GitHub!

Wady:

  • Nie można KASY część repozytorium (jak tylko jednego folderu lub tylko jeden plik)
  • nie zapisuje pustych folderów
  • wsparcia
  • Bad Windows (mi nie przeszkadza dużo - używam Linuksa)
  • Jeszcze nie znalazłem dobrego narzędzia GUI dla Git (używam KDESVN dla SVN). Nie jest to duży problem, jeśli czujesz się komfortowo z CLI.
+0

Podobało mi się git-gui i qgit –

+0

Nie można sprawdzić części repo, ponieważ jest to koncepcja rozproszonej kontroli wersji, którą użytkownik musi mieć pełne repo na lokalnej maszynie. Pamiętaj, że tylko raz, gdy sklonujesz projekt na maszynie lokalnej, wyciągasz wszystkie rzeczy. Następne przeciągnięcie da ci tylko zmiany. –

5

Praca z git bardzo różni się od pracy z innymi wersjami systemów.

Posiadanie lokalnego repozytorium jest bardzo ważne. Oznacza to, że możesz wykorzystać pełną moc systemu wersjonowania (i to jest dużo z git), nie przeszkadzając nikomu. Jeśli istnieje kontrowersyjny problem w twoim projekcie, możesz po prostu pracować nad nim prywatnie - tworząc gałęzie, układając łaty i polerując je. W ten sposób możesz wrócić z wyprasowanym zestawem poprawek. Ale nawet w "normalnej operacji" jest znacznie lepiej, jeśli możesz wyczyścić swoje łatki przed pokazaniem ich publicznie, a de facto debugowanie jest znacznie łatwiejsze, jeśli masz rozsądne łatki, a nie tylko "koniec dnia".

Zanim popełnię większy zestaw poprawek, zazwyczaj zmieniam kolejność łatek i poprawek do squasha w nowym kodzie bezpośrednio do poprawki. Wygląda na to, że nigdy nie popełniłem żadnego błędu. Następnie mój prywatny oddział jest ponownie na górze HEAD, a następnie pchnął. Zwykle nigdy nie używam scalania, ponieważ tylko zaśmieca historię.

W skrócie: Pozwala to zachować historię w czystości.

Daje to bardzo różne spojrzenie na twoją pracę. Pozwala zobaczyć bieżący stan jako dodatek do pojedynczych poprawek, które tworzą historię, która nie jest tylko dziennikiem, ale czymś, co celowo tam umieszczasz. Zestawy poprawek to klocki, z których tworzysz swoją aplikację - i w razie potrzeby przejdź w odpowiednie miejsce.

Nigdy nie dobrowolnie nie wrócę do żadnego innego systemu wersjonowania, którego używałem przed git lub jakimkolwiek systemem wersjonowania, który nie obsługuje rebase i lokalnych oddziałów i commitów.

4

Inne uwagi:

Plusy:

  • Elastyczność: nie wymusza jednego, prawdziwego workflow
  • tak szybko, że kontroli wersji staje małoletniego zadanie
  • Lekkie, łatwe łączenie oddziałów i obszar przemieszczania umożliwia spersonalizowane przepływy pracy
  • Potężniejsze
  • Bardzo kompaktowe repos

Wady:

  • Nie Wbudowany w kontroli dostępu
  • Słabe narzędzia do plików binarnych. Nie kompaktuje zmian w plikach binarnych w repozytorium i przechowywaniu plików binarnych, zapobiega automatycznej obsłudze zakończeń linii w systemie Windows.
  • Może być trudniej się uczyć, ponieważ jest bardziej elastyczny i bardziej wydajny. Nie zawsze następuje semantyka CVS/SVN i nie jest zorganizowana wokół plików.
19

liczba poleceń

Podczas svn i inne nowoczesne VCS jak Hg lub innych są ładne i użyteczne narzędzia git jest sklep pełen obrabiarek. Jest to jednocześnie pro i con. Podczas gdy svn ma 30 poleceń (zgodnie z 'svn help') git wysyła 130 stron man z mniej więcej każdym z nich opisującym pojedyncze polecenie. Jednym z powodów jest to, że git udostępnia funkcje niższego poziomu, które większość użytkowników będzie potrzebować jako narzędzia wiersza poleceń. Ale nawet bez tych poleceń niskiego poziomu, git wysyła wiele bardzo potężnych narzędzi i nie ma ich w żadnym innym VCS, który znam (zobacz przykłady na przykład git-bisect, git-filter-branch, git-cherry lub git-reset).Chociaż bardzo pomocne jest posiadanie tych narzędzi, to początkującemu trudno jest zrozumieć, jakiego polecenia potrzebują i czego potrzebują, a które nie.


model rozwoju

Podobny wątek jest, że git jest na tyle silne, aby wspierać bardzo różne tryby pracy. To sprawia, że ​​jest to trudne dla początkujących, ponieważ nie ma tak naprawdę dokumentu "najlepszej praktyki", ponieważ najlepsza praktyka nie jest wbudowana w git. Więc trzeba zdecydować się, czy

  • wystarczy użyć łączy, aby uniknąć konfliktów z Pracujesz reż
  • użytku prywatnego oddziały, które się rebased do upstream głowa
  • Użyj oddziałów wydobywczych
    • że są scalane regularnie (latająca ryba)
    • połączone po zakończeniu
  • U se drzewo opiekuna jednego projektu, opiekunów drzewa, SUB opiekunów systemowych opiekunów kierowców i współpracowników z każdego poziomu ciągnięcie łatki z poniżej poziomu (jądro Linux)

Jak masz z lokalnym repozytorium można nawet użyć bardzo odmienny tryb pracy niż projekt, nad którym pracujesz i po prostu dostosuj zestawy zmian przed ich wypychaniem/publikowaniem.


Ścieżka Zmiany

Inną rzeczą, która również liczy się jako pro i con w zależności od punktu widzenia jest to, że praca z git jest bardziej skomplikowana niż w przypadku jakichkolwiek scentralizowanych VCS i jeszcze bardziej skomplikowana większość innych rozproszony VCS.

W scentralizowanym systemie VCS zwykle wykonuje się zatwierdzenie, a wprowadzone zmiany przechodzą do repozytorium. W git zmiany mogą przejść przez dość dużą liczbę kroków, zanim trafią do miejsca docelowego. Typowe kroki (nie tak wspólne kroki w nawiasach):

  • robocza dir (edycja)
  • Index aka obszarze pomostowym (git add)
  • lokalnym repozytorium (git commit)
  • (innych lokalnych oddziałów) (git rebase git cherry-pick, git scalania)
  • (repozytorium sub opiekuna) (git push git pull, mail)
  • Upstream repozytorium (git push git pull, mail)

Ponieważ możesz pominąć indeks, musisz wykonać co najmniej 2 kroki, ale zazwyczaj jest ich więcej. To wymaga głębszego zrozumienia tego, co robisz i pisania znacznie więcej poleceń. Z drugiej strony daje to kontrolę nad każdym z tych kroków.Można

  • zdecydować, które dżonki/linie idą do zatwierdzenia, a które nie są
  • zdecydować, które poprawki chcesz, w którym z lokalnymi oddziałami
  • zdecydować, które z łat są publikowane
  • przerobienie , zgniatanie, naprawianie, dzielenie, zmiana kolejności poprawek przed opublikowaniem
  • zdecyduj, którym osobom, którym ufasz i akceptuj poprawki od
  • , deleguj części projektu do innego opiekuna, któremu ufasz.

Cała ta władza i decyzje utrudniają początkującym rozpoczęcie pracy z git. Po opanowaniu dają ogromną kontrolę nad kodem.


Zapis Dostęp

Jednym z głównych pro dla każdego rozproszonych VCS jest to, że płatnicy nie wymagają dostępu do zapisu korzystać z VCS. Każdy z dostępem do odczytu może po prostu sklonować repozytorium, w razie potrzeby utworzyć gałęzie i rozpocząć układanie zestawów poprawek. Praca z CVS bez dostępu do zapisu jest prawdziwym problemem - z gitem nie ma większego znaczenia, jak zdobyć swoje łatki. To nie tylko zaleta techniczna, ale także oszczędność w skomplikowanych dyskusjach, czy ten noobie powinien naprawdę uzyskać dostęp do zapisu.

+0

Przynajmniej niektóre z wymienionych poleceń nie są unikalne. Mercurial ma polecenie bisect (http://hgbook.red-bean.com/hgbookch9.html#x13-1880009.5), Subversion ma svndumpfilter. – Constantin

0

Plusy:

  • wszystkiego wymienionego powyżej

Wady:

  • dziwne zachowanie autocrlf w Windows

  • niemożność przenieść/zmienić nazwę pliku lub reż insode repo i kepp jego popełnienia historii (git mv prostu usuwa plik z repo, zmienia nazwę i dodaje go ponownie repo, a tym samym tracąc całą historię)

+1

To albo nie jest właściwe, albo przestarzałe. Git wykrywa ruchy, niezależnie od tego, czy robisz je za pomocą "git mv", czy poza gitem i sprawdzasz je, bazując na podobieństwach plików. Możliwe jest przeniesienie ORAZ dokonanie wystarczających zmian w jednym zatwierdzeniu, którego nie wykrywa, ale w pewnym momencie sprawia, że ​​fakt, że zacząłeś od określonego pliku, jest w pewnym sensie nieistotny. Jeden obieg pracy, jeśli chodzi o ruchy, polega na przechowaniu zmian, ponowieniu ruchu i sprawdzeniu go, a następnie ponownym zastosowaniu zmian ukrytych. –