別のユーザーとしてコードをどのようにコミットしますか?


112

スクリプトでこれを実行できるようにしたいと思います。私は基本的にGitの一部のコードのバージョン履歴全体を再作成しています-現在、別のバージョン管理システムを使用しています。コミットの元の作成者(および日付)を保持しながら、Gitへのコミットを追加できるスクリプトが必要です。

コミットの作成者と変更が行われた日時がわかっているとすれば、これを可能にするGitコマンドはありますか?git-p4が同じようなことをするので、私はそこにあると思います。私はそれを行うための最良の方法を求めています。


1
高速インポートを試しましたか?
代替

私は同意します。高速インポートが最善の方法です。あなたは使用することができますコミットGIT:(より正確に根本的な配管やハッシュオブジェクト更新インデックス書き込み木をコミットツリー更新-REFなど)が、高速インポートが速く、よくあることでしょう。
Chris Johnsen、2009

私は高速インポートについて考えましたが、私はかなりgitの初心者なので、基本的なコマンドを使用することにしました。完全に正直に言うと、高速インポートがどのように機能するかを完全には理解していません。そのため、理解が深まるまで、使用をためらいます。はい、それはコミットを使用するとかなり遅くなりますが、少なくとも私は特にデバッグ中に何を期待するか知っています。
Carl

1
git commit --author = "Name <name@example.com>" -a -m "commit msg"
Masih

回答:


148

次の--authorオプションを確認してくださいgit commit

manページから:

--author=<author>

コミット作者を上書きします。標準A U Thor <author@example.com>形式を使用して明示的な作成者を指定します。それ以外の場合 <author>はパターンと見なされ、その作成者(つまりrev-list --all -i --author=<author>)による既存のコミットの検索に使用されます。コミットの作成者は、最初に見つかったそのようなコミットからコピーされます。


18
また、--date日付を上書きするオプション。
Chris Johnsen、2010

特定の例、私が試すすべてのことを
教えて

@Tim Henigan:ドキュメントがGithubでホストされているようです。投稿したmanページへのリンクは無効になっています。新しいページが同じであることを確認できますか(リンクを更新する必要がある他の回答がある場合)。
R0MANARMY

@ R0MANARMY:URLを更新しました。GitHubページは正しいです。manページがkernel.orgでホストされなくなったので、リンクを更新しました。変更についてお知らせいただきありがとうございます。
Tim Henigan

1
これが私が最終的に使用したものです:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Carl

113

これに追加するだけです:--author承認された回答で言及されているオプションは、作成のみをオーバーライドし、コミットのコミッター情報はオーバーライドしません。

これはほとんどの場合正しい動作ですが、何らかの理由でコミッター情報も手動でオーバーライドする必要がある場合は、GIT_COMMITTER_NAMEおよびGIT_COMMITTER_EMAIL環境変数を使用します(a GIT_COMMITTER_DATEもあります)。Git-Internals-Environment-Variablesを参照してください

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

これにより、指定されたユーザーによって作成およびコミットされたように見えます。


16
...そして違いを確認するには:git log --pretty=fuller
bluenote10

2
完璧です。これは私が欲しかったものであり、git internalsのmanページを見つけることができなかったでしょう。
ksp

3

〜/ .gitconfigファイルを編集し、デフォルト以外のユーザーとメールをカスタマイズできる新しいエイリアスを追加します。

[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

試して

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>"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.