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.


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 <name@example.com>" -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 <author@example.com>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.


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="name@email.com" git commit --author="New Name <name@email.com>"

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


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 = default@email.com

[alias]
  commit-x = -c user.name='My X Name' -c user.email='mr_x@email.com' commit
  commit-y = -c user.name='My Y Name' -c user.email='mr_y@email.com' commit
  commit-z = -c user.name='My Z Name' -c user.email='mr_z@email.com' commit

Menguji

git commit -m "Custom message with committer and author My Name <default@email.com>"
git commit-x -m "Custom message with committer and author My X Name <mr_x@email.com>"
git commit-y -m "Custom message with committer and author My Y Name <mr_y@email.com>"
git commit-z -m "Custom message with committer and author My Z Name <mr_z@email.com>"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.