Apakah ada cara mudah untuk membuat Git selalu menandatangani setiap komit atau tag yang dibuat?
Saya mencobanya dengan sesuatu seperti:
alias commit = commit -S
Tapi itu tidak berhasil.
Saya tidak ingin menginstal program lain untuk mewujudkannya. Apakah bisa dilakukan dengan mudah?
Hanya pertanyaan sampingan, mungkin komit tidak boleh ditandatangani, hanya tag, yang tidak pernah saya buat, karena saya mengirimkan satu komit untuk proyek seperti Homebrew, dll.
git
public-key-encryption
gnupg
MindTooth
sumber
sumber
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD
(Saya tidak bermaksud Anda harus menggunakan ini).Jawaban:
Catatan: jika Anda tidak ingin menambahkan
-S
semua waktu untuk memastikan komit Anda ditandatangani, ada proposal (cabang 'pu
' untuk saat ini, Desember 2013, jadi tidak ada jaminan akan membuatnya ke rilis git) untuk menambahkan config yang akan menangani opsi itu untuk Anda.Pembaruan Mei 2014: ada di Git 2.0 (setelah dikirim ulang dalam seri tambalan ini )
Lihat commit 2af2ef3 oleh Nicolas Vigier (boklm) :
Tambahkan
commit.gpgsign
opsi untuk menandatangani semua komitmenKonfigurasi itu biasanya disetel per repo (Anda tidak perlu menandatangani repo lokal eksperimental pribadi Anda):
Anda akan menggabungkannya dengan
user.signingKey
digunakan sebagai pengaturan global (kunci unik yang digunakan untuk semua repo tempat Anda ingin menandatangani komit)user.signingKey
diperkenalkan di git 1.5.0 (Jan. 2007) dengan commit d67778e :Ini diberlakukan dengan commit aba9119 (git 1.5.3.2) untuk mengetahui kasus di mana Jika pengguna telah salah mengonfigurasi
user.signingKey
di mereka.git/config
atau hanya tidak memiliki kunci rahasia pada keyring mereka.Catatan:
signingKey
tidaksigningkey
, meskipungit config
kuncinya tidak peka huruf besar-kecil. Itu akan menjadi masalah hanya jika Anda melakukannyagit config --get-regexp
, yang mana merupakan hal sensitif, jika tidak, itu hanya konvensi pembacaan;git push --signed
gagal mempertimbangkanuser.signingKey
konfigurasi;user.signingKey
untuk memaksa menandatangani tag beranotasi serta melakukan: komit 61c2fe0 .sumber
Ganti 9E08524833CB3038FDE385C54C0AFCCFED5CDE14 dengan ID kunci Anda. Ingat: Tidak pernah merupakan ide yang baik untuk menggunakan ID singkat .
UPDATE: Per edit git baru , semua kunci konfigurasi harus di camelCase.
sumber
~/.gnupg/gpg-agent.conf
dan menambahkanpinentry-program /usr/bin/pinentry-gtk-2
(mengikuti panduan ini wiki.archlinux.org/ index.php / GnuPG # pinentry )Edit: Pada Git versi 1.7.9, itu adalah mungkin untuk menandatangani Git komit (
git commit -S
). Memperbarui sedikit jawabannya untuk mencerminkan hal ini.Judul pertanyaannya adalah:
Jawaban singkat: ya, tapi jangan lakukan itu.
Mengatasi kesalahan ketik dalam pertanyaan:
git commit -s
tidak menandatangani komit. Sebaliknya, dariman git-commit
halaman:Ini menghasilkan keluaran log yang mirip dengan yang berikut:
Perhatikan bit "Ditandatangani oleh: ..."; yang dihasilkan oleh
-s
bendera digit-commit
.Mengutip email pengumuman rilis :
Jadi ya, Anda dapat menandatangani komit. Namun, saya pribadi menyarankan agar berhati-hati dengan opsi ini; secara otomatis menandatangani komit di sebelah tidak ada gunanya, lihat di bawah:
Itu benar. Komit tidak ditandatangani; tag adalah. Alasannya dapat ditemukan dalam pesan ini oleh Linus Torvalds , paragraf terakhir berbunyi:
Saya akan mendorong penelusuran pesan yang ditautkan, yang menjelaskan mengapa penandatanganan dilakukan secara otomatis bukanlah ide yang jauh lebih baik daripada yang saya bisa.
Namun , jika Anda ingin menandatangani tag secara otomatis , Anda dapat melakukannya dengan membungkus
git-tag -[s|u]
alias; jika Anda akan melakukannya, Anda mungkin ingin mengatur id kunci Anda~/.gitconfig
atau.git/config
file spesifik proyek . Informasi lebih lanjut tentang proses itu dapat dilihat di buku komunitas git . Menandatangani tag jauh lebih berguna daripada menandatangani setiap komit yang Anda buat.sumber
git blame
ke siapa pun yang dia inginkan.Untuk membuat penandatanganan kerja otomatis pre git versi 2.0, Anda harus menambahkan alias git untuk komit.
sumber
Anda perlu menjelaskan bahwa jika Anda menandatangani komit atau tag, itu tidak berarti Anda menyetujui seluruh riwayat. Dalam hal komit, Anda hanya menandatangani perubahan yang ada, dan dalam hal tag, baiklah .. Anda perlu mendefinisikan apa yang Anda maksud dengannya. Anda mungkin telah menarik perubahan yang mengklaimnya dari Anda tetapi tidak (karena orang lain mendorongnya ke remote Anda). Atau itu adalah perubahan yang tidak Anda inginkan, tetapi Anda baru saja menandatangani tag.
Dalam proyek OSS biasa ini mungkin kurang umum, tetapi dalam skenario perusahaan di mana Anda hanya menyentuh kode sesekali dan Anda tidak membaca seluruh sejarah itu mungkin tidak diperhatikan.
Penandatanganan komitmen adalah masalah jika mereka akan ditebus kembali atau dipilih untuk orang tua lainnya. Tetapi akan lebih baik jika komit yang dimodifikasi dapat menunjuk ke komit "asli" yang benar-benar diverifikasi.
sumber
commit.gpgsign
ke true seperti yang disarankan oleh @VonC