我设法将索引置于未按预期跟踪某些文件的状态。
作为一个例子,我在工作目录中没有修改size.h和test.h:
$ git-ls-files -st size.h test.h
H 100644 de2c741b07d86f92bdd660626848072cb2bf510f 0 size.h
H 100644 8bb24bc7483ffcfc0fc1a3761dc63e86a1b3e003 0 test.h
$ git status
# On branch master
nothing to commit (working directory clean)
然后我对这两个文件进行随机更改:
$ fortune >> size.h
$ fortune >> test.h
由于某种原因,size.h未被修改(尽管文件清楚)。同时test.h按预期修改:
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: test.h
#
no changes added to commit (use "git add" and/or "git commit -a")
删除索引并重置后,所有内容都恢复正常:
$ rm .git/index
$ git reset
Unstaged changes after reset:
M size.h
M test.h
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: size.h
# modified: test.h
#
no changes added to commit (use "git add" and/or "git commit -a")
在奇怪出现之前,我一直在CentOS上使用git 1.6.6,在Windows上使用msysgit 1.6.5.1在samba上使用samba。我无法从一个新的克隆中重现这一点。
我的直觉是,这是msysgit中的一个错误,可能与samba结合使用。有什么想法吗?
答案 0 :(得分:2)
我见过的唯一一个也显示错误的Git over samba状态的错误是GitX ticket 147。 这是一个相反的情况(git status显示修改了一个尚未修改的文件),但建议文件的某些元素(size?date?rights?)没有通过samba共享正确传输。
在通过samba共享克隆回购时,已知会发生{p> Locking issue。这让我想知道这是计算机上的时钟问题。将服务器上的时间设置为
-1h
无济于事 BTW,gitx和git-gui在同一台机器上通过sshfs完美地工作(但是,即使方便,sshfs也没有本地网络上的samba那么快)。
答案 1 :(得分:2)
我在1.7.9.msysgit.0版本中遇到了这个问题
问题在于我已将项目移动到新目录,并且至少有一个子模块具有工作树的绝对路径。
删除子模块目录后,删除了.git / modules中的条目,并重新初始化并更新了它们,问题就消失了。
这很奇怪,因为git在检查项目状态时绝对没有错误或警告消息(我可以看到),只有当我执行git子模块更新时 - 它会向我显示错误,它不能走到它想要的道路。