Od TFS do Git

14

Jestem programistą .NET i wielokrotnie używałem TFS (serwer fundacji zespołu) jako mojego oprogramowania do kontroli źródła. Dobre cechy TFS to:

  1. Dobra integracja z Visual Studio (więc robię prawie wszystko wizualnie; bez poleceń konsoli)
  2. Łatwe wymeldowanie, proces zameldowania
  3. Łatwe łączenie i rozwiązywanie konfliktów
  4. Łatwe automatyczne kompilacje
  5. Rozgałęzienie

Teraz chcę używać Git jako szkieletu, repozytorium i kontroli źródła moich projektów open source. Moje projekty są w języku C #, JavaScript lub PHP z bazami danych MySQL lub SQL Server jako mechanizm przechowywania.

Właśnie skorzystałem z pomocy github.com w tym celu, utworzyłem tam profil i pobrałem GUI dla Git. Do tej części było tak łatwo.

Ale prawie utknąłem na dalszych krokach. Chcę po prostu wykonać kilka prostych (naprawdę prostych) operacji, w tym:

  1. Tworzenie projektu w Git i mapowanie go do folderu na moim laptopie
  2. Sprawdzanie / sprawdzanie plików i folderów
  3. Rozwiązywanie konfliktów

To wszystko, co muszę teraz zrobić. Wygląda jednak na to, że GUI nie jest tak przyjazny dla użytkownika. Oczekuję, że GUI będzie mieć Connect To...coś takiego, a następnie spodziewam się, że zostanie wyświetlona lista projektów, a kiedy wybiorę jeden, spodziewam się zobaczyć listę plików i folderów tego projektu, podobnie jak eksploracja projektu TFS w Visual Studio. Następnie chcę móc kliknąć plik prawym przyciskiem myszy i wybrać check-in...lub check-outi tak dalej.

Czy oczekuję dużo? Co powinienem zrobić, aby łatwo korzystać z Git tak jak TFS? Czego tu brakuje?

Saeed Neamati
źródło
8
Rok temu przestawiłem się z SVN na git i jestem z tego bardzo zadowolony. NIE poleciłbym SVN nikomu oprócz sztywnego hejtera linii poleceń. Gdy nauczysz się git, pokochasz go.
maaartinus
14
Dlaczego ludzie z Windows mają taką obsesję na punkcie interfejsów graficznych?
tdammers
8
@tdammers Ponieważ wiersz poleceń w systemie Windows jest do kitu jak cholera? Wiem, że jest PowerShell, ale czy oni go używają?
maaartinus
3
@ Tak, na początek spodziewasz się, że istnieje coś takiego jak sprawdzanie i wysyłanie plików w git. Żaden użyteczny VCS nie miał tego od lat.
Daniel Roseman
1
Zalecana lektura: ericsink.com/entries/vcbe_print_edition_free.html Wyjaśnia podstawy kontroli wersji i różnice między scentralizowanym a zdecentralizowanym (które mogłyby nadal korzystać z centralnego serwera).
Inca

Odpowiedzi:

19

Zalety git wynikają z odrzucenia wielu starych założeń dotyczących tego, co powinien zrobić VCS. Wady git wynikają z niemożności wykorzystania wcześniejszego doświadczenia i niemożności robienia rzeczy tak, jak jesteś przyzwyczajony.

Jeśli zamierzasz przejść z czegoś innego na git, spróbuj uruchomić tabula-rasa (chociaż nie jest to możliwe w praktyce). Oceń to na podstawie tego, co robi i jak dobrze to robi, a nie jak to robi w porównaniu do tego, jak jesteś przyzwyczajony do tego. Nie chodzi o to, że oczekujesz zbyt wiele, ale o to, że twoje oczekiwania są ortogonalne względem tego, co zapewnia git. Jeśli jesteś żonaty z operacją GUI, będziesz rozczarowany. Git ma dostępne narzędzia GUI, ale niewiele dodają. To nie jest brak dostarczenia ich tak bardzo, że gui może dodać niewiele. GitK pomaga nie w codziennych operacjach, ale w wizualizacji struktury gałęzi i analizowaniu lub przeszukiwaniu historii.

