2013-05-21 24 views
48

我現在有一個git的遠程設置如下所示:抓取所有標籤從混帳遠程拉

[remote "upstream"] 
    url = <redacted> 
    fetch = +refs/heads/*:refs/remotes/upstream/* 

當我分支主發出git pull,所有遠程磁頭讀取到遙控器/上行,那麼遠程數據庫/ upstream/master被合併到master中。任何可以到達的標籤也可以同時獲取,這非常方便。

我想git pull額外獲取所有標籤來自遠程,而不僅僅是那些可以直接從頭部到達的標籤。我最初嘗試登錄tagopt == --tags,但發現這導致只有標籤被抓取,從而打破了一切。 (Junio甚至說這是一個horrendous misconfiguation)。

有沒有辦法讓git pull默認獲取所有的遠程標籤,除了遠程頭?

+0

提醒一下自己:確保你真正第一推標籤(不自動工作): '混帳推送原點' – Hafenkranich

+0

使用'tagopt'解決方案不再是錯誤配置; [截至1.9/2.0(2014年第一季度)](https://stackoverflow.com/a/20608181)這將獲取所有標籤*除了*通常取得的任何東西。 – mgiuffrida

回答

44

您應該可以通過爲本地配置添加標籤的refspec來實現此目的。具體來說:

[remote "upstream"] 
    url = <redacted> 
    fetch = +refs/heads/*:refs/remotes/upstream/* 
    fetch = +refs/tags/*:refs/tags/* 
+1

啊哈,我從來沒有意識到你可以有多條取線,我推測最後一條只會覆蓋。這非常好,很明確。 – jleahy

99

一個簡單的git fetch --tags爲我工作。

+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – Fizzix

+6

@Fizzix也許標題應該改爲包含「默認」。這篇文章回答了我的問題。 –

+0

這不適合我。我可以看到'git ls-remote'的標籤。 – dangeroushobo

5

很簡單。做一個

混帳取--all

12

--force選項是刷新局部變量是有用的。主要是,如果您有浮動標籤:

git fetch --tags --force 

的混帳拉選項也--force選項,並說明是一樣的:

當git的取指與使用:的Refspec,它拒絕 更新本地分支,除非它提取的遠程分支 是後代。該選項將覆蓋 檢查。

但是,根據--no-tags商務部:

默認情況下,指向正在從 遠程倉庫下載的對象標籤被獲取並存儲在本地。

如果默認的說法是不是有限制的,那麼你也可以嘗試

git pull --force