2017-07-04 12 views
0

ジェンキンスGitのプラグインは、以下の2つのコマンドの違いは何私のrefの仕様に基づいてGitリポジトリ:「+レフリー/ヘッド/ <branch>:レフリー/リモコン/起源/ <branch>」

  1. をコンソール出力で以下のコマンドを生成しました?彼らの出力は少し異なって見えます。私は以下の彼らの出力を与えている:

    コマンド1:

    git fetch --no-tags --progress repo.git +refs/heads/qa:refs/remotes/origin/qa --depth=1

    出力:

    From <repo> 
    * [new branch]  qa   -> origin/qa 
    

    コマンド2:

    git fetch --no-tags --progress repo.git refs/heads/qa --depth=1

    出力:

    From <repo> 
    * branch   qa   -> FETCH_HEAD 
    
  2. FETCH_HEADはここで何を意味するのでしょうか?

  3. 私はrefs/heads/qaが 'qa'ブランチのローカル作業コピーであり、refs/remotes/origin/qaがリモート 'qa'ブランチであると信じています。しかし、この条約は何を意味するのですか?

    +レフリー/ヘッド/ QA:レフリー/リモコン/起源/ QA

答えて

1

、必要に応じてプラス記号が付いて全体のことで、コロンで区切られた2つの参照と構文、 refspecです。 Refspecは、コロンを省略して1つの参照のみを含む場合もあります。この場合、プラス記号は(この縮退したrefspecの使用に応じて)無機能です。 refspecsの詳細については、参照、例えば、What is the difference between these `git fetch` syntaxes?

は逆の順序で質問自分自身を撮影、しかし:

  • 項目3は、単純に間違っています。 refs/heads/qaの名前はです。それはrefspecにあるべきであるので、単に完全に綴られています。 「作業コピー」ではありません。という名前のです。 Gitは名前参照を使用して、masterqaのような人間が読める文字列をGitの内部ハッシュIDにマッピングします。 という参照という単語は、ブランチ、タグ、リモートトラッキングブランチなどの一般的な名前です。

    同様に、refs/remotes/origin/qa通常origin/qaに短縮リモート追跡ブランチであることを完全に綴らアウトリファレンスです。完全名がrefs/heads/qaのブランチと同様に、Gitはこの名前を使用して、人間が読める文字列origin/qaをハッシュIDにマッピングします。

  • FETCH_HEADという名前は、.gitディレクトリのファイル.git/FETCH_HEADを指します。 git fetchという非常に古い形式をリモートトラッキングブランチの発明の前から使用すると、Gitは取り出されたすべての名前とIDの値をどこかに格納しなければなりません。それは "どこか"というファイルです。他のGitコマンドは、それぞれの名前とIDのペアを釣り上げることができます。

    2007年以前のDim Timeに戻って、これはgit fetchを使用する唯一の方法でした。リモートトラッキングのブランチ名は、自分のGitにもっと長い期間保存してもらうのがいいですから、の場合はを上書きします。-aを使用しないと、使い方が簡単です。

  • 項目1(違いは何ですか)については、他の回答を参照してください。あなただけの今まで(originから、例えば)1リモートからのフェッチ場合


あなたは常に、これは実際には完全に合理的な行動である、すべての名前をフェッチ:古い、古い情報を上書き新しい正しい情報で複数のリモートからフェッチしたり、断片的に項目を取得したりするときに、ブレークダウンします。リモートトラッキングのブランチ名は、あまりにも遡及的な名前ではないにもかかわらず、かなり改善されています。

関連する問題