我在开发时将更改日志保留在git-notes --ref changelog
。我总是在合并到主提交上做一个注释并将其推送到三个遥控器(git push <remote> refs/notes/changelog
) - 但每次我忘记从一个遥控器和fetch
推送它,ref被一些旧版本覆盖:
(对不起德国语言)
$ git fetch github -p
Von github.com:<user>/<repo>
+ ca36d98d...1f3b9041 refs/notes/changelog -> refs/notes/changelog (Aktualisierung erzwungen)
如何预防?它与我的.git/config
有什么关系?
(摘自.git/config
):
[remote "github"]
url = git@github.com:<user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/github/*
fetch = +refs/pull/*/head:refs/remotes/github/pr/*
push = +refs/notes/changelog:refs/notes/changelog
fetch = +refs/notes/changelog:refs/notes/changelog
[notes "rewrite"]
rebase = true
amend = true
[notes]
rewriteRef = refs/notes/changelog
答案 0 :(得分:1)
你是对的。 fetch
文件中的每个.git/config
行指定了Git将使用的众多默认提取引用之一,因此:
fetch = +refs/heads/*:refs/remotes/github/*
fetch = +refs/pull/*/head:refs/remotes/github/pr/*
fetch = +refs/notes/changelog:refs/notes/changelog
提供了三个这样的refspec。
每个refspec由两个由冒号分隔的主要部分组成:左边是源引用,右边是目标引用。可以使用星号*
,其行为主要类似于shell glob *
(仅作为源;目标*
将替换为匹配的源*
。 如果此对前缀为加号+
,则始终强制更新(就像在命令行中使用--force
一样)。
请注意,远程跟踪名称(例如refs/remotes/github/master
)存在于每个远程空间中:您将origin
的{{1}}提取到master
,这明显不同于refs/remotes/origin/master
。因此,至少在所有普通用途中,为这些名称强制获取是安全的:您不能覆盖refs/remotes/github/master
中的自己的分支,也不能覆盖任何其他远程远程跟踪名称。
对于refs/heads/
中的注释引用,以及refs/notes/
中的代码,当然不为true,因此请谨慎使用前导refs/tags/