git-deps adalah alat untuk melakukan analisis otomatis dependensi antara komitmen dalam repositori git. Inilah demonstrasi screencast:

Saya telah membuat blog tentang git-deps dan alat terkait, dan juga secara publik berbicara tentang alat ini beberapa kali:
Cukup jelas bahwa dua git berkomitmen dalam satu repo dapat dianggap "independen" dari satu sama lain dalam arti tertentu, jika mereka tidak mengubah file yang sama, atau jika mereka tidak mengubah bagian yang tumpang tindih dari file yang sama.
Sebaliknya, ketika suatu komit mengubah garis, itu "bergantung" tidak hanya komit yang terakhir mengubah garis itu, tetapi juga komit -komit yang bertanggung jawab untuk menyediakan garis konteks di sekitarnya, karena tanpa versi sebelumnya dari garis dan konteksnya, dift komit mungkin tidak berlaku (tergantung pada bagaimana itu diterapkan, tentu saja). Jadi semua dependensi dari suatu komit dapat disimpulkan secara terprogram dengan menjalankan git-blame pada garis perubahan komit, plus namun banyak garis konteks masuk akal untuk penggunaan kasus analisis ketergantungan khusus ini.
Oleh karena itu perhitungan ketergantungan dipengaruhi oleh parameter faktor "fuzz" (CF Patch (1)), yaitu jumlah garis konteks yang dianggap perlu untuk diff komit untuk diterapkan dengan bersih.
Seperti halnya banyak hubungan ketergantungan, ketergantungan ini membentuk tepi dalam DAG (grafik asiklik terarah) yang nodenya sesuai dengan komitmen. Perhatikan bahwa sebuah simpul hanya dapat bergantung pada subset leluhurnya.
Penting untuk diperhatikan bahwa grafik ketergantungan yang disimpulkan oleh git-deps mungkin tidak lengkap secara semantik; Misalnya itu tidak akan mendeteksi secara otomatis ketergantungan antara komitmen A yang mengubah kode dan komit b lain yang mengubah dokumentasi atau tes untuk mencerminkan perubahan kode dalam komit A. Oleh karena itu git-deps tidak boleh digunakan dengan iman buta. Untuk detail lebih lanjut, lihat bagian tentang ketergantungan tekstual vs semantik (dalam) di bawah ini.
Kadang-kadang berguna untuk memahami sifat bagian-bagian dari grafik ketergantungan ini, karena sifatnya akan memengaruhi keberhasilan atau kegagalan operasi termasuk penggabungan, rebase, pick-cerry dll. Silakan lihat file USE-CASES.md untuk rincian lebih lanjut.
Silakan lihat file INSTALL.md .
Silakan lihat file USAGE.md .
Pembaca yang cerdik akan mencatat bahwa independensi tekstual yang terdeteksi oleh git-deps tidak sama dengan kemandirian semantik / logis. Kemandirian tekstual berarti bahwa perubahan dapat diterapkan dalam urutan apa pun tanpa menimbulkan konflik, tetapi ini bukan indikator yang dapat diandalkan dari independensi logis.
Misalnya perubahan ke fungsi dan perubahan yang sesuai pada tes dan/atau dokumentasi untuk fungsi itu biasanya akan ada di file yang berbeda. Jadi, jika perubahan itu berada dalam komit-komit terpisah dalam cabang, menjalankan git-deps pada komit tidak akan mendeteksi ketergantungan di antara mereka meskipun mereka terkait secara logis, karena perubahan dalam file yang berbeda (atau bahkan di area yang berbeda dari file yang sama) independen secara tekstual.
Jadi dalam hal ini, git-deps tidak akan berperilaku persis seperti yang kita inginkan. Dan selama AI adalah masalah yang belum terpecahkan, sangat tidak mungkin bahwa ia akan pernah mengembangkan perilaku yang benar -benar andal. Jadi apakah itu berarti git-deps tidak berguna? Sama sekali tidak!
Pertama, ketika praktik terbaik untuk penataan komit dipatuhi, perubahan yang sangat terkait secara logis harus ditempatkan dalam komit yang sama. Jadi dalam contoh di atas, perubahan pada fungsi dan perubahan yang sesuai pada tes dan/atau dokumentasi untuk fungsi itu semuanya harus berada dalam satu komit. (Meskipun ini bukan satu-satunya pendekatan yang valid; untuk mekanisme pengelompokan meta-sejarah yang lebih canggih, lihat git-dendrify .)
Kedua, sementara independensi tekstual tidak menyiratkan independensi logis, sebaliknya diharapkan lebih umum benar: independensi logis sering menyiratkan independensi tekstual (atau dinyatakan dengan cara lain, ketergantungan tekstual sering menyiratkan ketergantungan logis). Jadi, meskipun mungkin tidak terlalu jarang bagi git-deps untuk gagal mendeteksi ketergantungan antara perubahan yang terkait secara logis, harus lebih jarang bahwa itu salah menyimpulkan ketergantungan antara perubahan yang tidak terkait secara logis. Dengan kata lain, negatif palsu umumnya diharapkan lebih umum daripada positif palsu. Akibatnya, kemungkinan akan lebih berguna dalam menentukan batas bawah pada dependensi daripada batas atas. Karena itu, diperlukan lebih banyak penelitian tentang hal ini.
Ketiga, seringkali tidak membantu untuk memungkinkan pencarian yang sempurna menjadi musuh yang baik - sebuah alat tidak harus sempurna untuk menjadi berguna; Itu hanya harus lebih baik daripada melakukan tugas yang sama tanpa alat.
Diskusi lebih lanjut tentang beberapa poin ini dapat ditemukan di utas lama dari milis Git.
Namun pada akhirnya, "buktinya ada di puding", jadi cobalah dan lihat!
Silakan lihat file CONTRIBUTING.md .
Silakan lihat file HISTORY.md .
Terima kasih khusus kepada SUSE karena sebagian mensponsori pengembangan perangkat lunak ini. Terima kasih juga kepada semua orang yang telah menyumbangkan kode, laporan bug, dan umpan balik lainnya.
Dirilis di bawah GPL Versi 2 agar konsisten dengan lisensi git , tetapi saya terbuka untuk gagasan lisensi ganda jika ada alasan yang meyakinkan.