Saya mencoba membuat komit
git commit --author="John Doe <[email protected]>" -m "<the usual commit message>"
di mana John Doe adalah pengguna yang namanya ingin saya komit.
Tampaknya baik-baik saja git log
. Namun, ketika saya melakukan gitk
, nama penulis benar, tetapi nama committer diambil dari pengaturan konfigurasi global git saya (dan dengan demikian diatur ke nama / email saya).
Pertanyaan
Apa perbedaan antara keduanya (committer vs author)?
Haruskah saya mengatur committer juga ke pengguna lain?
Jika ya, bagaimana?
git
git-config
gitk
mu 無
sumber
sumber
Jawaban:
Poster asli bertanya:
Penulis adalah orang yang awalnya menulis kode. Committer, di sisi lain, diasumsikan sebagai orang yang melakukan kode atas nama penulis asli. Ini penting di Git karena Git memungkinkan Anda untuk menulis ulang sejarah, atau menerapkan tambalan atas nama orang lain. The GRATIS secara online Pro Git buku menjelaskan seperti ini:
Poster asli bertanya:
Tidak, jika Anda ingin jujur, Anda tidak boleh mengatur committer kepada penulis, kecuali jika penulis dan committer itu memang orang yang sama.
sumber
git config user
dan kemudiangit add
dangit commit
, maka git akan tahu siapa yang menambahkan dan siapa yang berkomitmen, tetapi masih tidak tahu siapa yang menulisnya.Milis +
git format-patch
+git apply
dapat menghasilkan penulis! = PengemisDalam proyek-proyek seperti kernel Linux di mana tambalan adalah:
git format-patch
git send-email
git apply
ataugit am
: Bagaimana cara menggunakan git untuk menerapkan tambalan dari pesan email?menghasilkan komit baru dengan pengarang dan pengalih berbeda:
Lihat misalnya tambalan yang dipilih secara acak ini dan komit terkait:
Antarmuka web Git seperti GitHub dan GitLab dapat atau tidak dapat menghasilkan author! = Committer
Karena Git (Hub | Lab) menyimpan repositori upstream dan fork pada mesin yang sama, mereka dapat secara otomatis melakukan apa saja yang dapat Anda lakukan secara lokal, termasuk salah satu dari:
Buat komit gabungan.
Tidak menghasilkan penulis! = Committer.
Menjaga SHA atau komit baru tetap utuh, dan membuat komit baru:
Secara historis, ini adalah metode pertama yang tersedia di GitHub.
Secara lokal, ini dilakukan dengan
git merge --no-ff
.Ini menghasilkan dua komitmen per permintaan tarikan, dan membuat garpu dalam sejarah git.
rebase di atas
master
GitHub juga meretas komit untuk mengatur committer == siapa pun yang menekan tombol gabungan. Ini tidak wajib, dan bahkan tidak dilakukan secara default oleh lokal
git rebase
, tetapi memberikan pertanggungjawaban kepada pengelola proyek.Pohon git sekarang terlihat seperti:
yang persis seperti itu dari
git apply
tambalan email.Di GitHub saat ini:
https://help.github.com/articles/about-merge-methods-on-github/
Bagaimana cara mengatur committer dari komit baru?
Yang terbaik yang bisa saya temukan adalah menggunakan variabel lingkungan untuk mengganti committer:
Bagaimana cara mendapatkan committer dan tanggal komit dari komit yang diberikan?
Hanya data penulis yang ditampilkan secara default aktif
git log
.Untuk melihat tanggal committer Anda dapat:
format log khusus untuk itu:
di mana
cn
dancd
berdiri untukCommitter Name
danCommitter Date
gunakan
fuller
format yang telah ditentukan:Lihat juga: Cara mengkonfigurasi 'git log' untuk menampilkan 'tanggal komitmen'
turunkan level dan tunjukkan seluruh data komit:
Bagaimana cara menetapkan tanggal committer dari komit baru?
git commit --date
hanya menetapkan tanggal penulis: untuk tanggal committer yang terbaik yang dapat saya temukan adalah dengan variabel lingkungan:Lihat juga: Apa perbedaan antara penulis dan pengangkut di Git?
Bagaimana Git menyimpan pengarang vs pengangkut secara internal?
Lihat: Apa format file dari objek komit git?
Pada dasarnya, komit adalah file teks, dan berisi dua bidang yang dipisahkan baris:
Ini memperjelas bahwa keduanya adalah dua entri data yang sepenuhnya independen dalam objek komit.
sumber
GIT_COMMITTER_*
override, git masih akan menolak untuk melakukan komit jika Anda belum menetapkan committer default menggunakangit config
.GIT_{COMMITTER,AUTHOR}_EMAIL
@Ciro Santilli 新疆 改造 中心 六四 事件 法轮功diusulkan untuk digunakan
Untuk menghindari pengulangan nama dan email, Anda dapat menggunakannya kembali
yang pertama-tama mengatur variabel dalam perintah terpisah, kemudian menggunakannya untuk
git commit
panggilan (perhatikan tanda kurung ganda).sumber