git更改文件的修改时间


GitFaq我可以读,那

Git sets the current time as the timestamp on every file it modifies, but only those.

但是,我尝试了这个命令序列(编辑:添加完整的命令序列)

$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这样的事情. – 修改了吗?

我在mingw32 / windows xp下使用git版本1.6.5.1.1367.gcd48.

最佳答案 这不会发生在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
点赞