Questa risposta cerca di indirizzare come interessare i programmatori senior git
, non su come imparare git
nel modo più rapido - per questo, l'eccellente git book è eccezionale, o qualsiasi numero di tutorial (=> Google). Buoni collegamenti con questa risposta sono Git è una struttura di dati puramente funzionale o in particolare il breve How git archivia i tuoi dati .
Temo di avere una visione piuttosto desolante su questo. Sono stato esattamente nei tuoi panni: sono un git
secchione e volevo trasformare una squadra lontano da svn
, diciamocelo, risultati minuscoli. Nel mio caso mi ha portato a cambiare attivamente la mia percezione e ad accettare quella gente, semplicemente non può essere "costretto alla felicità". Le persone non sono computer, è incredibile programmarle. Sono ancora felice di aver provato, mi ha mostrato in modo piuttosto morbido cosa faccio e cosa non voglio fare nella mia vita professionale.
Ci sono persone che iniziano a motivarsi quando sono coinvolte nuove cose e ci sono persone demotivate. Questo non ha nulla a che fare con git
, ma in git
particolare si ha sempre l'effetto di "perché dovremmo usarlo se svn
va bene?", Che è una massiccia barriera psicologica.
Inoltre, davvero il trekking git
richiede un intenso interesse per le strutture di dati astratte. Può sembrare incredibile, ma nella mia esperienza ci sono programmatori che non hanno alcun interesse e che sono annoiati e sovraccaricati da elementi più complessi delle matrici semplici. Puoi discutere avanti e indietro se quelli dovrebbero fare il lavoro che stanno facendo, ma è quello che è.
Se le persone non sono interessate ad esso, non lo capiranno. Chiaro e semplice. Scommetterei che il disinteresse è la ragione principale dei cattivi voti a scuola, non della mancanza di intelligenza.
Detto questo, qui sarebbe un curriculum come lo applicherei, basato sull'accumulo di conoscenza dal basso verso l'alto. Non ha funzionato per me, ma potresti prenderlo come ispirazione per creare il tuo.
GUI
Sebbene il seguente approccio non necessiti necessariamente del supporto della GUI per le azioni ( git add
in un repository ciao mondo ...), aiuta enormemente avere una GUI per visualizzare il repository, fin dall'inizio. Se non riesci a decidere su quale utilizzare, prendi gitk
l'ultima risorsa. Se i tuoi ragazzi usano qualsiasi tipo di editor visivo, trova il loro git
componente GUI.
La struttura dei dati (statica) è la chiave
Inizia spiegando i tipi di dati interni (ce ne sono solo tre più uno: BLOB, alberi, commit, tag annotati, l'ultimo dei quali non interessa affatto in questa fase) e la loro struttura. Puoi farlo facilmente sulla lavagna / con una matita; l'albero è facile da disegnare in quanto non può mai essere modificato, puoi letteralmente aggiungere roba tutto il tempo. È possibile effettuare una sessione di gioco in un repository locale appena creato e utilizzare git cat-file
per esaminare gli oggetti reali per mostrare loro che in realtà sono banali come pubblicizzati.
Se puoi aiutarli a capirlo
- ... ci sono letteralmente solo 3 tipi di oggetti nella storia, tutti molto semplici, quasi banali e
- ... la maggior parte dei
git
sottocomandi semplicemente "massaggia" quegli oggetti in un modo o nell'altro, con operazioni quasi banali (in pratica, ce n'è solo uno: aggiungi un nuovo commit da qualche parte), e ...
- ... tutto può essere facilmente visto di fronte a te con
ls
e git cat-file
...
quindi avranno la traduzione mentale di ciò che è effettivamente nel repository. A questo punto, i seniouri potrebbero ricordare che gli interni di svn
sono magie arcane ( hai mai avuto problemi con le serrature all'interno del repository svn, o con rami "reintegranti" e simili?), E questo potrebbe solo motivarli un po '.
Un problema, in particolare con chi è abituato a svn
, è quello di abituarsi all'idea che un commit (l'oggetto, non l'azione) sempre è tutto l'albero di directory. In svn
, le persone vengono utilizzate per eseguire il commit di singoli file. È un approccio radicalmente diverso. Oh, e il fatto che lo stesso termine "commit" sia usato sia per un oggetto statico che per un'azione non aiuta neanche.
L'altro problema per i svn
ragazzi è che svn
usa una storia lineare, non un albero. Questo è, ancora una volta, molto diverso. Quindi questo è il momento di puntare di queste differenze molto .
Azioni spiegate in termini di struttura
Quando hanno capito da quali parti git
è composto un repository, è tempo di mostrare loro esattamente cosa fanno i singoli git
sottocomandi in termini di quelli.
Sto parlando add
, commit
insieme alla directory di lavoro locale e allo stage (assicurarsi che comprendano che la directory di lavoro non è la stessa dell'area di gestione temporanea che non è la stessa del repository).
Quando hanno capito che questi comandi fanno semplicemente crescere l'albero (che, di nuovo, in questa fase, è costituito da 3 tipi: macchie, alberi, commit, non solo commit), puoi fare un primo git push
e git pull
(in modalità avanzamento veloce! ) per mostrare loro che git
sta letteralmente solo spingendo i suoi oggetti in giro, che gli hash sono in realtà solo hash di contenuto, che puoi facilmente copiare queste cose con un comando di copia del file system e così via.
Ovviamente, stai lontano da qualsiasi opzione non essenziale di quei comandi, stiamo parlando git add hello.txt
qui.
filiali
Si noti che la ramificazione è particolarmente difficile per le svn
persone, poiché è totalmente diversa. Il svn
modello è molto più facile da visualizzare, poiché praticamente non c'è nulla da visualizzare: è in bella vista. Il git
modello non è così tanto. Assicurati che siano consapevoli fin dall'inizio che rami e tag sono solo "note adesive" che puntano da qualche parte, e in realtà non "esistono" in termini di storia statica, immutabile.
Quindi fai un esempio dopo l'altro per mostrare cosa puoi effettivamente fare con loro. Come sembra che tu stesso ti sia abituato git
, non dovresti avere problemi a trovare motivazione lì. Assicurati di vederlo sempre in termini di come l'albero cresce.
Se hanno questo verso il basso, puoi spiegare come git pull
è realmente git fetch && git merge
; come tutti i repository contengano esattamente gli stessi oggetti ( git fetch
è quasi lo stesso della copia di oggetti scp
all'interno della directory degli oggetti git) e così via.
Probabilmente, se a questo punto non hai raggiunto per suscitare il loro interesse, allora puoi anche rinunciare, ma se riescono ad arrivare così lontano, allora hanno tutti gli strumenti mentali a loro disposizione e dovrebbero esserci pochi la paura è più coinvolta. Il resto (flusso di lavoro git ...) dovrebbe essere in discesa allora.
Ultime parole
Sembra un grande sforzo, e lo è davvero. Non venderlo come "ne abbiamo bisogno per questo progetto" ma "questo ti aiuta a sviluppare personalmente e ti aiuterà in tutte le tue ulteriori interazioni". Hai bisogno di molto tempo per questo, e il tempo è denaro. Se non si ha l'accettazione da parte della direzione, potrebbe non valerne la pena; dovresti forse parlarne con il tuo capo.
Se decidi di voler smettere di insegnare agli sviluppatori che apparentemente non sono in grado di afferrarlo, ma devi assolutamente usarlo git
in futuro, considera la possibilità di sostituire tutte le interazioni con i git
comandi con script elaborati o alcune GUI che tolgono tutti i git
dettagli. Versare tutto il controllo degli errori ecc. Negli script e provare a farlo funzionare.