git dla projektów osobistych (jednoosobowych). Przesada?

84

Znam i używam dwa systemy kontroli wersji: Subversion i git. Subversion na razie przyzwyczaja się do osobistych projektów, w których jestem jedynym programistą, a git przyzwyczaja się do projektów open source i projektów, w których, jak sądzę, inni również będą pracować nad projektem. Wynika to głównie z niesamowitych możliwości rozwidlania i łączenia git, w których każdy może pracować nad własnym oddziałem; bardzo przydatny.

Teraz używam Subversion do osobistych projektów, ponieważ myślę, że git nie ma tam sensu. To trochę przesada. Jest dla mnie OK, jeśli jest scentralizowany (zwykle na moim serwerze domowym), gdy jestem jedynym programistą; I tak robię regularne kopie zapasowe. Nie potrzebuję możliwości tworzenia własnego oddziału, główny oddział to mój oddział. Tak, SVN ma prostą obsługę rozgałęziania, ale myślę, że o wiele bardziej wydajne wsparcie nie ma sensu. Łączenie się może być z tym bólem, a przynajmniej z mojego małego doświadczenia.

Czy jest jakiś dobry powód, aby używać git do osobistych projektów, czy jest to po prostu przesada?

Anto
źródło
61
Nie, używam git i hg do osobistych projektów. Posiadanie lokalnej kontroli wersji jest darem niebios.
wkl
7
Git jest pod wieloma względami lepszy dla wszystkich projektów, bez względu na to, czy mają dużą liczbę współpracowników, czy nie: git kompresuje rzeczy znacznie, znacznie wydajniej niż svn (i jest o rząd wielkości szybszy!), Git sprawia, że ​​tworzenie kopii zapasowych jest banalne, a git nie będzie stanowić przeszkodę, jeśli ktoś chce wnieść swój wkład.
Artefact2
4
Używam kontroli wersji, by przesłać mój kod na github lub bitbucket, to serwery są dla mnie kopią zapasową, a może kiedyś napiszę coś, czym ludzie naprawdę będą się interesować.
Mahmoud Hossam
8
„Nie potrzebuję możliwości tworzenia własnej gałęzi, główną gałęzią jest moja gałąź”. Wiele osób mówiło to samo o tym, undokiedy była to stosunkowo nowa funkcja w aplikacjach. Teraz wszyscy zdają sobie sprawę, że cały czas tego potrzebowali. Musisz się rozgałęzić, po prostu tego nie wiesz.
Dan Rosenstark,
1
@ rtperson tak, możesz to zrobić, ale tak naprawdę bardziej lubię mercurial, chociaż bardziej lubię github niż bitbucket.
Mahmoud Hossam,

Odpowiedzi:

155

To nie jest przesada. Głównym powodem, dla którego zacząłem używać Git i Mercurial zamiast Subversion do osobistych projektów, jest to, że inicjowanie repozytorium jest o wiele łatwiejsze.

Chcesz rozpocząć nowy projekt?

> git init

BAM! Nie trzeba konfigurować serwera repozytorium ani sprawdzać struktury folderów w celu obsługi rozgałęzień i tagów w repozytorium subversion.

Udostępnianie projektu później to tylko kwestia: git push(innego niż zdalne repozytorium). Spróbuj zrobić to szybko z subversion!

Łup
źródło
24
Przyjęty. Nie mogłem udowodnić, że bardziej się mylę, że git jest przesadny;)
Anto,
7
Steve341: Zwykle przechowuję wszystkie projekty kodu źródłowego w folderze o nazwie „projekty”. Tam przechowuję wszystkie repozytoria, po jednym dla każdego projektu kodu źródłowego. Nigdy nie musiałem śledzić kilku projektów w jednym i tym samym repozytorium VCS; po to są systemy zarządzania zależnościami, takie jak Ivy lub Maven.
Spoike,
3
@ Steve341 Jak trudno jest śledzić te rzeczy? Masz tylko jeden folder, który zawiera wszystkie Twoje repozytorium. Nie różni się niczym od twojego systemu, poza tym, że twój system jest wyjątkowo złą praktyką przy korzystaniu z git ...
alternatywny
2
@ Steve314:echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
André Paramés
2
git initi bam! O tak, a potem cp ../the-other-project/.gitignore .przed pierwszym zatwierdzeniem. Bam!
Dan Rosenstark,
46

