Git-фильтр с неправильной датой и SHA-1 (расширение ключевого слова)
Привет, я использую эти скрипты для расширения ключевых слов в git: https://github.com/turon/git-rcs-keywords/blob/master/.git_filters/rcs-keywords.smudge
Сценарий smudge выглядит следующим образом:
#!/usr/bin/perl
#
$path = shift;
$path =~ /.*\/(.*)/;
$filename = $1;
if (0 == length($filename)) {
$filename = $path;
}
# Need to grab filename and to use git log for this to be accurate.
$rev = `git log -- $path | head -n 3`;
$rev =~ /^Author:\s*(.*)\s*$/m;
$author = $1;
$author =~ /\s*(.*)\s*<.*/;
$name = $1;
$rev =~ /^Date:\s*(.*)\s*$/m;
$date = $1;
$rev =~ /^commit (.*)$/m;
$ident = $1;
while (<STDIN>) {
s/\$Date[^\$]*\$/\$Date: $date \$/;
s/\$Author[^\$]*\$/\$Author: $author \$/;
s/\$Id[^\$]*\$/\$Id: $filename | $date | $name \$/;
s/\$File[^\$]*\$/\$File: $filename \$/;
s/\$Source[^\$]*\$/\$Source: $path \$/;
s/\$Revision[^\$]*\$/\$Revision: $ident \$/;
} continue {
print or die "-p destination: $!\n";
}
чистый скрипт, как это:
#!/usr/bin/perl -p
#
s/\$Id[^\$]*\$/\$Id\$/;
s/\$Date[^\$]*\$/\$Date\$/;
s/\$Author[^\$]*\$/\$Author\$/;
s/\$Source[^\$]*\$/\$Source\$/;
s/\$File[^\$]*\$/\$File\$/;
s/\$Revision[^\$]*\$/\$Revision\$/;
файл примера, где ключевые слова должны быть заменены:
/**
* @file hello.c
* @author @$Author$
* @date @$Date$
* @version @$Revision$
*
* $Id$
*/
int main(int argc, char *argv[])
printf("Hello, new world!");
Ключевые слова заменяются соответствующими данными. Однако эти данные всегда отражают коммит, с которого я переключаюсь. Не тот, который я проверяю.
В качестве примера у меня есть файл hello.c в ветке master и модифицированный hello.c в ветке test_master. Если я проверил мастер, а затем проверил test_master, ключевые слова в hello.c отражают дату и SHA-1 файла в ветке master, и наоборот (при повторной проверке мастера файл становится нечетким с SHA-1 и датой test_master). Похоже, что команда "git log" сценария smudge выполняется перед фактической проверкой и, следовательно, предоставляет информацию о коммите, с которого я переключаюсь. У кого-нибудь есть объяснение этому?
Я использую GIT 2.15 на Windows 7
Доктор чувак