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 6

1 ответ:

Найдено в коде парсера git date:

/*
 * 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)) {
Поскольку этот код явно отвергает малые числа как возможные unix-даты, а строка не разбирается как любой другой формат даты, GIT_AUTHOR_DATE рассматривается как недопустимый и полностью игнорируется (и, по-видимому, молча).

Ваш метод должен работать нормально, хотя до тех пор, пока вы придерживаетесь синтеза коммитов, которые имели место после 1973 года. В противном случае используйте один из других форматов даты:)