git переопределяет ссылки / заметки при получении? - PullRequest
0 голосов
/ 24 апреля 2018

Я веду свой список изменений в 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 Ответ

0 голосов
/ 24 апреля 2018

Вы правы.Каждая fetch строка в вашем .git/config файле указывает один из многих используемых по умолчанию извлекаемых refspecs 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 master в refs/remotes/origin/master, что явно отличается от refs/remotes/github/master.Следовательно, безопасно, по крайней мере для всех обычных целей, извлекать с силой для таких имен: вы не можете перезаписать ни свои собственные ветви, которые находятся в refs/heads/, ни имена удаленного отслеживания других удаленных устройств.

Этоконечно, не верно для ссылок на заметки в refs/notes/, а также для тегов в refs/tags/, поэтому будьте осторожны с ведением + на любом из них.

...