Ta odpowiedź próbuje odpowiedzieć na pytanie, jak zainteresować starszych programistów git
, a nie na temat tego, jak git
najszybciej się uczyć - do tego świetna książka git jest świetna lub jakakolwiek ilość samouczków (=> Google). Dobre linki z tą odpowiedzią to, że Git to czysto funkcjonalna struktura danych, a zwłaszcza krótki sposób przechowywania danych przez git .
Obawiam się, że mam raczej ponury pogląd na ten temat. Byłem dokładnie w twoich butach - jestem git
kujonem i chciałem odmienić drużynę od svn
, spójrzmy prawdzie w oczy, drobne wyniki. W moim przypadku doprowadziło mnie to do aktywnej zmiany własnego postrzegania i zaakceptowania tego, że ludzie po prostu nie mogą być „zmuszeni do szczęścia”. Ludzie nie są komputerami, programowanie ich jest niezwykle trudne. Nadal cieszę się, że próbowałem, pokazało mi to w dość delikatny sposób to, co robię i czego nie chcę robić w życiu zawodowym.
Są ludzie, którzy zaczynają się motywować, gdy pojawiają się nowe rzeczy, i są tacy, którzy są zdemotywowani. Nie ma to nic wspólnego z tym git
, że git
konkretnie zawsze masz efekt „dlaczego w ogóle powinniśmy go używać, jeśli svn
jest w porządku?”, Co stanowi ogromną barierę psychologiczną.
Ponadto naprawdę grokking git
wymaga intensywnego zainteresowania abstrakcyjnymi strukturami danych. Może to zabrzmieć niewiarygodnie, ale z mojego doświadczenia wynika, że są programiści, którzy w ogóle nie są zainteresowani, i którzy są znudzeni i przeciążeni elementami bardziej złożonymi niż proste tablice. Możesz spierać się w kółko, czy ci powinni wykonywać pracę, którą wykonują, ale tak właśnie jest.
Jeśli ludzie nie są zainteresowani, nie zrozumieją. Prosty i prosty. Założę się, że brak zainteresowania jest główną przyczyną złych ocen w szkole, a nie braku inteligencji.
To powiedziawszy, byłby to program nauczania, gdybym go zastosował, oparty na gromadzeniu wiedzy od dołu do góry. Dla mnie to nie zadziałało, ale możesz wziąć to za inspirację, aby rzucić własne.
GUI
Natomiast następujące podejście niekoniecznie musi GUI poparcie dla działań ( git add
w świecie repozytorium Hello ...), to pomaga ogromnie mieć GUI do wizualizacji repozytorium, od samego początku. Jeśli nie możesz zdecydować, którego użyć, wybierz gitk
ostateczność. Jeśli twoi faceci używają dowolnego edytora wizualnego, znajdź ich git
komponent GUI.
Kluczowa jest (statyczna) struktura danych
Zacznij od wyjaśnienia wewnętrznych typów danych (są tylko trzy plus jeden: obiekty BLOB, drzewa, zatwierdzenia, tagi z adnotacjami, z których ostatni nie ma żadnego znaczenia na tym etapie) i ich struktury. Możesz to łatwo zrobić na tablicy / ołówkiem; drzewo jest łatwe do narysowania, ponieważ nigdy nie można go zmienić, możesz dosłownie dodawać rzeczy przez cały czas. Można zrobić sesję zabaw w świeżo utworzonym lokalnym repozytorium i użyć git cat-file
do zbadania rzeczywistych obiektów, aby pokazać im, że są one w rzeczywistości tak trywialne jak reklamowane.
Jeśli możesz im pomóc to zrozumieć
- ... w historii są dosłownie tylko 3 typy obiektów, wszystkie bardzo proste, prawie trywialne i
- ... większość
git
podkomend po prostu „masuje” te obiekty w taki czy inny sposób, wykonując niemal trywialne operacje (w zasadzie jest tylko jeden: dodaj gdzieś nowe zatwierdzenie) i ...
- ... wszystko można łatwo zobaczyć przed sobą
ls
i git cat-file
...
wtedy będą mieli mentalne tłumaczenie tego, co faktycznie znajduje się w repozytorium. W tym momencie seniorzy mogą pamiętać, że wnętrze to magia tajemna svn
(kiedykolwiek miałeś problemy z zamkami w repozytorium svn lub z „reintegrującymi” gałęziami i tak dalej?), A to może tylko trochę je motywować.
Jednym z problemów, szczególnie wśród ludzi, którzy są przyzwyczajeni svn
, jest przyzwyczajenie się do tego, że jedno zatwierdzenie (obiekt, a nie akcja) zawsze jest całym drzewem katalogów. W svn
ludzie są używane do zatwierdzania pojedynczych plików. Jest to całkowicie odmienne podejście. Aha, i fakt, że ten sam termin „zatwierdzenie” jest używany zarówno dla obiektu statycznego, jak i akcji, również nie pomaga.
Innym problemem dla svn
facetów jest to, że svn
używa historii liniowej, a nie drzewa. To znowu jest zupełnie inne. Czas więc bardzo dużo wskazać na te różnice .
Działania wyjaśnione w odniesieniu do struktury
Kiedy zrozumieją, z jakich części git
składa się repozytorium, nadszedł czas, aby pokazać im dokładnie, co git
robią poszczególne podkomendy.
Mówię o add
, commit
w połączeniu z lokalnym katalogiem roboczym i sceną (upewnij się, że rozumieją, że katalog roboczy nie jest taki sam jak obszar pomostowy, który nie jest taki sam jak repozytorium).
Kiedy zrozumieją, że te polecenia po prostu powiększają drzewo (które, na tym etapie, składa się z 3 rodzajów - obiektów blob, drzew, zatwierdzeń, a nie tylko zatwierdzeń), możesz zrobić pierwsze git push
i git pull
(w trybie szybkiego przewijania do przodu! ), aby pokazać im, że git
dosłownie przesuwa tylko swoje obiekty, że skróty to tak naprawdę tylko skróty zawartości, że możesz łatwo kopiować te elementy za pomocą polecenia kopiowania systemu plików i tak dalej.
Oczywiście, trzymaj się z dala od wszelkich nieistotnych opcji tych poleceń, mówimy git add hello.txt
tutaj.
Gałęzie
Pamiętaj, że rozgałęzienie jest szczególnie trudne dla svn
ludzi, ponieważ jest zupełnie inne. svn
Model jest znacznie łatwiej wyobrazić, jak tam jest w zasadzie nic do wizualizacji - jest na widoku. git
Model nie tak dużo. Upewnij się, że od samego początku są świadomi, że gałęzie i znaczniki są po prostu „karteczkami”, które gdzieś wskazują, i że tak naprawdę nie „istnieją” w kontekście statycznej, niezmiennej historii.
Następnie wykonaj przykład po prostym przykładzie, aby pokazać, co możesz z nimi zrobić. Ponieważ wydaje się git
, że jesteś przyzwyczajony , nie powinieneś mieć problemów ze znalezieniem motywacji. Upewnij się, że zawsze widzą to w kategoriach wzrostu drzewa.
Jeśli tak, możesz wyjaśnić, jak git pull
to jest naprawdę git fetch && git merge
; jak wszystkie repozytoria faktycznie zawierają dokładnie te same obiekty ( git fetch
jest prawie tak samo jak kopiowanie rzeczy w scp
katalogu obiektów git) i tak dalej.
Prawdopodobnie, jeśli do tego czasu nie dotrzesz, aby obudzić ich zainteresowanie, możesz równie dobrze się poddać, ale jeśli uda im się dotrzeć tak daleko, to będą mieli do dyspozycji wszystkie narzędzia mentalne i nie powinno ich być niewiele w grę wchodzi już strach. Reszta (git workflow ...) powinna być wtedy z górki.
Ostatnie słowa
To brzmi jak duży wysiłek i naprawdę tak jest. Nie sprzedawaj tego jako „potrzebujemy tego do tego projektu”, ale „to pomaga ci osobiście się rozwijać i pomoże ci we wszystkich twoich dalszych interakcjach”. Potrzebujesz na to dużo czasu, a czas to pieniądz. Jeśli nie masz akceptacji kierownictwa, może to po prostu nie być tego warte; powinieneś porozmawiać o tym ze swoim szefem.
Jeśli zdecydujesz, że chcesz zrezygnować z nauczania programistów, którzy najwyraźniej nie są w stanie go zrozumieć, ale absolutnie musisz go użyć git
w przyszłości, zastanów się nad zastąpieniem wszelkiej interakcji git
poleceniami za pomocą gotowych skryptów lub jakiegoś GUI, który zabiera wszystkie git
szczegóły. Wlej całą kontrolę błędów itp. Do skryptów i spróbuj ją uruchomić.