2013-03-19 36 views
23

我不想從原點獲取每個分支,因爲有很多。我只想跟蹤一些(例如,master)和我的分支機構(按my_name子目錄組織)。我能做到以下幾點:我可以在.git/config中指定獲取多個refspecs嗎?

$ git fetch origin refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch 

我想指定refspecs上述「組」是的git fetch默認。我曾嘗試

$ git config remote.origin.fetch refs/heads/my_name/*:refs/remotes/origin/my_name/* 
$ git config --add remote.origin.fetch refs/heads/master:refs/remotes/origin/master 

它失敗:

$ git config remote.origin.fetch 
refs/heads/my_name/*:refs/remotes/origin/my_name/* 
error: More than one value for the key remote.origin.fetch: refs/heads/master:refs/remotes/origin/master 

我也嘗試以下,但它也失敗:

$ git config remote.origin.fetch 'refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch' 
$ git fetch 
fatal: Invalid refspec 'refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch' 

注:Git的1.7.11

+1

注意:自Git 2.1(2014年8月)以來,您可以使用新的獲取選項'--refmap = '來覆蓋每個調用基礎的fe​​tch refspec(意思是一個命令):參見[我的答案下面](http://stackoverflow.com/a/25098004/6309) – VonC 2014-08-02 18:13:50

回答

26

您可以添加您的.git/config中的以下行用於指定多個用於提取的參考規格:

[remote "origin"] 
     fetch = refs/heads/my_name/*:refs/remotes/origin/my_name/* 
     fetch = refs/heads/master:refs/remotes/origin/master 
     fetch = refs/heads/some_branch:refs/remotes/origin/some_branch 

可以操作的Refspec前加上前綴+,如果你想覆蓋取非快速向前引用,以及像這樣:

[remote "origin"] 
     fetch = +refs/heads/my_name/*:refs/remotes/origin/my_name/* 
     fetch = +refs/heads/master:refs/remotes/origin/master 
     fetch = +refs/heads/some_branch:refs/remotes/origin/some_branch 

注意,部分通配不支持(即a/b/ca*不支持,但a/b/*是)。

10.5 Git Internals - The Refspec

+1

我意識到由「git config remote.origin.fetch」報告的錯誤並不意味着它不能與多個值一起使用。我只需要使用「git config --get-all remote.origin.fetch」以不同的方式進行查詢。 – user716468 2013-03-22 09:59:26

+2

@Tuxdude感謝。是否有一個可以實現上述目標的命令?我試圖保持我的文檔簡潔,爲新的開發人員,我寧願他們可以通過「git config remote.origin.fetch」指定多個refspecs,而不是編輯他們的git配置文件。 – danjah 2014-11-05 22:04:53

+0

@Danjah有點像「+ refs/heads/master:refs/remotes/origin/master'」會工作 – jmnas 2015-06-24 13:39:58

4

注意:如果你想從不同的Refspec 上一個調用取(覆蓋暫時的獲取在配置的Refspec註冊),你可以這樣做,因爲Git的2.1(2014年8月)。

commit c5558f8通過Junio C Hamano (gitster)

自推出遠程跟蹤分支機會更新,開始在各地f269048fetch:投機更新追蹤裁判,2013年5月11日),在一些更新v1.8.4時代,remote.*.fetch配置即使在命令行中給出指定要獲取的內容的指定時也會始終啓動,並且無法禁用或覆蓋每個調用

教導命令注意--refmap=<lhs>:<rhs>命令行選項,該選項可用於覆蓋使用配置的remote.*.fetch作爲refmap。

,將給你新的選擇:

--refmap=<refspec> 

時,取的命令行上列出參考文獻,使用指定的Refspec(可多次使用),以裁判映射到的遠程跟蹤分支,而不是遠程存儲庫的remote.*.fetch配置變量的值。
有關詳細信息,請參閱「配置遠程跟蹤分支」一節。

(那混帳 「配置遠程跟蹤分行」 部分還從Git的2.1日期:見 「Having a hard time understanding git fetch」)

4

要覆蓋現有獲取的Refspec(S),而無需手動編輯.git/config,你可以根據需要使用--unset-all後跟儘可能多的--add

對於問題的示例期望refspecs,這將是:

$ git config --unset-all remote.origin.fetch 
    $ git config --add remote.origin.fetch +refs/heads/my_name/*:refs/remotes/origin/my_name/* 
    $ git config --add remote.origin.fetch +refs/heads/master:refs/remotes/origin/master 

然後使用git config --get-all remote.origin.fetch以驗證結果。

+0

正是我需要的!實質上,更新版本標籤時,這可以防止舊標籤妨礙更新(和緩存),而不會對新標籤造成任何損失。你甚至可以毫無問題地回到舊標籤。 – taranaki 2017-05-19 20:13:08

相關問題