我有一个奇怪的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
答案 0 :(得分:1)
这可能发生多种原因。
core.autocrlf
设置.gitattributes
个文件,其中包含smudge
或text
过滤器 autocrlf
试图解决跨平台开发的线路终结困难,但往往会导致比解决更多的问题。
在将文件添加到存储库时,它会将窗口样式的行结尾(\r\n
)转换为unix样式的行结尾(\n
)。在Windows机器上工作时,它会在检出文件时将它们转换回窗口样式的行尾。
虽然一般的想法并不坏,但它可能会导致严重的问题,特别是当它在二进制文件上运行时。因此,大多数情况下,自己处理行结束是明智的选择。
您可以查看this question了解有关autocrlf
。
使用.gitattributes
文件时,smudge
过滤器可能会在结帐时修改您的文件。另外,text
属性可用于启用autocrlf
,即使您.gitconfig
禁用它也是如此。
在您的情况下,可能的解决方案是全局停用autocrlf
(git config --global core.autocrlf false
)并从* text=auto
文件中删除.gitattributes
行。
您应该继续提交.gitattributes
文件并将其推送到遥控器。
与所有其他提交一样,您必须确保自己可以在您希望的所有分支上使用这些更改。他们不会在整个存储库中神奇地使用它们。
之后,克隆应该有希望产生一个干净的工作目录。
最后的注释
通常git应该忽略autocrlf
个ed文件,以避免像您当前遇到的那样混乱的状态输出,但这似乎并不总是有效。避免autocrlf
的另一个原因。