簡體   English   中英

git config remote.origin.tagOpt --no-tags 沒有明顯效果

[英]Git config remote.origin.tagOpt --no-tags has no apparent effect

每次我嘗試更新特定存儲庫時,它都會失敗,因為維護者會定期更改nightly標簽:

$ git fetch
From https://github.com/kyazdani42/nvim-tree.lua
 ! [rejected]        nightly    -> nightly  (would clobber existing tag)

我在 .git/config 中添加了remote.origin.tagOpt = --no-tags 該設置顯然是無用的,因為它無論如何都會獲取標簽。

我也試過remote.origin.prune = trueremote.origin.pruneTags = true沒有區別。

這是完整的配置:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://github.com/kyazdani42/nvim-tree.lua.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    prune = true
    pruneTags = true
    tagOpt = --no-tags
[branch "master"]
    remote = origin
    merge = refs/heads/master

這是man git-fetch的相關部分:

默認情況下,任何指向正在獲取的歷史記錄的標簽也會被獲取; 效果是獲取指向您感興趣的分支的標簽。可以使用 --tags 或 --no-tags 選項或通過配置 remote.<name>.tagOpt 來更改此默認行為。 通過使用顯式獲取標簽的 refspec,您也可以獲取不指向您感興趣的分支的標簽。

這是一個 git 錯誤還是我做錯了什么?

編輯:我發現了一個解決方法:

[remote "origin"]
    url = https://github.com/kyazdani42/nvim-tree.lua.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = ^refs/tags/*
    tagOpt = --no-tags

我仍然想知道是否有更好的方法。

我不相信 Git 的標簽處理總是像文檔中聲稱的那樣工作,而且,即使我對 Git 的了解如此之深,我也不確定文檔最初打算聲明什么。 盡管如此,在我看來--no-tags應該對你有用。 所以我認為這是一個 Git 錯誤——但它不是明確、明確的錯誤:也許它應該做它正在做的事情。

也就是說,對有用的是告訴git fetch自動強制更新refs/tags/nightly

[remote "origin"]
    url = https://github.com/kyazdani42/nvim-tree.lua.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/tags/nightly:refs/tags/nightly

這將使您的 Git 願意強制更新nightly標簽,這樣您就不需要--no-tags來表現。

顯然你的解決方法也有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM