Расширения Git: rcs-ключевые слова, пятна и чистые фильтры

Прежде всего, я должен сказать, что я совсем новичок в Git. Так что я еще не знаю все советы и рекомендации... У меня есть следующая проблема:

В файле у меня есть определенные ключевые слова rcs (например, $Date$, $Author$ и $Commit$). Предполагается, что эти ключевые слова будут обновлены с помощью фильтра пятен. Сам фильтр работает, как запланировано, и запрашиваемая информация обновляется в файле. Но проблема в том, что, похоже, что при использовании вытягивания (с использованием Git Extensions) и файлов, фильтруемых через пятнистый фильтр, данные, обновленные в файлы, не самые последние (это из 2-го нового / последнего коммита). После того, как я выполню команды, которые выполняют магию в фильтре вручную, данные верны.

Вопрос в том, есть ли способ обновить эти последние / новейшие данные в файлах так, как я делаю сейчас?

И способ, которым я делаю это прямо сейчас, идет в соответствии с инструкциями в https://github.com/kimmormh/git-rcs-keywords (некоторые небольшие изменения, связанные с ОС, я использую Windows, и пути к файлам, включая пробелы),

Заранее спасибо!

1 ответ

Когда вы тянете, фильтр грязи запускается до того, как голова быстро переходит вперед. Многие из команд git работают с HEAD по умолчанию. В частности, фильтр rcs-smudge, который вы используете или на котором вы работаете, делает следующее:

$rev = `git log -- $path | head -n 3`;

это эквивалентно,

$rev = `git log HEAD -- $path | head -n 3`;

в то время как в вашем случае было бы правильнее сделать:

$rev = `git log FETCH_HEAD -- $path | head -n 3`;

для учета коммитов, которые вы тянете с пульта.

Однако обратите внимание, что в случае конфликта слияния FETCH_HEAD не станет HEAD, скорее будет создана специальная фиксация слияния для соединения FETCH_HEAD с ветвью. В этом случае вы можете использовать pre-commit крюк (может быть, вместе с post-merge hook), чтобы определить, нужно ли повторно размазывать файл снова. Кроме того, во время работы фильтра smudge вы еще не можете знать, что будет конфликт слияния, поэтому в pre-commit Крюк, вам придется сначала отменить изменения.

Другие вопросы по тегам