git меняет время модификации файлов - PullRequest
4 голосов
/ 11 февраля 2010

В GitFaq я могу прочитать, что

Git устанавливает текущее время как метку времени для каждого изменяемого файла, но только для них.

Однако я попробовал эту последовательность команд ( РЕДАКТИРОВАТЬ: добавлена ​​полная последовательность команд)

$ git init test && cd test
Initialized empty Git repository in d:/test/.git/

$ touch filea fileb

$ git add .

$ git commit -m "first commit"
[master (root-commit) fcaf171] first commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 filea
 create mode 100644 fileb

$ ls -l > filea

$ touch fileb -t 200912301000

$ ls -l
total 1
-rw-r--r--    1 exxxxxxx Administ      132 Feb 12 18:36 filea
-rw-r--r--    1 exxxxxxx Administ        0 Dec 30 10:00 fileb

$ git status -a
warning: LF will be replaced by CRLF in filea
# On branch master
warning: LF will be replaced by CRLF in filea
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   filea
#

$ git checkout .

$ ls -l
total 0
-rw-r--r--    1 exxxxxxx Administ        0 Feb 12 18:36 filea
-rw-r--r--    1 exxxxxxx Administ        0 Feb 12 18:36 fileb

Теперь мой вопрос: почему git изменил метку времени файла fileb? Я ожидаю, что отметка времени не изменится.

Мои команды вызывают проблемы?
Может быть, вместо этого можно сделать что-то вроде git checkout . --modified

Я использую git version 1.6.5.1.1367.gcd48 под Mingw32 / Windows XP.

Ответы [ 3 ]

2 голосов
/ 11 февраля 2010

Это не происходит в файловой системе Linux. Я проверил точный сценарий, который вы описали, и мои изменения времени сохраняются для файлов, которые я оставил нетронутыми:

sean@SEAN-PC:~/Desktop/test$ ls -la tests/BusTests.*
-r--r--r-- 1 sean sean 8 2010-02-11 11:53 tests/BusTests.c
-r--r--r-- 1 sean sean 1 2010-02-11 11:51 tests/BusTests.h

sean@SEAN-PC:~/Desktop/test$ git status -a
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   tests/BusTests.c
#

sean@SEAN-PC:~/Desktop/test$ git checkout .

sean@SEAN-PC:~/Desktop/test$ ls -la tests/BusTests.*
-r--r--r-- 1 sean sean 1 2010-02-11 11:55 tests/BusTests.c
-r--r--r-- 1 sean sean 1 2010-02-11 11:51 tests/BusTests.h

Я подозреваю, что это неизвестная ошибка в сборке git mingw32, вы можете сообщить об этом разработчикам: http://code.google.com/p/msysgit/issues/list

Было бы интересно посмотреть, изменяется ли штамп модификации BusTests.h, когда вы извлекаете только измененный файл:

git checkout -- tests/BusTests.c
0 голосов
/ 12 мая 2010

Я заметил похожую проблему с git reset --hard, начиная с версии msysgit 1.7.0.2. Раньше он изменял только метки времени измененных файлов. Теперь он меняет метки времени всех файлов. По этой причине я вернулся к использованию 1.6.5.1, потому что у него нет этой проблемы:)

0 голосов
/ 11 февраля 2010
git ls-files -m | xargs git co --

помогает оформить заказ только на измененные файлы. Но я все еще не могу объяснить, почему git checkout вызывает проблемы.

...