在我可以阅读的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
。
答案 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,因为它没有这个问题:)