2

我设法使我的索引处于某些文件未按预期跟踪的状态。

例如,我在工作目录中有 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 上工作。我无法从新的克隆中复制它。

我的直觉是,这是 msysgit 中的一个错误,可能与 samba 结合使用。有任何想法吗?

4

2 回答 2

2

我在使用 1.7.9.msysgit.0 版本时遇到了这个问题

问题是我已将项目移动到一个新目录,并且至少我的一个子模块具有工作树的绝对路径。

一旦我删除了子模块目录,删除了它们在 .git/modules 中的条目,并重新初始化和更新了它们,问题就消失了。

这很奇怪,因为 git 在检查项目状态时绝对没有给出错误或警告消息(我可以看到),只有当我执行 git submodule update --init 时它才会向我显示它无法到达的错误它想要的路径。

于 2012-09-20T19:50:02.383 回答
2

我看到的唯一一个也显示 Git over samba 的错误状态的错误是GitX 票证 147
这是一种相反的情况(git status 显示对尚未修改的文件的修改),但表明文件的某些元素(大小?日期?权限?)没有通过 samba 共享正确传输。

这让我想知道这是否是计算机上的时钟问题。将服务器上的时间设置为-1h无济于事。
顺便说一句,gitx 和 git-gui 在相同的两台机器上通过 sshfs 完美地工作(但是,尽管方便,sshfs 在本地网络上不如 samba 快)。

已知在通过 samba 共享克隆 repo 时会发生锁定问题。

于 2010-01-14T05:14:43.130 回答