git игнорирует $ git AUTHOR DATE - это ошибка?
Править: резюме : Git не допускает даты до 1973/03/03 09: 46: 40 (эпоха+100000000s), заданные в его "внутреннем формате даты" (секунды с момента начала эпохи). Это позволит использовать "20110224 "как сокращенную форму"2011-02-24". -- это не ошибка: не совсем, но и не документировано. -- обходной путь : Не полагайтесь на внутреннюю дату git, когда вы не можете. -- Спасибо : hobbs
Привет всем,
У меня есть некоторые проблемы с git filter-ветвь, которую я отследил до git commit-tree. Рассмотрим такой сценарий:
#!/bin/bash
# please run these commands in an empty directory
# (should not destroy an existing repo, though. I think it would only
# a few dangling objects)
set -e -o pipefail
git init
tree=$(git write-tree)
commit=$(echo "my first commit -- the tree is empty" |
env GIT_AUTHOR_DATE="0 +0000" git commit-tree $tree)
echo "This is commit $commit:"
git cat-file commit $commit
Обратите внимание, что env GIT_AUTHOR_DATE="0 +0000"
устанавливает дату, используя "внутренний формат Git"-смотрите manpage git-commit-tree для получения подробной информации-в 1970-01-01.
Но вывод этого скрипта (необработанный коммит) равен
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author Jane Doe <jane> 1298477214 +0100
committer Jane Doe <jane> 1298477214 +0100
my first commit -- the tree is empty
Теперь Почему git игнорирует $GIT_AUTHOR_DATE? Если это имеет значение, мой git --version
дает git version 1.7.1
.
1 ответ:
Найдено в коде парсера git date:
Поскольку этот код явно отвергает малые числа как возможные unix-даты, а строка не разбирается как любой другой формат даты,/* * Seconds since 1970? We trigger on that for any numbers with * more than 8 digits. This is because we don't want to rule out * numbers like 20070606 as a YYYYMMDD date. */ if (num >= 100000000 && nodate(tm)) {
GIT_AUTHOR_DATE
рассматривается как недопустимый и полностью игнорируется (и, по-видимому, молча).Ваш метод должен работать нормально, хотя до тех пор, пока вы придерживаетесь синтеза коммитов, которые имели место после 1973 года. В противном случае используйте один из других форматов даты:)