2012-03-12 71 views

回答

3

git fetch --tags會做到這一點。

docs(在--tags參數的說明):

爲分支頭被下載的大多數標籤的自動獲取,但不點標記的對象從分支頭被可到達跟蹤將不會被這個機制獲取。該標誌允許下載所有標籤及其相關對象。遠程的默認行爲可以使用remote ..tagopt設置來指定。

+0

但我問如何改寫現有的本地標籤,因爲他們錯誤地創建 – linquize 2012-03-12 06:20:37

+1

'混帳取--tags'實際上將更新現有的局部變量,例如,如果遠程標記FOO映射到1234567並且本地標記FOO映射到fedcba9,那麼'git fetch -tags'將用1234567替換FOO。 – torek 2012-03-12 06:35:18

+0

更新:在更新版本的git中,這將不再更新本地標記。你可以用'git fetch '+ refs/tags/*:refs/tags/*''('--force'也可以,但我沒有測試過)來強制更新它們。 – torek 2014-01-31 19:00:55

-1

標籤不會被覆蓋,因爲它們的意思是排序 - 不可變的。如果你想有一個(現實的)變化的對象,可以使用分支指針或ref。 給你留下:git tag -d tagname ...,然後再次獲取它。

+0

我不同意你的第一個陳述 - 這會扭曲使用VCS的整個觀點,你不覺得嗎? – lightonphiri 2014-01-31 08:46:20

+0

Git不鼓勵重寫(已分享,遠程)歷史記錄。這並不能擊敗VCS的目標 - 這是爲了保持歷史!在大多數情況下,可能會迫使這些事情發生,但可能會導致很多問題。 – 2017-01-05 09:20:48

4

git fetch --tags --all --prune

這將明確地告訴git的獲取,並在同一時間,除去遙控器上不再存在標籤。

+1

這似乎並未移除本地只存在的標籤。 – 2015-06-10 13:02:00

+0

@MartijnHeemels,GIT中不能從未被傳送的標記,並且從遠程移除的標籤之間進行區分。 – 2017-01-10 18:30:34

0

首先,與分支不同,git不跟蹤與本地標籤不同的遠程標籤。一旦完成抓取,他們是無法區分的。

  • 不更新本地的標籤(即使手冊不告訴)
    • git fetch --tags
  • 不更新本地標籤
    • git fetch
    • git fetch --prune
    • git fetch --prune --force

的標籤更新/改寫如下:

From git:path/name 
- [tag update]  my_tag -> my_tag 

這適用於輕量和附註的標籤,甚至混合。即:註釋標籤可能會被輕量級覆蓋,反之亦然。

我使用Git版本2.7.4

+0

注:這並不會刪除已在遠程 – 2017-03-29 09:05:02

+0

@CarlosHeuberger您的意見建議,你相信有辦法做到這一點刪除標記,但沒有。您確實可以刪除遠程中不存在的所有本地標籤,但也會刪除從不在遠程位置的_local標籤(例如,尚未推送,或標籤僅用於本地用途)。沒有辦法只刪除在remote_上刪除的標籤。 – 2017-03-29 10:44:04

+0

不知道爲什麼你認爲我的評論是暗示 - 我從來沒有寫過,有辦法做到這一點!?!我只是試圖補充你的答案,因爲它沒有說明本地標籤沒有被刪除,「更新本地標籤」可以理解爲也刪除了在遠程刪除的標籤。我認爲這是一個明確的聲明(沒有任何隱藏的建議)......但我的英語可能比我想象的要糟糕。 – 2017-03-29 14:19:17