Oto głupia analogia do tego, co rozumiem przez „ortogonalny”. Jedną z rzeczy, które możesz zrobić z gazetą, jest owinięcie w nią ryb lub użycie jej do wyłożenia klatki dla ptaków. Ale nie są one niezbędne do funkcjonowania gazety, są to przypadkowe cechy formy, w jakiej się pojawia. Oczekuje, że git „sprawdzi pliki” lub „pozwoli ci wybierać projekty” lub zapewni „połącz z ... ”przypomina trochę oczekiwanie, że uda się owinąć ryby lub wyłożyć klatki dla ptaków na stronie internetowej gazety .

Kylben
źródło
Ups, zapomniałem wyjaśnić edycję. Właśnie dodałem ostatni akapit po tym, jak wstałem po więcej kawy i mając analogię w głowie.
kylben
3
W końcu pokochałem metaforę. +1
Yam Marcovic
7

Czy rozważałeś rtęć? Podobnie jak git, jest to DCVS i pozwala robić wszystkie fajne rzeczy, które można zrobić z DCVS. Podobnie jak git, istnieje całkiem niezły dostawca usług w chmurze (bitbucket). Ale, w przeciwieństwie do gita, historia systemu Windows jest całkiem przyzwoita, nie jesteś obywatelem drugiej klasy. Masz dobre opcje narzędzi (TortiseHG) i całkiem przyzwoitą integrację Visual Studio (VisualHG).

Jednak w studiu wizualnym nic nie będzie takie jak TFS - świat po prostu nie jest tak okablowany.

