从新克隆的存储库到分支的Git签出导致该分支中的未分级更改

时间:2014-09-09 10:59:41

标签: git gitblit

我有一个奇怪的git问题。 签出其中一个分支(远程跟踪)后,我立即在该分支中进行修改和未分阶段的更改。 我再次克隆了存储库以验证问题是否仍然存在。

我使用Windows和gitblit作为Git服务器。

你有什么想法可能会发生这种情况吗?

git状态的输出如下:

$ git status
# On branch RSD-5393
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   apis.releng/cquery/apis.RSD-4780.cquery
#       modified:   apis.releng/cquery/apis.RSD-4782.cquery
#       modified:   apis.releng/cquery/apis.RSD-4786.cquery
#       modified:   apis.releng/cquery/apis.RSD-4799.cquery
#       modified:   apis.releng/cquery/apis.RSD-4812.cquery
#       modified:   apis.releng/cquery/apis.RSD-4815.cquery
#       modified:   apis.releng/cquery/apis.RSD-4821.cquery
#       modified:   apis.releng/cquery/apis.RSD-4823.cquery
#       modified:   apis.releng/cquery/apis.RSD-4826.cquery
#       modified:   apis.releng/cquery/apis.RSD-4827.cquery
#       modified:   apis.releng/cquery/apis.RSD-4828.cquery
#       modified:   apis.releng/cquery/apis.RSD-4829.cquery
#       modified:   apis.releng/cquery/apis.RSD-4831.cquery
#       modified:   apis.releng/cquery/apis.RSD-4846.cquery
#       modified:   apis.releng/cquery/apis.RSD-4861.cquery
#       modified:   apis.releng/cquery/apis.RSD-4862.cquery
#       modified:   apis.releng/cquery/apis.RSD-4863.cquery
#       modified:   apis.releng/cquery/apis.RSD-4864.cquery
#       modified:   apis.releng/cquery/apis.RSD-4865.cquery
#       modified:   apis.releng/cquery/apis.RSD-4866.cquery
#       ....
no changes added to commit (use "git add" and/or "git commit -a")

的.gitconfig:

[core]
autocrlf = true
存储库中的

.gitattributes:

# Set the default behaviour, in case people don't have core.autocrlf set.
* text=auto

1 个答案:

答案 0 :(得分:1)

这可能发生多种原因。

  1. 您已启用core.autocrlf设置
  2. 您有.gitattributes个文件,其中包含smudgetext过滤器
  3. 一些背景

    autocrlf试图解决跨平台开发的线路终结困难,但往往会导致比解决更多的问题。
    在将文件添加到存储库时,它会将窗口样式的行结尾(\r\n)转换为unix样式的行结尾(\n)。在Windows机器上工作时,它会在检出文件时将它们转换回窗口样式的行尾。

    虽然一般的想法并不坏,但它可能会导致严重的问题,特别是当它在二进制文件上运行时。因此,大多数情况下,自己处理行结束是明智的选择。

    您可以查看this question了解有关autocrlf

    的更多信息

    使用.gitattributes文件时,smudge过滤器可能会在结帐时修改您的文件。另外,text属性可用于启用autocrlf,即使您.gitconfig禁用它也是如此。


    可能的解决方案

    在您的情况下,可能的解决方案是全局停用autocrlfgit config --global core.autocrlf false)并从* text=auto文件中删除.gitattributes行。
    您应该继续提交.gitattributes文件并将其推送到遥控器。

    与所有其他提交一样,您必须确保自己可以在您希望的所有分支上使用这些更改。他们不会在整个存储库中神奇地使用它们。

    之后,克隆应该有希望产生一个干净的工作目录。


    最后的注释

    通常git应该忽略autocrlf个ed文件,以避免像您当前遇到的那样混乱的状态输出,但这似乎并不总是有效。避免autocrlf的另一个原因。