Kodu farklı bir kullanıcı olarak nasıl taahhüt edersiniz?


112

Bunu bir senaryo için yapabilmek istiyorum. Aslında Git'teki bazı kodların tüm sürüm geçmişini yeniden oluşturuyorum - şu anda farklı bir sürüm kontrol sistemi kullanıyor. Kaydın orijinal yazarını (ve tarihini) korurken, komutları Git'e işlemlere ekleyebilmek için betiğe ihtiyacım var.

Kaydetme yazarını ve değişikliğin yapıldığı tarih / saati bildiğimi varsayarsak, bunu yapmama izin veren bir Git komutu var mı? Var olduğunu varsayıyorum çünkü git-p4 benzer bir şey yapıyor. Sadece bunu yapmanın en iyi yolunu istiyorum.


1
Hızlı içe aktarmayı kullanmayı denediniz mi?
alternatif

Kabul ediyorum, hızlı içe aktarma muhtemelen gitmenin en iyi yolu. Sen kullanabilirsiniz işlemek git : (daha düzgün altta yatan tesisat veya karma-nesne , update-indeksi , yazma ağacı , kesinleştirme ağaç , update-ref , vs.), ancak hızlı ithalat daha hızlı, iyi, olurdu.
Chris Johnsen

Hızlı içe aktarmayı düşünmüştüm, ancak ben de oldukça acemi olduğum için temel komutları kullanmaya karar verdim. Dürüst olmak gerekirse, hızlı içe aktarmanın nasıl çalıştığını tam olarak anlamıyorum ve bu nedenle daha iyi anlayana kadar kullanmakta biraz tereddüt ediyorum. Evet, commit kullanmak çok daha yavaş olacak, ancak en azından ne bekleyeceğimi bileceğim - özellikle de hata ayıklama sırasında.
Carl

1
git commit --author = "Ad <ad@example.com>" -a -m "işleme mesajı"
Masih

Yanıtlar:


148

Check out --authorseçeneği için git commit:

Gönderen adam sayfası :

--author=<author>

Kaydetme yazarını geçersiz kılın. Standart A U Thor <author@example.com>biçimi kullanarak açık bir yazar belirtin . Aksi takdirde <author>, bir model olduğu varsayılır ve bu yazar tarafından mevcut bir kaydı aramak için kullanılır (yani rev-list --all -i --author=<author>); daha sonra commit yazarı bulunan bu tür ilk kayıttan kopyalanır.


18
Ayrıca, --datetarihi geçersiz kılma seçeneği.
Chris Johnsen


@Tim Henigan: dokümantasyon şimdi barındırılan gibi görünüyor Github böylece adam sayfası Yayınladığınız bağlantı öldü. Yeni sayfanın aynı şey olduğunu onaylayabilir misiniz (bağlantıların güncellenmesi gereken başka yanıtlar olması durumunda)?
R0MANARMY

@ R0MANARMY: URL’yi güncelledim. GitHub sayfaları doğru. Man sayfaları artık kernel.org'da bulunmadığı için bağlantımı güncelledim. Değişikliği bana bildirdiğiniz için teşekkürler.
Tim Henigan

1
İşte kullanmaya son verdiğim şey:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Carl

113

Sadece bu eklemek için: --authorKabul cevapta belirtildiği seçeneği yalnızca geçersiz kılar yazar değil, committer taahhüt bilgisini.

Çoğu durumda doğru davranış budur, ancak herhangi bir nedenle kaydedici bilgisini manuel olarak geçersiz kılmanız gerekirse , GIT_COMMITTER_NAMEve GIT_COMMITTER_EMAILortam değişkenlerini kullanın (bir GIT_COMMITTER_DATEde vardır). Bkz Git-Internals-Çevre-Değişkenler

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="name@email.com" git commit --author="New Name <name@email.com>"

Bu, commit'i belirtilen kullanıcı tarafından yazılmış ve gerçekleştirilmiş gibi gösterir .


16
... ve farkı görmek için:git log --pretty=fuller
bluenote10

2
Mükemmel. İstediğim buydu ve git internals man sayfasını asla bulamazdım.
ksp

3

~ / .Gitconfig dosyanızı düzenleyin ve varsayılan olmayan bir kullanıcıyı ve e-postayı özelleştirebileceğiniz yeni bir takma ad ekleyin.

[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

Dene

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>"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.