我有一个奇怪的 git 问题。
在检查了一个分支(远程跟踪的)后,我立即获得该分支中已修改和未暂存的更改。
我再次克隆了存储库以验证问题是否仍然存在。
我使用 Windows 和 gitblit 作为 Git 服务器。
您知道为什么会发生这种情况吗?
git status 的输出如下:
$ 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
发生这种情况的原因有多种。
- 你有
core.autocrlf
设置已启用
- 你有一个
.gitattributes
文件有一个smudge
or text
filter
一些背景
autocrlf
试图解决跨平台开发的线路结束困难,但往往会导致比它解决的问题更多的问题。
它转换 Windows 风格的行结束符 (\r\n
) 到 Unix 风格的 (\n
)将文件添加到存储库时。在 Windows 机器上工作时,它会在签出文件时将它们转换回 Windows 样式的行结尾。
虽然总体想法不错,但它可能会导致严重的问题,尤其是当它在二进制文件上疯狂运行时。所以大多数时候,自己处理行结尾是明智的选择。
你可以看一下这个问题 https://stackoverflow.com/questions/2825428/why-should-i-use-core-autocrlf-true-in-git欲了解更多信息autocrlf
.
当使用.gitattributes
文件可能是smudge
过滤器将在结帐时修改您的文件。或者,text
属性可用于启用autocrlf
即使你的.gitconfig
禁用它。
可能的解决方案
您的情况的一个可能的解决方案是禁用autocrlf
全球(git config --global core.autocrlf false
)并删除* text=auto
线从你的.gitattributes
file.
您应该继续提交.gitattributes
文件并将其推送到远程。
与其他所有提交一样,您必须确保自己的更改在您希望的所有分支上可用。它们不会在整个存储库中神奇地可用。
之后,克隆应该会产生一个干净的工作目录。
最后说明
通常 git 应该忽略autocrlf
ed 文件以避免像您当前遇到的那样混乱的状态输出,但这似乎并不总是有效。避免的另一个原因autocrlf
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)