Milis + git format-patch
+ git apply
dapat menghasilkan penulis! = Pengemis
Dalam proyek-proyek seperti kernel Linux di mana tambalan adalah:
menghasilkan komit baru dengan pengarang dan pengalih berbeda:
- penulis adalah siapa yang menulis tambalan
- komuter adalah siapa yang mengelola proyek, dan yang menggabungkan tambalan
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:
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
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:
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
yang persis seperti itu dari git apply
tambalan email.
Di GitHub saat ini:
- Anda memilih metode saat menggabungkan melalui dropdown pada tombol gabungan
- metode dapat diaktifkan atau dinonaktifkan pada pengaturan repo oleh pemilik
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:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
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:
git log --pretty='%cn %cd' -n1 HEAD
di mana cn
dan cd
berdiri untuk Committer Name
danCommitter Date
gunakan fuller
format yang telah ditentukan:
git log --format=fuller
Lihat juga: Cara mengkonfigurasi 'git log' untuk menampilkan 'tanggal komitmen'
turunkan level dan tunjukkan seluruh data komit:
git cat-file -p HEAD
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:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
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:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
Ini memperjelas bahwa keduanya adalah dua entri data yang sepenuhnya independen dalam objek komit.