Wyatt Barnett
źródło
1
Zgodziłbym się, kilka lat temu przeniosłem się z VSS do Mercurial i było to prawdziwe objawienie. Nagle mogłem robić rzeczy, które nigdy nie wydawały mi się praktyczne. Potem przeniosłem się svni przegapiłem wiele rzeczy, które były tak łatwe hg. Teraz przeprowadzam się giti mam mieszane uczucia. Uwielbiam odzyskiwać wiele udogodnień, za którymi tęskniłem svn, ale wciąż tęsknię za prostotą w hgporównaniu do niepotrzebnej złożoności git. Nawet sama instalacja TortoiseGit w systemie Windows wymaga przeskakiwania przez obręcze, które po prostu nie są konieczne w TortoiseHg .
Mark Booth
@Mark Booth: Zgadzam się, że git nie jest zbyt przyjazny dla użytkownika, ale jaka niepotrzebna złożoność ? Problemy z instalacją się nie liczą, można je przypisać TortoiseGit (który jest innym programem) lub Windowsowi.
maaartinus
Byłoby lepiej na czacie, ale nie widzę potrzeby cokolwiek dla cache / obszaru indeksu / oczekiwania, IMHO za zwłokę powinny być popełnić wszystko z możliwością częściowych zobowiązuje jeśli wniosek (jeszcze lepiej byłoby odłożyć odpowiednie zmiany don nie chcę od razu, ponownie uruchom testy jednostkowe, zatwierdź, a następnie usuń pomoc. Nienawidzę też konieczności jawnego tworzenia nowego oddziału, kiedy go chcę. Dzięki hg bezimienna gałąź jest tworzona w trybie cichym, ilekroć zdecydujesz się na nie-głowę. W git, jeśli odejdziesz od głowy bez rozgałęzień, możesz potencjalnie ją zgubić, a następnie zebrać śmieci!
Mark Booth,
6

Rok temu przeszedłem z SVN na git i jestem z tego bardzo zadowolony. Jednak nie polegam na żadnym GUI, a jeśli sztywno odmówisz wiersza poleceń, może to stanowić problem.

Wydaje się, że spodziewasz gitsię działać tak, jak zwykle, ale tak nie jest. Nie jest to trudne, ale zanim przejdziesz dalej, powinieneś zapoznać się z jego zasadami.

Tworzenie projektu w Git i mapowanie go do folderu na moim laptopie

Git jest dystrybuowany, co oznacza, że ​​zawsze pracujesz z lokalnym repozytorium, które może być mapowane na dowolną liczbę pilotów, w tym zero. Podczas zabawy z projektem innej osoby używam dwóch pilotów: ich repozytorium git lub SVN i mojego własnego serwera.

Zawsze zaczynam od utworzenia pustego katalogu a następnie albo git initalbo git clone SOME-REMOTE-REPOSITORY. Ten link może ci pomóc.

Sprawdzanie / sprawdzanie plików i folderów

Nie udało Ci się napisać, jakiego GUI używasz. Zarówno TortoiseGiti git-guina pewno może to zrobić.

Rozwiązywanie konfliktów

Do tego używam git-guilub mojego ulubionego edytora tekstu.

Oczekuję, że GUI będzie miało Connect To ... lub coś takiego

Połącz z czym, kiedy może być 0 do N pilotów? Git nie pozostaje połączony ze zdalnym serwerem, tworzy połączenie tylko tymczasowo i tylko dla kilku poleceń pracujących ze zdalnym repozytorium. Większość pracy wykonywana jest lokalnie.

następnie oczekuję, że zostanie wyświetlona lista projektów

Zakładam, że projectsmasz na myśli repositories.

Obawiam się, że nie ma czegoś takiego. Git na zdalnym serwerze działa ściśle tylko z jednym repozytorium. Wyświetlanie wszystkich repozytoriów jest równoważne z wyświetlaniem wszystkich katalogów zawierających podkatalog .git. Jestem pewien, że jest coś takiego GitHub.

Wybieram jeden, spodziewam się zobaczyć listę plików i folderów tego projektu, podobnie jak eksplorację

Ponownie obawiam się, że nie ma czegoś takiego, ponieważ gitdziała lokalnie. I znowu nie przydałoby się wiele. Po prostu klonuj repozytorium i przeglądaj je na swoim komputerze. Podczas gdy klonowanie dużych repozytoriów zajmuje trochę czasu, wszystkie kolejne operacje są znacznie szybsze i możesz spojrzeć na dowolne zatwierdzenie lub gałąź.

Następnie chcę móc kliknąć plik prawym przyciskiem myszy i wybrać opcję zameldowania ... lub wymeldowania i tym podobne.

Znowu gitdziała lokalnie. Nie ma więc sensu zameldowanie się ani wyrejestrowanie w zdalnym repozytorium. Praca w ten sposób to strata czasu nawet w szybkiej sieci LAN. Pobierz repozytorium na swój komputer, pracuj z nim i git pushzmianami w pilocie. Pomyśl o tym jak o opublikowaniu zmian i tworzeniu kopii zapasowej. Powinieneś popełniać bardzo często lokalnie .

Przed rozpoczęciem pracy git fetchlub git pullzmian wprowadzonych z pilota na wypadek, gdyby ktoś inny z nim pracował.

Czy oczekuję dużo?

Tak i nie. Oczekujesz czegoś innego niż to, co oferuje. Możesz uzyskać coś znacznie lepszego, gitjest mocny, elastyczny, bezpieczny, szybki jak diabli i może zrobić wszystko, czego potrzebujesz, ale nie może dokładnie naśladować tego, co robi scentralizowany system VCS.

maaartinus
źródło
5

Sprawiłem, że podróż ze źródła wizualnego jest bezpieczna do TFS, SVN i GIT.

Przejście od vss do tfs było przyjemnym doświadczeniem. Przejście z TFS do SVN było przyjemnym doświadczeniem. Przejście z svn na git było rodzajem wewnętrznej bitwy.

Często uważam się za konserwatywnego i staram się trzymać tego, co działa. Ładne GUI jest dla mnie lepsze niż wiersz poleceń, a ja szukałem GUI, które pozwoliłyby mi bawić się z fajnymi dziećmi, z którymi pracuję. Wszyscy używali git wyłącznie z linii poleceń.

Moment eureki przyszedł dla mnie, gdy zrezygnowałem z poszukiwania GUI ze srebrną kulą i zacząłem próbować git bash (wciąż się uczę).

Mam zainstalowane GUI, które uzupełniają git z wiersza poleceń. Rozszerzenia Git, dostawca kontroli źródła Git dla studia wizualnego i gita żółwia. Ale mówię, że zapoznaj się z git bash. Polecenia mogą być nieco tajemnicze, ale kiedy się ich nauczysz, są one znacznie szybsze niż GUI.

Rozgałęzienie za pomocą git jest po prostu NIESAMOWITE w porównaniu do innych. Twórz gałęzie i przełączaj między nimi niemal natychmiast. Możesz robić rzeczy, których nie chciałbyś robić z svn, ponieważ svn w zasadzie kopiuje twoją kopię roboczą (przynajmniej tak jak ja to zrobiłem).

Uważam, że Git ma bardziej stromą krzywą uczenia się niż svn. Ale kiedy „dostaniesz” za pomocą git, nie chcesz wracać.

Git do końca.

tomasat
źródło
5

Jesteś przyzwyczajony do posiadania serwera, który przechowuje twoje pliki i jest ich wszechmocnym właścicielem. Aby edytować plik, musisz poprosić o zgodę serwera.

Git nie jest taki. Pomyśl o git w ten sposób: masz lokalne repozytorium. Git pozwala zatwierdzać zmiany, cofać zatwierdzenia, łatwe i szybkie rozgałęzianie itp. Gdy chcesz wykonać kopię zapasową historii kontroli źródła, przesuwasz zmiany do innego repozytorium, które „po prostu jest” serwerem, takim jak GitHub.com.

Przepływ pracy:

  1. Klonuj (Pobierz) / Utwórz repozytorium
  2. Wprowadź zmiany. Kontynuuj rozwój bez dbania o innych.
  3. Przekaż do innego repozytorium (może to być serwer taki jak GitHub).
  4. Gdy wypychasz do repozytorium, właściciel tego innego repozytorium jest powiadamiany o oczekującym wypychaniu i musi zdecydować, czy zaakceptować te zatwierdzenia, odrzucić je, czy tylko wziąć ich podzbiór.
  5. Cykl trwa.

To wszystko.

Yam Marcovic
źródło
1

Co masz na myśli mówiąc „git gui”? Jest ich mnóstwo, w tym wtyczka do integracji ze studiem wizualnym, o ile dobrze pamiętam. Jeśli jeden interfejs GUI nie działa dla Ciebie, spróbuj jeszcze raz, aż znajdziesz taki, który działa. Osobiście używam różnych GUI do różnych zadań (i CLI do innych).

Jednak git jest bardziej strukturą kontroli wersji niż stałym systemem. Nadal będziesz musiał nauczyć się podstaw, aby jak najlepiej z tego skorzystać.

Karl Bielefeldt
źródło
-2

Czy oczekuję dużo?

tak

Co powinienem zrobić, aby łatwo korzystać z Git tak jak TFS?

Nic. Git jest skoncentrowany na CLI i nie ma dobrego frontendu (wiem o TortoiseGit, co nie jest odpowiedzią w porównaniu do innych Tortoise *). Możesz spróbować użyć SmartGit (uważaj na Javę)

Leniwy Borsuk
źródło
1
-1: Sprawdzanie plików we / wy i rozwiązywanie konfliktów nie „oczekuje wiele” od kontroli źródła.
Steven Evers
2
+1 Sprawdzanie ich bezpośrednio ze zdalnego serwera po prostu nie ma sensu. To tylko spowolnienie, nawet przez LAN. Robienie takich rzeczy to coś, do czego służy FTP, a nie VCS.
maaartinus
1
„Sprawdzanie / wylogowywanie” plików nie jest podstawową operacją dla VCS. Jest to funkcja implementacji wspólna dla większości VCS, która ma subtelne, ale niefortunne skutki uboczne.
kylben
2
@kylben: rejestracja we / wy to jeden ze sposobów patrzenia na kontrolę wersji; edycja i scalanie to inny sposób. Niektóre VCS wykorzystują poprzednie podejście, dając ci wyłączne blokady i możliwość sprawdzania pojedynczych plików; inni biorą to drugie, a wraz z nimi pobierasz całe repozytorium, wprowadzasz lokalne zmiany, a następnie wypychasz je z powrotem do pilota; VCS zajmuje się zarządzaniem konfliktami zmian, prosząc o informacje w razie wątpliwości. Żadne z tych podejść nie jest lepsze, ale zwykle nie można wygiąć VCS w ten, dla którego nie został stworzony.
tdammers
1
Przez „odprawianie / wylogowywanie” mówiłem o tym, w jaki sposób VCS oparte na blokowaniu implementują rzeczy, a nie o tym, jak można pobierać pliki źródłowe do edycji (co jest rzeczywiście czymś, co każdy VCS musi umieć zrobić). Fakt, że wiele VCS odnosi się do samego procesu pobierania pliku jako „kasy”, jest trochę błędnym IMO - nic nie jest sprawdzane, a repozytorium nie pamięta, kto ma plik.
tdammers