Jawaban ini mencoba membahas bagaimana membuat pemrogram senior tertarik git
, bukan tentang cara mempelajari git
cara tercepat - untuk itu, buku git yang hebat itu hebat, atau tutorial dalam jumlah berapa pun (=> Google). Tautan yang baik untuk menjawab pertanyaan ini adalah Git adalah struktur data yang murni fungsional atau terutama singkatnya Bagaimana git menyimpan data Anda .
Saya khawatir saya memiliki pandangan yang agak suram tentang ini. Saya telah berada di posisi Anda - saya seorang git
kutu buku dan ingin mengubah tim dari svn
, mari kita hadapi itu, hasil sangat kecil. Dalam kasus saya itu telah menyebabkan saya secara aktif mengubah persepsi saya sendiri, dan menerima bahwa orang, tidak bisa "dipaksa untuk bahagia". Orang-orang bukan komputer, sungguh sulit memprogram mereka. Saya masih senang karena telah mencoba, itu telah menunjukkan kepada saya dengan cara yang agak lunak apa yang saya lakukan dan apa yang tidak ingin saya lakukan dalam kehidupan profesional saya.
Ada orang-orang yang mulai termotivasi ketika ada hal-hal baru yang terlibat, dan ada orang-orang yang kehilangan motivasi. Ini tidak ada hubungannya dengan git
, tetapi untuk git
khusus Anda selalu memiliki efek "mengapa kita harus menggunakannya sama sekali jika svn
baik-baik saja?", Yang merupakan penghalang psikologis besar.
Juga, benar-benar grokking git
memerlukan minat yang kuat dalam struktur data abstrak. Mungkin terdengar sulit dipercaya, tetapi dalam pengalaman saya ada programmer yang tidak tertarik sama sekali dan yang bosan dan terbebani oleh elemen lebih kompleks daripada array sederhana. Anda dapat berdebat bolak-balik apakah mereka harus melakukan pekerjaan yang mereka lakukan, tetapi memang demikianlah adanya.
Jika orang tidak tertarik, mereka tidak akan memahaminya. Polos dan sederhana. Saya bertaruh bahwa ketidaktertarikan adalah alasan utama buruknya nilai di sekolah, bukan karena kurangnya kecerdasan.
Yang mengatakan, inilah kurikulum yang akan saya terapkan, berdasarkan pengetahuan dari bawah ke atas. Itu tidak berhasil untuk saya, tetapi Anda dapat menganggapnya sebagai inspirasi untuk menggulung Anda sendiri.
GUI
Sedangkan pendekatan berikut tidak selalu membutuhkan dukungan GUI untuk tindakan ( git add
dalam repositori dunia halo ...), hal ini membantu sangat untuk memiliki GUI untuk memvisualisasikan repositori, benar dari awal. Jika Anda tidak dapat memutuskan mana yang akan digunakan, maka ambil gitk
jalan terakhir. Jika kalian menggunakan editor visual apa pun, cari git
komponen GUI mereka .
Struktur data (statis) adalah kuncinya
Mulailah dengan menjelaskan tipe data internal (hanya ada tiga-plus-satu di antaranya: gumpalan, pohon, komit, tag beranotasi, yang terakhir tidak menjadi perhatian apa pun pada tahap ini) dan strukturnya. Anda dapat dengan mudah melakukannya di papan tulis / dengan pensil; pohon itu mudah untuk menggambar karena tidak pernah bisa diubah, Anda benar-benar bisa menambahkan barang setiap saat. Anda dapat melakukan sesi bermain di repositori lokal yang baru dibuat dan gunakan git cat-file
untuk melihat ke objek yang sebenarnya untuk menunjukkan kepada mereka bahwa mereka sebenarnya sepele seperti yang diiklankan.
Jika Anda dapat membantu mereka untuk memahami itu
- ... hanya ada 3 jenis objek dalam sejarah, semuanya sangat sederhana, hampir sepele, dan
- ... sebagian besar
git
sub- perintah hanya "memijat" objek-objek itu dengan satu atau lain cara, dengan operasi yang hampir sepele (pada dasarnya, hanya ada satu: tambahkan komit baru di suatu tempat), dan ...
- ... semuanya dapat dilihat tepat di depan Anda dengan
ls
dan git cat-file
...
maka mereka akan memiliki terjemahan mental dari apa yang sebenarnya ada di repositori. Pada titik ini, para senior mungkin ingat bahwa bagian dalam svn
adalah sihir misterius (pernah memiliki masalah dengan kunci di dalam repositori svn, atau dengan "reintegrasi" cabang dan semacamnya?), Dan ini mungkin hanya memotivasi mereka sedikit.
Satu masalah, khususnya dengan orang-orang yang terbiasa svn
, adalah untuk terbiasa dengan gagasan bahwa satu komit (objek, bukan tindakan) selalu adalah seluruh pohon direktori. Di svn
, orang digunakan untuk mengkomit file individual. Ini adalah pendekatan yang sangat berbeda. Oh, dan fakta bahwa istilah "komit" yang sama digunakan untuk objek statis dan tindakan juga tidak membantu.
Masalah lain untuk svn
pria adalah yang svn
menggunakan sejarah linier, bukan pohon. Lagi-lagi ini sangat berbeda. Jadi ini adalah waktu untuk menunjukkan perbedaan ini banyak .
Tindakan dijelaskan dalam struktur
Ketika mereka telah memahami bagian git
repositori apa yang dibuat, sekarang saatnya untuk menunjukkan kepada mereka secara tepat apa yang dilakukan masing-masing git
sub -perintah dalam hal itu.
Saya berbicara tentang add
,, commit
dalam hubungannya dengan direktori kerja lokal dan panggung (pastikan mereka mengerti bahwa direktori kerja tidak sama dengan area pementasan yang tidak sama dengan repositori).
Ketika mereka telah memahami bahwa perintah-perintah ini hanya menumbuhkan pohon (yang, sekali lagi, pada tahap ini, terdiri dari 3 jenis - gumpalan, pohon, melakukan, tidak hanya melakukan), Anda dapat melakukan yang pertama git push
dan git pull
(dalam mode maju cepat! ) untuk menunjukkan kepada mereka bahwa git
secara harfiah hanya mendorong benda-benda di sekitar, bahwa hash benar - benar hanya hash konten, bahwa Anda dapat dengan mudah menyalin barang-barang ini dengan perintah copy sistem file dan sebagainya.
Jelas, tinggal jauh dari opsi tidak penting dari perintah-perintah itu, kita berbicara di git add hello.txt
sini.
Ranting
Perhatikan bahwa bercabang sangat sulit bagi svn
orang - orang, karena sangat berbeda. The svn
model jauh lebih mudah untuk memvisualisasikan, karena ada dasarnya apa-apa untuk memvisualisasikan - itu adalah terlihat jelas. The git
Model tidak begitu banyak. Pastikan mereka mengetahui sejak awal bahwa cabang dan tag hanyalah "catatan tempel" yang menunjuk ke suatu tempat, dan tidak benar-benar "ada" dalam hal sejarah statis dan abadi.
Kemudian lakukan contoh demi contoh mudah untuk menunjukkan apa yang sebenarnya dapat Anda lakukan dengan mereka. Karena Anda sendiri sepertinya sudah terbiasa git
, Anda seharusnya tidak kesulitan menemukan motivasi di sana. Pastikan mereka selalu melihat ini dalam hal bagaimana pohon itu tumbuh.
Jika mereka memiliki itu, Anda dapat menjelaskan bagaimana git pull
sebenarnya git fetch && git merge
; bagaimana semua repositori benar-benar berisi objek yang persis sama ( git fetch
hampir sama dengan menyalin barang-barang scp
di dalam direktori objek git) dan sebagainya.
Mungkin, jika pada saat ini Anda belum mencapai untuk membangunkan minat mereka, maka Anda bisa menyerah, tetapi jika mereka berhasil mencapai sejauh ini, maka mereka memiliki semua alat mental yang mereka miliki, dan harus ada sedikit ketakutan terlibat lagi. Sisanya (alur kerja git ...) harus menurun kemudian.
Kata-kata terakhir
Ini terdengar seperti banyak usaha, dan memang benar. Jangan menjual ini sebagai "kami membutuhkan ini untuk proyek ini" tetapi "ini membantu Anda secara pribadi untuk mengembangkan dan akan membantu Anda dalam semua interaksi lebih lanjut". Anda perlu banyak waktu untuk ini, dan waktu adalah uang. Jika Anda tidak memiliki penerimaan manajemen atas hal ini, itu mungkin tidak sepadan; Anda mungkin harus membicarakannya dengan bos Anda.
Jika Anda memutuskan ingin berhenti mengajar pengembang yang tampaknya tidak dapat memahami hal itu, tetapi Anda benar-benar harus menggunakannya git
di masa mendatang, pertimbangkan untuk mengganti semua interaksi dengan git
perintah dengan skrip yang dibuat-buat atau beberapa GUI yang menghilangkan semua git
spesifikasi. Tuang semua kontrol kesalahan, dll. Dalam skrip, dan cobalah membuatnya berfungsi.