git-архив показывает одну и ту же дату фиксации в файлах с другой датой фиксации
В git у меня есть два файла с разной датой фиксации. Но когда я делаю git-archive
Я получаю ту же дату коммита, почему?
[[ -e git_test ]] && rm -rf git_test
mkdir git_test
cd git_test
git init
# make file01
echo 'f01 $Format:%cd$' > file01.txt
echo 'file01.txt export-subst' >> .gitattributes
git add .gitattributes file01.txt
git commit -m "adding file01"
sleep 1
# make file02
echo 'f02 $Format:%cd$' > file02.txt
echo 'file02.txt export-subst' >> .gitattributes
git add .gitattributes file02.txt
git commit -m "adding file02"
# git archive
git archive HEAD | tar -x -C ..
echo
echo "git log date"
git log --format="%cd" file01.txt
git log --format="%cd" file02.txt
echo
echo "git archive date"
cd ..
cat *.txt
на выходе, с git-log
дата принятия отличается (одна секунда), но файлы, созданные с git-archive
иметь ту же дату фиксации
git log date
Fri Dec 27 15:17:22 2013 -0300
Fri Dec 27 15:17:23 2013 -0300
git archive date
f01 Fri Dec 27 15:17:23 2013 -0300
f02 Fri Dec 27 15:17:23 2013 -0300
2 ответа
Я решил использовать archive
только поверх последних измененных файлов
git archive HEAD $(git diff --name-only HEAD^) | tar -x -C
этот способ изменяет только дату фиксации (и файл) для последних измененных файлов.
Дата фиксации, используемая при подстановке ключевых слов во время git archive
это коммит, который вы экспортируете, т.е. второй коммит в 15:17:23. Git не найдет самый последний коммит, который касается определенного файла, и не получит дату его фиксации. Вот что происходит, когда вы бежите, например, git log --format="%cd" file01.txt
(ну, в нем будут перечислены даты коммитов всех коммитов, затрагивающих этот файл, но в этом случае есть только один коммит).