2017-07-04 84 views
0

詹金斯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

以冒號隔開,以任選地用加號前綴整個事情兩個引用的語法,是refspec。 Refspecs也可以省略冒號並且只包含一個引用,在這種情況下,加號可能(取決於這個簡化的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年左右的昏暗時間,這是您可以使用git fetch的唯一方法。遠程追蹤分支名稱是由於很高興讓您自己的Git記住這些名稱很長時間 - 每個新的git fetch都會覆蓋舊數據,除非您使用的是-a-且使用方式更易於使用。

  • 對於第1項(有什麼區別),請參閱其他答案。


如果你永遠只從一個遠程讀取(例如,從origin),你總是獲取所有的名字,其實這是完全合理的行爲:覆蓋舊的,過時的信息用新的,正確的信息。當你從多個遙控器中取出和/或當你零碎地取物品時,它會中斷。遠程追蹤分行名稱,儘管它們不是那麼好回顧的名稱,真的是一個很大的改進。