Bagaimana Anda memasukkan kode sebagai pengguna yang berbeda?

112

Saya ingin dapat melakukan ini untuk sebuah skrip. Saya pada dasarnya membuat ulang seluruh riwayat versi beberapa kode di Git - saat ini menggunakan sistem kontrol versi yang berbeda. Saya membutuhkan skrip untuk dapat menambahkan komit ke Git sambil mempertahankan penulis asli komit (dan tanggal).

Dengan asumsi saya tahu pembuat komit dan tanggal / waktu perubahan dilakukan, apakah ada perintah Git yang memungkinkan saya melakukan ini? Saya berasumsi ada, karena git-p4 melakukan hal serupa. Saya hanya meminta cara terbaik untuk melakukannya.

Carl
sumber
1
Sudahkah Anda mencoba menggunakan impor cepat?
alternatif
Saya setuju, impor cepat sepertinya menjadi cara terbaik untuk melakukannya. Anda bisa menggunakan git commit (atau lebih tepatnya pipa ledeng yang mendasarinya: hash-object , update-index , write-tree , commit-tree , update-ref , dll.), Tetapi fast-import akan, yah, lebih cepat.
Chris Johnsen
Saya memang memikirkan impor cepat, tetapi karena saya sendiri cukup pemula, saya memutuskan untuk menggunakan perintah dasar. Sejujurnya saya tidak sepenuhnya memahami cara kerja impor cepat dan oleh karena itu saya agak ragu untuk menggunakannya sampai saya memahaminya dengan lebih baik. Ya, ini akan jauh lebih lambat menggunakan komit, tetapi setidaknya saya akan tahu apa yang diharapkan - terutama saat debugging.
Carl
1
git commit --author = "Name <[email protected]>" -a -m "commit msg"
Masih

Jawaban:

148

Lihat --authoropsi untuk git commit:

Dari halaman manual :

--author=<author>

Ganti penulis komit. Tentukan penulis eksplisit menggunakan A U Thor <[email protected]>format standar . Sebaliknya <author>diasumsikan sebagai pola dan digunakan untuk mencari komit yang ada oleh penulis itu (yaitu rev-list --all -i --author=<author>); penulis komit kemudian disalin dari komit pertama yang ditemukan.

Tim Henigan
sumber
18
Juga, --dateopsi untuk mengganti tanggal.
Chris Johnsen
Dapatkah Anda memberikan contoh spesifik, semua yang saya coba
studgeek
@Tim Henigan: Sepertinya dokumentasi sekarang dihosting di Github sehingga link halaman manual yang Anda posting sudah mati. Dapatkah Anda mengonfirmasi bahwa halaman baru adalah hal yang sama (jika ada jawaban lain yang memerlukan tautan diperbarui)?
R0MANARMY
@ R0MANARMY: Saya memperbarui URL. Halaman GitHub sudah benar. Saya memperbarui tautan saya karena halaman manual tidak lagi dihosting di kernel.org. Terima kasih telah memberi tahu saya tentang perubahan tersebut.
Tim Henigan
1
Inilah yang akhirnya saya gunakan:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Carl
113

Hanya untuk menambahkan ini: --authorOpsi yang disebutkan dalam jawaban yang diterima hanya akan menimpa penulis , bukan informasi pelaku dari komit.

Itu adalah perilaku yang benar dalam banyak kasus, tetapi jika karena alasan tertentu Anda juga perlu mengganti informasi komitter secara manual , gunakan variabel lingkungan GIT_COMMITTER_NAMEdan GIT_COMMITTER_EMAIL(ada GIT_COMMITTER_DATEjuga). Lihat Git-Internals-Environment-Variables

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="[email protected]" git commit --author="New Name <[email protected]>"

Ini akan membuat komit terlihat seperti itu dibuat dan dilakukan oleh pengguna yang ditentukan.

friederbluemle.dll
sumber
16
... dan untuk melihat perbedaannya:git log --pretty=fuller
bluenote10
2
Sempurna. Inilah yang saya inginkan dan saya tidak akan pernah bisa menemukan halaman manual git internals.
ksp
3

Edit file ~ / .gitconfig Anda dan tambahkan alias baru tempat Anda dapat menyesuaikan pengguna dan email non-default.

[user]
  name = My Name
  email = [email protected]

[alias]
  commit-x = -c user.name='My X Name' -c user.email='[email protected]' commit
  commit-y = -c user.name='My Y Name' -c user.email='[email protected]' commit
  commit-z = -c user.name='My Z Name' -c user.email='[email protected]' commit

Menguji

git commit -m "Custom message with committer and author My Name <[email protected]>"
git commit-x -m "Custom message with committer and author My X Name <[email protected]>"
git commit-y -m "Custom message with committer and author My Y Name <[email protected]>"
git commit-z -m "Custom message with committer and author My Z Name <[email protected]>"
BeardOverflow
sumber