【问题标题】:Should Git ever think a file that it got from a pull is now untracked?Git 是否应该认为从 pull 中获取的文件现在未被跟踪?
【发布时间】:2011-12-01 00:05:31
【问题描述】:

我们的一位开发人员一直在使用他的 Git 存储库时遇到问题。他拉动,然后“git status”显示了一个完整的未跟踪文件列表(即,Git 认为它们是新的)实际上来自他最后一次拉动。实际上,您可以通过他的 git 日志返回并指定添加它们的特定提交,并且它在他的历史记录中。但是,如果您转到现在未跟踪的文件之一并对其进行 git 登录,则根本没有历史记录。

我完全被迷惑了。小组中的每个人,包括我,都是 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

【问题讨论】:

  • 您能提供更多信息吗?项目文件夹下用户的 .git/config 文件中有什么?你知道正在执行哪些 Git 命令(git pullgit pull origin master 最常见)。组中的其他用户是否重现了具有不同结果的确切步骤?项目文件夹下是否有一个.git目录,没有其他子文件夹?
  • 这是某个案例问题,在某种程度上情况有所不同,有点像stackoverflow.com/questions/52950/… ? (git config core.ignorecase的值是多少?默认应该是true,如果是false的话……就可以解释了。
  • 还有,你是用git log -- untracked_file查看日志的吗?
  • 假设 git log untracked_file 和 git log -- untracked file 是一回事,那么是的。这就是我们注意到奇怪差异的方式。整个项目的 git 日志列出了包含文件的提交(首先将它们添加到本地文件中的文件),但它现在认为未跟踪的单个文件的 git 日志根本没有历史记录。所以就好像它患有阿尔茨海默症一样,他们来自哪里。
  • @John:它们并不完全相同,但是如果你当前有一个未跟踪的文件“foo”,并且曾经有一个文件“foo”被 git 跟踪,那么两者应该做同样的事情,我相信。至于回答你的问题,我认为你将不得不提供更多细节,比如确切的事件序列和/或一些实际的日志和状态输出。

标签: git msysgit egit tortoisegit


【解决方案1】:

查看 git-dir 环境变量是否已更改。同样的工作树变量。还要看看你是否真的和你想的一样在同一个目录中。您正在使用 tortoisegit,这可能是您正在查看的与命令行不同的目录。

另外,当您 CD 到文件以查看它是否存在时,请确保您使用制表符完成目录名称,因为无论大小写如何,msysgit 都乐于处理文件/目录。无论如何,Git 都在乎。

mydir/somefile

可以到达

cd MYDIR

路径会反映这一点。

现在 git status 将显示有一个文件未被跟踪,因为 git 会将 mydir/somefile 视为与 MYDIR/somefile 不同的东西。有时很难看到,因为只需要文件的整个路径中的一个大小写差异即可获得此行为。

现在坚持使用命令行来解决这个问题。在 tortoisegit 和命令行之间弹跳无济于事。

能不能新建一个仓库,看看能不能单独在命令行上复现?

希望这会有所帮助,

亚当

【讨论】:

  • 我完全同意你关于将此设置为默认值的观点。我的同事们正在受苦……
  • 我绝对可以看到这会如何导致它认为通过拉取检索的文件即使没有被触摸也已经“改变”了,但这真的会让 Git 误以为这些文件是新的和未跟踪的?它应该仍然知道该文件在此之前和从哪里来。
  • 我无法理解这如何回答 OP 针对他的情况提出的问题。 untracked 在哪里出现?这个答案在哪里根本不显示日志中的文件?
  • 更改了答案并添加了一些我遇到的想法和问题。告诉我们进展如何。
【解决方案2】:

我们从未“解决”过这个问题。但是,我们确实停止使用远程目录来存储共享存储库。它从来没有很好地工作,它使用的是 Novell 或一些速度非常慢的 Windows 网络解决方案,而且我们经常看到这样或那样的问题。

现在,我无法证明异常设置是我们所有问题的原因,但是,我将 GitBlit 设置为我们可以与之通信的 Git 服务器。在我这样做之后,我们对服务器执行的每个操作实际上都快了一个数量级,并且我们再也没有看到损坏问题。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2015-02-03
    • 2017-08-04
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2018-09-29
    • 2020-08-06
    • 2020-11-23
    相关资源
    最近更新 更多