Twierdziłbym, że używanie Subversion do lokalnych projektów osobistych jest przesadą, podczas gdy Git zdecydowanie nie. Git zajmie mniej miejsca (ze względu na nieefektywną koncepcję „rewizji” SVN w porównaniu do migawek obiektów Gita), wymaga mniejszej konfiguracji (w git initporównaniu z tuzinem svnadminpoleceń i ustawiania uprawnień itd.), Łatwiej jest wykonać kopię zapasową ( git clone --bare[lub git push originjeśli używasz Github lub podobny] i gotowe) i ma lepsze narzędzia do zarządzania kodem (rozgałęzianie jest bezpłatne, a łączenie jest łatwiejsze i czystsze). To, że nikt inny nie ma klonu twojego repozytorium, nie oznacza, że ​​korzyściami jakiegokolwiek DVCS są „nadmierne umiejętności”.

Ponadto powiedziałbym, że obsługa gałęzi Git jest mniej złożona niż SVN, z większymi nagrodami.

greyfade
źródło
Chyba powinienem był użyć „potężnego” zamiast „złożonego”
Anto
3
@Anto: nie ma znaczenia. Nadal powiedziałbym w zasadzie to samo: lepsze rozgałęzienie Gita po prostu nie ma wad, w porównaniu do SVN.
greyfade
3
Git nie będzie „zanieczyszczał” twojego drzewa źródłowego plikami śledzenia w każdym podkatalogu.
WarrenT
4
@WarrenT „zanieczyszczenie” drzewa źródłowego nie występuje w wersjach svn 1.7 i nowszych.
pllee
4
Utworzenie repozytorium systemu plików w Subversion to jedno polecenie ( svnadmin createplus jedno, aby wykonać początkowe pobranie lub import), nie trzeba konfigurować uprawnień i tak dalej. Nie przeczę, że Git jest często lepszym narzędziem, ale nieścisłości dotyczące Subversion nie są pomocne.
Josh Kelley
34

Myślenie, że nigdy nie rozgałęzisz własnego kodu, jest trochę krótkowzroczne. Kilka razy rozgałęziłem swój własny kod, szczególnie kiedy eksperymentowałem z nowym podejściem, o którym jeszcze nie byłem do końca przekonany. W końcu będziesz chciał tę funkcję.

To pochodzi od długiego użytkownika Subversion. Konsolidacja za pomocą jednego narzędzia może naprawdę ułatwić Ci życie.

Berin Loritsch
źródło
2
Tak, wierzę, że o to chodzi w gałęziach, eksperymentach. To była moja pierwsza rezerwacja podczas czytania pytania Op. Jeśli nie rozgałęziasz się w swoim repozytorium, „rozgałęziasz się” w twojej głowie i jest to po prostu bezsensowne, gdy masz kontrolę wersji.
Chris
3
Możesz rozgałęziać się z subwersją. I scalić. Raczej. Właściwie to jedyny raz, kiedy próbowałem, skończyło się na uszkodzonym repozytorium, z którym nie mogłem już dłużej pracować, i odzyskiwanie z kopii zapasowej (z już zastosowaną gałęzią) nie pomogło, więc straciłem całą historię i założenie nowego repozytorium ... ale obwiniłem to za przejście z 1.4.? do 1,5 (myślę, że to było kilka lat temu). Prawdopodobnie tak naprawdę działa rozgałęzianie i scalanie. Jeśli masz dość odwagi, by spróbować. Gdybym wtedy wiedział o zrzutu svn, oczywiście mógłbym rozwiązać problem z pewnym wysiłkiem.
Steve314,
@Chris, lubię mieć działającą wersję, do której mogę wrócić w dowolnym momencie. Pewnie możesz to zrobić za pomocą tagów, ale są chwile, kiedy gałąź ma doskonały sens. Nie zapomnij też o innych zaletach git / mercurial.
Berin Loritsch,
9

Overkill jest zarezerwowany na wypadek, gdy wystąpią dodatkowe szkody spowodowane przez „rozwiązanie”. Użycie pistoletu do zabicia muchy oznacza, że ​​pocisk trafia w inne miejsce. To przesada. Używanie czegoś potężniejszego niż to konieczne, które nie powoduje problemu, nie jest przesadą i może być dobrą rzeczą, jeśli pomaga usprawnić proces programowania. Nie powoduje szkód i pozwala zaktualizować tylko jeden zestaw oprogramowania zamiast dwóch. Dlaczego więc zawracać sobie głowę dwoma systemami zamiast jednego?

