Tempat kerja saya baru-baru ini beralih ke Git dan saya telah mencintai (dan membenci!) Itu. Saya benar-benar menyukainya, dan ini sangat kuat. Satu-satunya bagian yang saya benci adalah bahwa kadang-kadang itu terlalu kuat (dan mungkin agak singkat / membingungkan).
Pertanyaan saya adalah ... Bagaimana Git dirancang? Hanya menggunakannya untuk waktu yang singkat, Anda merasa bahwa itu dapat menangani banyak alur kerja yang tidak diketahui oleh sistem kontrol versi lain. Tapi di bawahnya juga terasa elegan. Dan cepat!
Ini tidak diragukan lagi sebagian karena bakat Linus. Tapi saya bertanya-tanya, apakah keseluruhan desain git didasarkan pada sesuatu? Saya sudah membaca tentang BitKeeper tetapi akunnya kurang detail teknis. Kompresi, grafik, menghilangkan angka revisi, menekankan percabangan, menyembunyikan, remote ... Dari mana semua itu berasal?
Linus benar-benar mengetuk yang satu ini dari taman dan pada percobaan pertama! Ini cukup baik untuk digunakan setelah Anda melewati kurva belajar.
sumber
you get the feel that it can handle many obscure workflows that other version control systems could not
: Itu mungkin karena itu dirancang untuk menangani kernel linux, sepotong kode terkenal besar, rumit dan rumit.Jawaban:
Git tidak dirancang sebanyak berevolusi .
Lihatlah sendiri. Kloning repositori git resmi , buka di
gitk
(atau viewer git log grafis favorit Anda), dan lihat revisi yang paling awal.Anda akan melihatnya pada awalnya hanya memiliki fungsionalitas inti (database objek dan indeks). Segala sesuatu yang lain dilakukan dengan tangan . Namun, inti kecil ini dirancang agar mudah diotomatisasi melalui skrip shell. Pengguna awal git menulis skrip shell mereka sendiri untuk mengotomatisasi tugas-tugas umum; sedikit demi sedikit, skrip ini dimasukkan ke dalam distribusi git (lihat contoh awal 839a7a0 ). Setiap kali ada kebutuhan baru, skrip diadaptasi untuk memungkinkannya. Beberapa saat kemudian, beberapa skrip ini akan ditulis ulang dalam C.
Kombinasi dari inti yang bersih dan ortogonal (yang masih dapat Anda gunakan secara langsung jika Anda membutuhkannya), dengan lapisan atas yang tumbuh secara organik di atasnya, adalah yang memberi git kekuatannya. Tentu saja, itu juga yang memberikan sejumlah besar perintah dan opsi yang diberi nama aneh.
Banyak yang tidak ada di awal.
Sementara setiap objek dikompresi secara individual, dan duplikat dihindari dengan penamaan mereka, file "paket" yang bertanggung jawab atas kompresi tinggi yang biasa kita lihat di git tidak ada. Filosofi pada awalnya adalah "ruang disk murah".
Jika dengan "grafik" yang Anda maksud seperti pemirsa grafis
gitk
, mereka muncul kemudian (AFAIK, yang pertama adalahgitk
). AFAIK, BitKeeper juga memiliki penampil riwayat grafis.Menyingkirkan nomor versi, sebenarnya konsep inti git menggunakan filesystem yang ditujukan untuk menyimpan objek, sebagian besar berasal dari monoton . Pada saat itu, monoton lambat; jika ini tidak terjadi, mungkin Linus akan menggunakannya alih-alih membuat git.
Menekankan percabangan agak tidak dapat dihindari pada sistem kontrol versi terdistribusi, karena setiap klon bertindak sebagai cabang terpisah.
Stashing (
git stash
) adalah, IIRC, cukup baru. Reflog, yang digunakannya, tidak ada di awal.Bahkan remote awalnya tidak ada di sana. Awalnya, Anda menyalin objek menggunakan tangan
rsync
.Satu per satu, masing-masing fitur ini ditambahkan oleh seseorang. Tidak semua dari mereka - mungkin bahkan tidak sebagian besar dari mereka - ditulis oleh Linus. Setiap kali ada yang merasa kebutuhan yang tidak dipenuhi git, seseorang dapat membuat fitur baru di atas lapisan "plumbing" inti git, dan mengusulkannya untuk dimasukkan. Jika itu baik, itu mungkin akan diterima, meningkatkan utilitas git (dan kompleksitas baris perintahnya) lebih jauh.
sumber
Saya pikir poin utamanya adalah git dirancang oleh satu-satunya orang yang paling memenuhi syarat di planet ini untuk melakukannya. Dan saya tidak berbicara tentang bakat, saya berbicara tentang pengalaman: Saya ragu ada orang lain yang bertanggung jawab atas basis kode dengan kombinasi ukuran dan jumlah kontributor yang sebanding sebagai kernel Linux dan masih benar-benar berurusan dengan sebagian besar integrasi bekerja sendiri.
Jadi Linus tahu persyaratan dan kasus penggunaan untuk sistem kontrol versi terdistribusi lebih baik daripada orang lain. Dan tentu saja itu membantu bahwa sebagian besar pengkodean yang dihadapinya ada di C, dan sebagian besar kinerjanya kritis.
Pada dasarnya itu adalah contoh utama dari menggaruk gatal sendiri.
sumber
Itu dirancang cukup persis seperti yang dijelaskan dalam Perumpamaan Git .
sumber