git更改文件的修改时间

时间:2010-02-11 11:17:01

标签: git msysgit

在我可以阅读的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之类的事情吗?

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

3 个答案:

答案 0 :(得分:2)

在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

答案 1 :(得分:0)

git ls-files -m | xargs git co --

有助于只签出修改过的文件。但我仍然无法解释为什么git checkout会导致问题。

答案 2 :(得分:0)

我注意到git reset发生了类似问题 - 从msysgit版本1.7.0.2开始。 之前,它只会更改已修改文件的时间戳。 现在,它会更改所有文件的时间戳。 因为这个原因,我回到使用1.6.5.1,因为它没有这个问题:)