kamieniste
źródło
Może to być przesada (tak, z tą definicją), jeśli system wejdzie ci w drogę. Zastanawiam się, czy warto używać git do osobistych projektów. Czy możesz mi powiedzieć, jakie są szczególne zalety? Ta odpowiedź nie rozwiązuje tego problemu. Widzę git jako potężniejszy system i zbyt potężny dla osobistych projektów. Nie musi to jednak oznaczać żadnej szkody, o ile nie przeszkadza. Czy mógłbyś rozwinąć swoją odpowiedź?
Anto
1
Przesadność jest również stosowana, gdy nakład pracy związany z zastosowaniem rozwiązania jest nieproporcjonalny. Prawdopodobnie, jeśli już używasz subversion do lokalnych projektów, wysiłek potrzebny do nauczenia się Git lub czegokolwiek, to przesada. A może oczywiście przydatna lekcja rozwijająca umiejętności zbywalne. Osobiście nadal używam subwersji - ugryzło mnie to kilka razy, ale pozostawiły jedynie niewielkie blizny. Jestem zainteresowany nauką Gita, ale za każdym razem, gdy szukałem, samouczki, które znalazłem, były tajemnicze lub nie mogłem uzyskać stabilnych narzędzi dla systemu Windows lub istniała inna przeszkoda, która sprawiała, że ​​wszystko wydawało się przesadą.
Steve314,
7

Używam Gita do moich jednoosobowych projektów i uwielbiam to. Wcześniej korzystałem z Subversion i jeszcze nie widziałem wad korzystania z Git. Jest mocniejszy, ale nie w sposób, który komplikuje proste rzeczy. Tworzenie prostych rzeczy niepotrzebnie skomplikowanych / drogich / wolnych / itp. jest IMHO warunkiem koniecznym do nazwania czegoś przesadnym. Ponadto w Github rozwidliłem wcześniej projekty jednoosobowe innych osób, aby dodać pożądaną funkcję, a następnie wysłałem im prośby o ściągnięcie. Uważam, że to całkiem fajne, gdyby ktoś zainteresowany moimi projektami zrobił to samo.

dsimcha
źródło
7

Nigdy wcześniej nie korzystałem z kontroli źródła w osobistych projektach przed DVCS, więc trochę dziwne jest wyobrażanie sobie, że ktoś ma odmienne zdanie. Niektóre z moich powodów to:

  • Łatwy w konfiguracji i zrywaniu. Na przykład kolega dał mi w zeszłym tygodniu łamigłówkę programistyczną, którą rozwiązałem w kilku małych krokach. Zrobiłem repozytorium git, które trwało 45 minut, aby zatrzymać moją pracę, a potem jej nie było. Nie wiem, jak łatwo jest coś takiego obalić, ale nigdy nie słyszałem o tym, żeby ktoś to robił.
  • Bezładny. Dla mnie możliwość pracy offline jest znacznie bardziej korzystna dla projektu hobby niż dla pracy. Nie muszę wykopywać dziury w domowej zaporze ogniowej ani publicznie hostować projektu. Mogę tymczasowo umieścić repozytorium na pendrivie lub laptopie i nadal synchronizować wszystko.
  • Wszystko się kolokowało. Posiadanie repozytorium i działającego drzewa ułatwia śledzenie małych projektów podczas aktualizacji systemu operacyjnego.
  • Potężne funkcje. Jasne, nie potrzebuję mocy przez cały czas, ale jest tam, kiedy jej potrzebuję i nie zużywa żadnych zasobów, kiedy jej nie potrzebuję.
Karl Bielefeldt
źródło
6

Powiedziano mi, że git-bisectnaprawdę miło jest znaleźć dokładne zatwierdzenie, które wprowadziło dane zachowanie, nawigując w przód / tył w zatwierdzeniach, w zależności od danych wejściowych.

Państwo będzie musiał zrobić kilka dni do rzeczy po prostu nie można dowiedzieć się, co się stało.


EDYCJA: Również możliwość rozgałęzienia jest bardzo ważna, gdy musisz robić poprawki błędów w starych wersjach, z których korzystają klienci. Musisz być w stanie zarządzać „po prostu napraw tę drobiazg, ale nie chcę najnowszej wersji, ponieważ nie chcę teraz testować od nowa”.


źródło
2

To zależy od tego, jak poważnie chcesz zająć się wersjonowaniem własnego kodu. Jeśli budujesz na przykład prostą bibliotekę, która zawsze będzie miała aktualną wersję (lub tak długo, jak to prawda), osobiście skorzystam z podstawowej opcji tworzenia kopii zapasowych, takiej jak Dropbox. Jeśli stracisz cały kod, możesz go odzyskać z Internetu, a Dropbox ma 30-dniową kopię zapasową wersji, jeśli naprawdę robisz coś głupiego.

Jednak jeśli na przykład potrzebujesz utrzymywać gałęzie produkcji i deweloperów, git jest absolutnie doskonałym narzędziem - i to o wiele szybszym niż svn. Jednak pamiętaj o ryzyku awarii dysku twardego, jeśli przechowujesz dane tylko lokalnie.

