単一のコミットを複数の開発者に帰属させる方法は?


120

私が作業に精通しているすべてのバージョン管理システムの方法は、各コミットが1人の開発者に起因するということです。アジャイルエンジニアリング、特にペアプログラミングの台頭により、2人の開発者が同じタスク、たとえばバグ修正に大きな貢献をした状況が発生しています。

プロジェクトマネージャーはペアが行っている作業を認識しているため、アトリビューションの問題は作業環境ではそれほど問題になりませんが、2人のオープンソースコントリビューターがペアになって、いくつかのコードをプッシュする場合はどうでしょうか。彼らが一緒に働いているという考えを持っていない特定のプロジェクトに。Gitのようなバージョン管理システムで特定のパッチを複数の開発者に帰属させる方法はありますか?


10
これは、バージョン管理システムごとに分割する必要があります。
Ciro Santilli郝海东冠状病六四事件法轮功

回答:


63
Commit title

Commit body

Co-authored-by: name <additional-dev-1@example.com>
Co-authored-by: name <additional-dev-2@example.com>

このアプローチの問題の1つは、この開発者グループの署名付き鍵を作成できないため、機能で機能しなくてもGithubがそれを処理したかのように処理しても、基本的に誰でもこのリストに追加できるということです。ただし、これはほとんどの場合問題にはなりません。

例えば Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

通常の作者または署名グループ(古い方法)では、署名されていないことがわかり、コミットを信頼できないことがわかります。ただし、共著者には署名プロセスはありません。


主に時代遅れの答え:

1つの解決策は、ペアの名前を設定することです。

git config user.name "Chris Wilson and John Smith"

以下は、他の一時的な解決策と関連するバグレポートです。

バグgit-core:Gitは1つのコミットで複数の作成者をサポートする必要がある


1
その人のメールアドレスがわからない場合はどうでしょうか?GitHubのユーザー名などをリンクする方法はありますか?
アーロンフランケ

彼らが行った場合、以前はあなただけで確認することができますコミットしている:git show <COMMIT_ID> --format=email
ジェリー

2
これはすでにGitLabで動作しているようです(gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919を参照)
Meiogordo

67

git規約では、コミットメッセージの最後にCo-Authored-Byを使用します(git kernel:コミットメッセージの規約Openstack Commitメッセージを参照)。これは、Gerryの回答にリンクされているgit-coreバグの解決策の1つでもあります

Co-authored-by: Some One <some.one@example.foo>

2010年5月5日のコメントで、Josh Triplettは、対応するサポートをgitに実装することも提案しています。

以下のようLlopisはコメントで指摘し、GitHubのは2018年1月29日に彼らのブログで、このためのサポートを発表しました:共著者と一緒にコミット詳細)。


8
これはGitHubでサポートされるようになりました。
llrs 2018年

@Llopisちょうどブログの投稿を見て、私の答えを更新するためにここに来ました。誰かが速くなったのを見て
良かった

私は簡単なgitプラグインを作成して、これらの共同執筆者によるトレーラーを自動的に管理しやすくしました:github.com/cac04/git-pair
c--

このアプローチはクラッジのように見えます(Bazaar wayを参照)。そして、私がそれを正しく理解していれば、この方法には共著者が単なる追加である主な著者がいます。
ルスラン

28

バザールの場合:

bzr commit --author Joe --author Alice --author Bob

これらの名前は、コミッター名とは別にログに表示されます。


20

git-pair

https://github.com/pivotal/git_scripts#git-pair

Gitペアプログラミング属性を自動化するPivotalのこの単純なスクリプト。

次の.pairsようなファイルを作成します。

# .pairs - configuration for 'git pair'
pairs:
  # <initials>: <Firstname> <Lastname>[; <email-id>]
  eh: Edward Hieatt
  js: Josh Susser; jsusser
  sf: Serguei Filimonov; serguei
email:
  prefix: pair
  domain: pivotallabs.com
  # no_solo_prefix: true
#global: true

その後:

git pair sp js

セット:

user.name=Josh Susser & Sam Pierson
user.email=pair+jsusser+sam@pivotallabs.com

あなたのために。


13

gitはコミットauthorcommitter[1] を区別します。回避策として使用できます。たとえば、自分をとして、committer共著者をとして署名しますauthor

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a@a' git commit --author 'b <b@b>'

このようにして、あなたとあなたの共著者の両方がgit履歴に記録されます。を実行するとgit log --format=fuller、次のようになります。

commit 22ef837878854ca2ecda72428834fcbcad6043a2
Author:     b <b@b>
AuthorDate: Tue Apr 12 06:53:41 2016 +0100
Commit:     a <a@a>
CommitDate: Tue Apr 12 09:18:53 2016 +0000

    Test commit.

[1] Gitでの作者とコミッターの違いは?


4

または、私がコントリビューターであるオープンソースプロジェクトがGitHubにあり、コマンドラインから実行するための優れた方法を提供しています。このプロジェクトは、次のように協調自動コミットを作成するためにエイリアスを設定するのに役立ちます。

$ git co-commit -m "Commit message" --co "co-author <co-author-email>"

このアプローチを使用すると、グラフィカルインターフェイスなしで共同作成されたコミットを作成できます。


5
私が見ることができることから、これは「Co-authored-by:」と「co-author <co-author-email>」をコミットメッセージの末尾に追加するgitエイリアスです。
Kariem



1

共著者ツールのほとんどは、オートコンプリートをサポートしていません。あなたはpython3で書かれたgit-cocoを試すことができます(私は開発者です)。git-cocoオートコンプリートとオートサジェストをサポートしています。これはサンプル作者のスナップショットの オートコンプリートです

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