git переопределяет ссылки / заметки при получении?
Я держу свой список изменений в git-notes --ref changelog
при разработке. Я всегда делаю заметку о коммите слиянием с мастером и выкладываю его на три пульта (git push <remote> refs/notes/changelog
) - но каждый раз, когда я забываю нажать на один пульт и fetch
отсюда ссылка переопределяется старой версией:
(Извините за немецкий язык)
$ 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
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
предоставляет три таких refspecs.
Каждый refspec состоит из двух основных частей, разделенных двоеточием: слева - ссылка на источник, а справа - ссылка на назначение. Звездочки *
может использоваться и действовать в основном как оболочка *
(только в качестве источника; пункт назначения *
заменяется любым другим источником *
соответствует). Если эта пара имеет префикс со знаком плюс +
обновление всегда принудительное (как если бы вы использовали --force
в командной строке).
Обратите внимание, что имена для удаленного отслеживания, такие как refs/remotes/github/master
существовать в удаленном пространстве: вы получите origin
"s master
в refs/remotes/origin/master
который явно отличается от refs/remotes/github/master
, Следовательно, безопасно, по крайней мере для всех обычных целей, извлекать с силой такие имена: вы не можете перезаписать свои собственные ветви, которые находятся в refs/heads/
или имена удаленного отслеживания любого другого пульта.
Это, конечно, не верно для ссылок на заметки в refs/notes/
ни для тегов в refs/tags/
так что будьте осторожны с ведущими +
на любой из тех.