Chris Moschini
źródło
1
Tak, używam DropBox do osobistych projektów. Wersjonowanie nie jest tak skomplikowane jak prawdziwy VCS, ale nadaje się do mniejszych projektów, które wykonuję w wolnym czasie i nie wymaga żadnej uwagi (np. Brak zatwierdzeń, pliki aktualizują się podczas pracy nad nimi.)
jhocking
och, nawiasem mówiąc, ponieważ tworzę gry, moje projekty zwykle zawierają wiele plików binarnych (pliki obrazów, klipy audio itp.), a większość systemów kontroli wersji jest naprawdę przeznaczona tylko dla kodu źródłowego.
jhocking
Git działa dobrze z plikami binarnymi, różnice są po prostu mniej interesujące. Na szczęście różnicowanie w git nie jest dokładnie zablokowane - jeśli możesz znaleźć binarne narzędzie do porównywania, które kochasz, możesz z niego łatwo korzystać w git (z wiersza poleceń)
Chris Moschini
Powiedziano mi, że Git marnuje dużo plików binarnych do przechowywania wersji, ale to, co mi powiedziano, może być nieprawidłowe. Zasadniczo powiedziano mi, że większość zasobów binarnych (przypuszczam, że nie wszystkie pliki binarne, ale obrazy i dźwięki wchodzące w grę) muszą zostać w całości zapisane w każdej wersji, więc Git zapełnia twój dysk twardy lokalnym repozytorium.
jhocking 21.04.11
Jest to marnotrawstwo tylko wtedy, gdy nie masz na myśli wersji plików binarnych. Jeśli musisz je zaktualizować, historia wersji nie jest marnotrawstwem. Myślę, że przypadkowo sugerują, że git przesadza z historią swoich wersji podczas śledzenia plików binarnych - to nieprawda. git.wiki.kernel.org/index.php/GitSvnComparsion
Chris Moschini
2

Zawsze, zawsze, zawsze używam systemu kontroli wersji dla każdego projektu deweloperskiego. Duże lub małe naprawdę nie ma znaczenia. Niezależnie od tego, czy gram w domu z jakąś nową technologią, piszę małego pomocnika, aby ułatwić sobie życie, czy pracuję zawodowo w dużym i rozproszonym zespole - zawsze chciałbym, aby system kontroli wersji wspierał mnie.

Oczywiście, przez większość czasu w małych projektach osobistych nie będziesz korzystać z większości funkcji, ale założenie repozytorium git (lub nawet lokalnego repozytorium Subversion) nie jest niczym wielkim, więc idź! I zanim się zorientujesz, będziesz chciał wiedzieć „cholera, jaka była zawartość pliku X w ostatni piątek?”. Bez kontroli wersji - powodzenia ;-)

Tak więc naprawdę nie ma znaczenia, czy używasz git czy SVN - osobiście zaczynam migrować coraz więcej rzeczy z SVN do git, ale najważniejsze jest w ogóle korzystanie z kontroli wersji - nawet w przypadku drobiazgów.

perdian
źródło
1

Tylko dlatego, że nikt o tym nie wspominał: w przypadku osobistych projektów darcs jest naprawdę dobry i mniej zaangażowany niż git do prostej kontroli wersji. Nie jest tak szybki w przypadku większych projektów, ale także Subversion!

Wlangstroth
źródło
1
To brzmi w pewien sposób związane z tym, jak dobrze znasz darki. Nigdy go nie używałem, ale często używałem git. Dla mnie git jest bardzo prosty, ale założę się, że drapałbym się po głowie, gdybym miał użyć darcs.
Sam
1
Jeśli już opanowałeś szalony interfejs użytkownika git, darcy byłyby ciastkiem.
wlangstroth,
1
czy możesz wyjaśnić, dlaczego darcs jest lepszy dla małych projektów niż git?
shabunc
0

Zrozumienie, że tym, co robimy, jest eksperymentowaniem. Posiadanie taniego / łatwego narzędzia do obsługi tego, zwiększa twoją zdolność do poruszania się do przodu, częściowo dlatego, że zwiększa twoją zdolność do wycofania się z dowolnego eksperymentu, gdy okaże się źle.

Wielu programistów mówi: Cóż, robię po prostu kopie mojego kodu. Ale kopie te stają się trudne do zarządzania i stają się bałaganem. Masz wiele kopii i nie pamiętasz, dla której z nich, a następnie spróbuj dowiedzieć się, kiedy można je bezpiecznie usunąć.

Wszystko to staje się jeszcze bardziej cenne, gdy eksperyment wymaga skoordynowanych zmian w wielu plikach. A gdy jest to solo, użycie Git staje się jeszcze prostsze.

Zamiast zastanawiać się, czy powinienem użyć go w solowym projekcie, teraz myślę, jaka szkoda, że ​​nie odkryłem tego wcześniej.

WarrenT
źródło
Aby zobaczyć opinie projektanta na ten temat, obejrzyj Linusa na Git na YouTube (~ 70 minut)
WarrenT