Git是否会认为从pull获取的文件现在是未跟踪的?

5
我们的一个开发人员在Git仓库方面一直遇到问题。他进行了pull操作,然后后来执行“git status”时会显示一整个未被跟踪的文件列表(也就是说,Git认为它们是新文件),但实际上这些文件是从他上次pull操作中获取的。你可以通过查看他的git日志并指定添加这些文件的特定提交,就能在历史记录中找到它们。但是,如果你去查看其中一个未被跟踪的文件并对其执行git log命令,就没有任何历史记录。
我非常困惑。我们组里的每个人,包括我,都是Git新手,所以我不能排除他可能犯了错误,但这似乎不太可能。就像他的存储库一直出现故障。
他正在使用msysgit 1.7.6和Tortoise Git 1.7.3。我们之前使用myEclipse的eGit,但它经常崩溃,所以最初的问题都归咎于它。现在,我认为没有人再使用它了,所以我不觉得我还能责怪eGit。
我需要Stack Overflow的Git大师们的帮助!这可能是什么原因?有什么情况下这样做是正常的吗?
根据请求,这是该已损坏的存储库的.git/config文件:
[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = G:\\DotcomB
    puttykeyfile = 
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    name = jsmith
    email = JoeSmith@somewhere.com

1
你能提供更多信息吗?用户在项目文件夹下的.git/config文件中有什么内容?你知道正在执行哪些Git命令(git pullgit pull origin master最常见)吗?其他组中的用户是否使用不同结果复制了相同的步骤?在项目文件夹下只有一个.git目录且没有其他子文件夹吗? - Go Dan
1
这是一个大小写问题吗?某种情况下大小写不同,有点像 https://dev59.com/9XVD5IYBdhLWcg3wNIvc 吗?(git config core.ignorecase 的值是多少?默认情况下应该为 true,但如果为 false...那可能就能解释了。 - VonC
1
另外,你使用过 git log -- untracked_file 来检查日志吗? - manojlds
假设 git log untracked_file 和 git log -- untracked file 是相同的,那么是的。这就是我们注意到奇怪差异的方式。整个项目的 git log 列出了包括这些文件在内的提交记录(最初本地添加它们的文件),但现在它认为是未跟踪的单个文件的 git log 却没有任何历史记录。所以就像它对它们来自哪里有阿尔茨海默病一样。 - John Munsch
@John:它们不完全相同,但如果您目前有一个未被跟踪的文件"foo",并且曾经有一个由git跟踪的文件"foo",那么我认为这两个应该做相同的事情。至于回答您的问题,我认为您需要提供更多细节,比如确切的事件序列和/或一些实际的日志和状态输出。 - Ryan Stewart
2个回答

2

请确认git-dir环境变量是否已更改,同样的还有工作树变量。还要看看您是否实际上在您认为的同一目录中。您正在使用tortoisegit,这可能与您查看的命令行不同。

此外,当您CD到文件夹以查看它是否存在时,请确保通过制表符自动完成目录名称,因为msysgit可以处理文件/目录,而无论大小写如何。然而,Git是在意大小写的。

mydir/somefile

可以通过

cd MYDIR

路径将反映出这一点。

现在,git状态将显示存在一个未跟踪的文件,因为git会将mydir/somefile视为与MYDIR/somefile不同。有时很难看到,因为整个路径中只需要一个大小写差异就可以得到这种行为。

目前为止,请坚持使用命令行来解决此问题。在tortoisegit和命令行之间反弹可能无法帮助解决问题。

你能否开始一个新的存储库,并查看是否可以仅在命令行上重现它?

希望这可以帮助您,

Adam


我完全同意您关于将此设置为默认值的观点。我的同事们正在遭受痛苦... - cJ Zougloub
我完全可以理解这样做会导致Git认为通过pull检索到的文件“发生了变化”,即使它们实际上并没有被修改,但是这是否真的会让Git误以为这些文件是新的且未跟踪的呢?它应该仍然知道这个文件之前已经存在,并且知道它来自哪里。 - John Munsch
我无法理解这如何回答OP在他的情况下的问题。untracked在哪里扮演了任何角色?不显示文件在日志中如何适应这个答案? - manojlds
1
修改了答案并添加了一些我遇到的更多想法和问题。让我们知道进展如何。 - Adam Dymitruk

0

我们从未“解决”过这个问题。但是,我们停止使用远程目录来存储共享仓库。它从未运行良好,它使用的是Novell或某种Windows网络解决方案,速度非常慢,我们经常看到各种问题。

现在,我无法证明不寻常的设置是所有问题的原因,但是,我设置了GitBlit作为我们可以访问的Git服务器。在我这样做之后,我们与服务器进行的每个操作都快了一个数量级,我们再也没有看到过损坏问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接