2011-07-20 4 views
37

が、私はちょうどGitHubの上でコミット以下に出くわした: https://github.com/felixge/node-formidable/commit/0a0b150668daa3c6f01626d2565b898e5da12392Gitの作者とコミッターの違いは何ですか?

どのようにして、同じことのようにコミット時に複数の著者を持つのでしょうか?

+4

実際には、著者が1人、通信が1人であることがわかりますiter ... –

+1

[Gitの作者とコミッターの違いは?](http://stackoverflow.com/questions/18750808/difference-between-author-and-committer-in-git) –

答えて

47

- それは作者とコミッタのですが。 2つのフィールドは異なる意味を持っています。著者はコンテンツを作成したものであり、コミッタはそれをコミットしたものです。あなたが通常のコミットをするとき、あなたは両方です。 (そして、両方の関連する電子メールとタイムスタンプが付いています。)しかし、彼らはいくつかの重要な方法で異なってくることができます。

  • git format-patch/git am - このペアは、あなたが一般的に持っている、その後、電子メールで提出し、パッチにコミット回すことができます他の誰かがそれらを適用する。あなたは著者のままです。それらを適用する人はコミッターです。これはかなり確かにgithubで何が起こったのですか。

  • git commit --amendgit rebasegit filter-branch。これらは基本的に、単一コミットからブランチの一部の履歴、履歴全体にわたる履歴書き換えのバリエーションです。コミッター情報を変更する可能性があります。特に、コミッタータイムスタンプを書き換えます。元の作者は、(デフォルトの動作モードで)その場にとどまり、作者が書き直しをしている人でも、名前と電子メールの滞在はありますが、タイムスタンプは当然異なります。

+0

正確にするには履歴の書き換えは、著者情報を含むすべてのものを修正することができます。実際に使用されることはほとんどありませんが、それでも可能です。 –

+0

上記のリンクは壊れています – Chirantan

+0

@Chirantan:基本的には、他のGitのマンページリンクはここにあります。なぜなら、kernel.orgはダウンしていて、まだマンページをバックアップしていないからです。最後のものをすべて書き直すことは価値がありません。 'man git-format-patch'を使うだけです。 – Cascabel

3

複数の著者ではありません。 1つは著者であり、もう1つはコミッターです。

あなたがはっきりとそれを見ることができたクローン作りたい場合:実際には2本の著者ではありません

$ git cat-file -p 0a0b150668daa3c6f016 
tree 91edcb411b7cd0708c1f5bb05621846146c9425a 
parent 6b9ffe3653fe59f035b01ba1f46b5f2650be00ca 
author Logan Kearsley <[email protected]> 1308937685 -0700 
committer Felix Geisendo╠Иrfer <[email protected]> 1309117893 +0200 

Slight but definite & consistent performance boost. 
6

コミットに関連付けられた複数の作者はいません(複数の作者を1回のコミットに割り当てることもできません)。この場合、gliese1337はの著者であり、felixgeはコミッターでした。おそらく、これは、gliese1337が、受け入れられてfelixhe(リポジトリ所有者)によってコミットされたプル要求を提出したためです。そのワークフローはGitHubでよく見られます。これはプロジェクトメンテナが電子メールでパッチを受け取った場合にも役立ちます。そのため、パッチの作成者はプロジェクトへのコミットアクセス権がなくてもパッチのクレジットを受け取ります。

関連リンクのカップル:パッチをマージする際に、このようなシステムにおいて

Short Git Wiki section on author attribution
A feature request for multiple author functionality in Git core

0

GitHubのとGitLab等Gitのウェブインターフェース

、著者は、またはであってもなくてもよいですレポの設定に応じてコミッタとは異なります。

  • はコミットマージを作成します。同じマシン上の上流とフォークのリポジトリの両方を保持し、それはあなたが同様にローカルに何かできることをやる自動的に行うことができます| Gitリポジトリ(ラボ・ハブ)以来

    作成者=コミッタは生成されません。

    は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履歴にフォークを保持します。

  • マージボタンを押す誰==これは原則的に必須ではありません、とさえgit rebaseによってローカルにデフォルトで実行されていないが、GitHubにもコミッターを設定するためにコミットをハッキングmaster

    の上にリベース。

    これを行う理由は、プロジェクト管理者に説明責任を与えるからです。正確git applyメールパッチのそれのようなものです

    * Feature commit (committer == maintainer, author == contributor) 
    | 
    * Old master (random committer and author)  
    

    のgitツリーは現在のように見えます。

    現在、GitHubの上

  • 方法は、所有者がレポ設定に有効または無効にすることができ、マージボタンにドロップダウンを経由してマージするとき、あなたが方法を選択

https://help.github.com/articles/about-merge-methods-on-github/

関連する問題