私は次のようなコミットをしようとしています
git commit --author="John Doe <[email protected]>" -m "<the usual commit message>"
ここで、John Doeは、名前をコミットしたいユーザーです。
git log
で大丈夫です。ただし、gitk
を実行すると、作成者名は正しいが、コミッター名はグローバルgit config設定から選択されます(したがって、私の名前/メールに設定されます)。
2つの違い(コミッターと著者)は何ですか?
他のユーザーにもコミッターを設定する必要がありますか?
はいの場合、どのように?
元のポスターは尋ねます:
2つのコミッターと著者の違いは何ですか?
作成者は、元々コードを書いた人です。一方、コミッターは、元の著者に代わってコードをコミットした人であると想定されます。 Gitでは履歴を書き換えたり、他の人に代わってパッチを適用したりできるため、これはGitで重要です。 FREEonlinePro Gitbook =このように説明します:
authorとcommitterの違いは何かと疑問に思われるかもしれません。 authorは元々パッチを書いた人で、committerは最後にパッチを適用した人です。そのため、パッチをプロジェクトに送信し、コアメンバーの1人がパッチを適用すると、作成者およびコミッターとしてのあなたの両方が信用を得ます。
元のポスターは尋ねます:
他のユーザーにもコミッターを設定する必要がありますか?
いいえ、正直に言うと、著者とコミッターが実際に同じ人物でない限り、著者にコミッターを設定するべきではありません。
メーリングリスト+ git format-patch
+ git apply
は作成者を生成できます!=コミッター
パッチがあるLinuxカーネルのようなプロジェクトでは:
git format-patch
により生成git send-email
を使用して、メールで送信git apply
またはgit am
のいずれかで別の人が適用した場合: git amを使用して電子メールメッセージからパッチを適用する方法?作成者とコミッターが異なる単一の新しいコミットを生成します。
たとえば、このランダムに選択されたパッチと対応するコミットを参照してください。
GitHubやGitLabなどのGit Webインターフェースは、作成者を生成する場合と生成しない場合があります!=コミッター
Git(Hub | Lab)は同じマシン上でアップストリームリポジトリとforkリポジトリの両方を保持しているため、次のいずれかを含め、ローカルで実行できることはすべて自動的に実行できます。
マージコミットを作成します。
Author!=コミッターを生成しません。
SHAまたは新しいコミットをそのまま保持し、新しいコミットを作成します。
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
歴史的に、これはGitHubで利用可能な最初の方法でした。
ローカルでは、これはgit merge --no-ff
で行われます。
これにより、プルリクエストごとに2つのコミットが生成され、git履歴にフォークが保持されます。
master
の上にリベースします
GitHubは、コミットをハッキングして、マージボタンを押した人をコミッター==に設定します。これは必須ではなく、デフォルトではgit rebase
によってローカルで実行されることもありませんが、プロジェクトのメンテナーに説明責任を与えます。
Gitツリーは次のようになります。
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
これは、git apply
電子メールパッチとまったく同じです。
現在GitHubで:
https://help.github.com/articles/about-merge-methods-on-github/
新しいコミットのコミッターを設定する方法は?
環境変数を使用してコミッターをオーバーライドすることを見つけることができました。
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
特定のコミットのコミッターとコミット日を取得する方法は?
git log
ではデフォルトで著者データのみが表示されます。
コミッターの日付を表示するには、次のいずれかを実行できます。
特にそのためにログをフォーマットします。
git log --pretty='%cn %cd' -n1 HEAD
ここで、cn
およびcd
はCommitter Name
およびCommitter Date
を表します
定義済みのfuller
形式を使用します。
git log --format=fuller
低レベルに移動し、コミットデータ全体を表示します。
git cat-file -p HEAD
新しいコミットのコミッターの日付を設定する方法は?
git commit --date
は作成者の日付のみを設定します。コミッターの日付については、環境変数で見つけることができました。
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
Gitはどのように著者とコミッターを内部に保存しますか?
基本的に、コミットはテキストファイルであり、2行に区切られたフィールドが含まれています。
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
これにより、両方がコミットオブジェクト内の2つの完全に独立したデータエントリであることが明確になります。
@Ciro Santilli新疆改造中心六四事件法轮功 使用することを提案
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
名前とメールを繰り返すことを避けるために、それらを再利用できます
GIT_COMMITTER_NAME='a'; GIT_COMMITTER_EMAIL='a'; git commit --author "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
最初に変数を個別のコマンドで設定し、次にgit commit
呼び出しに使用します(二重括弧に注意してください)。