Apa pengalaman orang dengan modul Git untuk Python? (Saya tahu tentang GitPython, PyGit, dan Dulwich - jangan ragu untuk menyebutkan yang lain jika Anda mengenal mereka.)
Saya menulis sebuah program yang harus berinteraksi (menambah, menghapus, mengkomit) dengan repositori Git, tetapi tidak memiliki pengalaman dengan Git, jadi salah satu hal yang saya cari adalah kemudahan penggunaan / pemahaman sehubungan dengan Git.
Hal lain yang paling saya minati adalah kedewasaan dan kelengkapan perpustakaan, kurangnya bug yang masuk akal, pengembangan berkelanjutan, dan bantuan dokumentasi dan pengembang.
Jika Anda memikirkan hal lain yang saya ingin / perlu ketahui, jangan ragu untuk menyebutkannya.
Jawaban:
Sementara pertanyaan ini ditanyakan beberapa waktu lalu dan saya tidak tahu keadaan perpustakaan pada saat itu, perlu disebutkan bagi para pencari bahwa GitPython melakukan pekerjaan yang baik untuk mengabstraksi alat-alat baris perintah sehingga Anda tidak perlu menggunakan subproses. Ada beberapa abstraksi bawaan yang berguna yang dapat Anda gunakan, tetapi untuk semua yang lain, Anda dapat melakukan hal-hal seperti:
Segala sesuatu yang lain di GitPython hanya mempermudah navigasi. Saya cukup puas dengan perpustakaan ini dan menghargai bahwa itu adalah pembungkus alat git yang mendasarinya.
UPDATE : Saya telah beralih menggunakan modul sh untuk tidak hanya git tetapi sebagian besar utilitas commandline yang saya butuhkan dalam python. Untuk meniru di atas saya akan melakukan ini sebagai gantinya:
sumber
repo.git.branch(b=somebranch)
Berfungsi tetapirepo.git.branch(D=somebranch)
tidak karena ada ruang yang hilang). Saya kira saya akan mengimplementasikan fungsi umum berbasis subproses sendiri. Aku sedih, aku punya harapan besar. : - /git = sh.git.bake(_cwd=repopath)
. itu bekerja dengan sangat baik.Saya pikir saya akan menjawab pertanyaan saya sendiri, karena saya mengambil jalan yang berbeda dari yang disarankan dalam jawaban. Meskipun demikian, terima kasih kepada mereka yang menjawab.
Pertama, sinopsis singkat pengalaman saya dengan GitPython, PyGit, dan Dulwich:
Juga, StGit terlihat menarik, tetapi saya akan membutuhkan fungsionalitas diekstraksi menjadi modul terpisah dan tidak ingin menunggu itu terjadi sekarang.
Dalam waktu (jauh) lebih sedikit daripada yang saya habiskan untuk mendapatkan tiga modul di atas bekerja, saya berhasil mendapatkan perintah git bekerja melalui modul subproses, misalnya
Ini belum sepenuhnya dimasukkan ke dalam program saya, tapi saya tidak mengantisipasi masalah, kecuali mungkin kecepatan (karena saya akan memproses ratusan atau bahkan ribuan file di kali).
Mungkin saya tidak punya kesabaran untuk menyelesaikan masalah dengan Dulwich atau GitPython. Yang mengatakan, saya berharap modul akan mendapatkan lebih banyak pengembangan dan lebih bermanfaat segera.
sumber
Saya akan merekomendasikan pygit2 - ia menggunakan binding libgit2 yang sangat baik
sumber
pygit2
adalah perpustakaan yang sangat berguna, dan saya menantikannya berkembang di masa depan!libgit
danpygit2
mengambil sumber dari GitHub secara manual . Masalahnya adalah, kepala cabang telah melanggar tes, dan instalasi gagal "stabil" terbaru ... Bukan solusi yang cocok jika keandalan penting dan Anda perlu menggunakan di berbagai lingkungan ... :(Ini adalah pertanyaan yang cukup lama, dan saat mencari perpustakaan Git, saya menemukan satu yang dibuat tahun ini (2013) bernama Gittle .
Ini bekerja sangat baik untuk saya (di mana yang lain saya coba terkelupas), dan tampaknya mencakup sebagian besar tindakan umum.
Beberapa contoh dari README:
sumber
git add other1.txt other2.txt
sehingga tidak mengikuti apa yang diharapkan.Mungkin itu membantu, tetapi Bazaar dan Mercurial sama-sama menggunakan dulwich untuk interoperabilitas Git mereka.
Dulwich mungkin berbeda dari yang lain dalam arti itu adalah implementasi ulang git di python. Yang lain mungkin hanya menjadi pembungkus di sekitar perintah Git (jadi bisa lebih mudah untuk digunakan dari sudut pandang tingkat tinggi: komit / tambahkan / hapus), itu mungkin berarti API mereka sangat dekat dengan baris perintah git sehingga Anda akan perlu untuk mendapatkan pengalaman dengan Git.
sumber
Demi kelengkapan, http://github.com/alex/pyvcs/ adalah lapisan abstraksi untuk semua dvcs. Ini menggunakan dulwich, tetapi menyediakan interop dengan dvcs lain.
sumber
Jawaban yang diperbarui mencerminkan waktu yang berubah:
GitPython saat ini adalah yang paling mudah digunakan. Ini mendukung pembungkus banyak perintah git plumbing dan memiliki database objek pluggable (dulwich salah satunya), dan jika sebuah perintah tidak diimplementasikan, memberikan api yang mudah untuk keluar ke baris perintah. Sebagai contoh:
Ini panggilan:
Dulwich juga bagus tapi levelnya jauh lebih rendah. Agak menyakitkan untuk digunakan karena membutuhkan operasi pada objek git di tingkat pipa ledeng dan tidak memiliki porselen bagus yang biasanya ingin Anda lakukan. Namun, jika Anda berencana memodifikasi bagian git, atau menggunakan paket git-accept-pack dan git-upload-pack, Anda perlu menggunakan dulwich.
sumber
Berikut ini adalah implementasi "git status" yang sangat cepat:
sumber
git status
git status --short
akan lebih mudah, dan saya pikir--short
output cenderung berubah.git status --porcelain
untuk ini--porcelain: Give the output in a stable, easy-to-parse format for scripts...
--z
saja--porcelain
. Tidak seperti itu--porcelain
,--z
tidak luput dari nama file.Jawaban PTBNL cukup sempurna untuk saya. Saya membuat sedikit lebih banyak untuk pengguna Windows.
sumber
Bagian pustaka interaksi git dari StGit sebenarnya cukup bagus. Namun, itu tidak pecah sebagai paket terpisah tetapi jika ada minat yang cukup, saya yakin itu bisa diperbaiki.
Ini memiliki abstraksi yang sangat bagus untuk mewakili komit, pohon dll, dan untuk membuat komit dan pohon baru.
sumber
Sebagai catatan, tidak ada pustaka Git Python yang disebutkan di atas yang tampaknya mengandung "git status" yang setara, yang merupakan satu-satunya hal yang saya inginkan karena berurusan dengan sisa perintah git melalui subproses sangat mudah.
sumber