我有个奇怪的问题。
在检查完其中一个分支(被远程跟踪)之后,我立即得到该分支中的修改和未声明的更改。
我再次克隆了存储库以验证问题是否仍然存在。
我使用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
.gittattributes在存储库中:
# Set the default behaviour, in case people don't have core.autocrlf set.
* text=auto
最佳答案
这可能有多种原因。
您已启用core.autocrlf
设置
你有一个.gitattributes
文件,它有一个smudge
或text
过滤器
一些背景autocrlf
试图解决跨平台开发的线端困难,但往往导致的问题比它解决的要多。
将文件添加到存储库时,它将Windows样式的行尾(\r\n
)转换为Unix样式的行尾(\n
)。在windows机器上工作时,它会在签出文件时将它们转换回windows样式的行结尾。
虽然一般的想法并不坏,但它可能会导致严重的问题,特别是当它在二进制文件上运行异常时。因此,大多数情况下,自己处理行尾是一个明智的选择。
您可以查看this question以了解有关autocrlf
的更多信息。
使用.gitattributes
文件时,smudge
筛选器可能会在签出时修改您的文件。另外,即使您的text
禁用了autocrlf
属性,也可以使用.gitconfig
属性来启用autocrlf
。
可能的解决方案
在您的情况下,可能的解决方案是全局禁用git config --global core.autocrlf false
(* text=auto
),并从.gitattributes
文件中删除.gitattributes
行。
您应该继续提交autocrlf
文件并将其推送到远程。
与其他每一次提交一样,您必须确保您希望更改在所有分支上都可用。它们不会在整个存储库中神奇地可用。
在那之后,一个克隆可能会导致一个干净的工作目录。
最后说明
通常git应该忽略autocrlf
ed文件,以避免像您目前所经历的那样混乱的状态输出,但这似乎并不总是有效的。避免的另一个原因。