我如何使
git状态
是否忽略行尾差异?
背景信息:
我随机使用Windows和Linux来做这个项目。这个项目在Dropbox中。
我发现了很多关于如何让git diff忽略行尾的信息。因为我使用了meld,git diff会为每个文件打开meld。meld会说“相同的文件”。
那么我该如何避免这种情况呢?Git应该只为修改过的文件打开meld。如果只是文件结尾不同,Git状态应该不会报告文件已经修改。
编辑:原因:
发生这种情况的原因是Windows上的此设置
核心.autocrlf真
因此,我检查了Linux上的工作副本,并在Windows上设置core.autocrlf false。
如果知道如何让git status忽略不同的新行,那就更好了。
8条答案
按热度按时间oyt4ldly1#
尝试如下设置core.autocrlf值:
rseugnpd2#
这个答案似乎是相关的,因为OP提到了对多操作系统解决方案的需求。这篇Github帮助文章详细介绍了处理跨操作系统行结尾的可用方法。有全局和每个repo的方法来管理跨操作系统行结尾。
全球方法
在Linux或OS X上配置Git行尾处理:
在Windows上配置Git行尾处理:
按回购方式:
在存储库的根目录中,创建一个
.gitattributes
文件并定义项目文件的行尾设置,每次定义一行,格式如下:path_regex line-ending-settings
,其中line-ending-settings
为下列其中一项:text
值可以进一步配置为指示Git如何处理匹配文件的行尾:text
-将行尾更改为操作系统本机行尾。text eol=crlf
- checkout 时将行尾转换为CRLF
。text eol=lf
- checkout 时将行尾转换为LF
。text=auto
-合理的默认值,让行处理由Git决定。下面是一个示例.gitattributes文件的内容:
更多关于如何在更改行尾设置后刷新您的存储库的信息。Tldr:
用Git备份文件,删除仓库中的所有文件(除了.git目录),然后一次性还原所有文件。将当前文件保存在Git中,这样就不会丢失任何工作。
git add . -u
git commit -m "Saving files before refreshing line endings"
个删除索引并强制Git重新扫描工作目录。
rm .git/index
重写Git索引以获取所有新的行尾。
git reset
显示重写的、规范化的文件。
在某些情况下,这就是所有需要完成的步骤。其他情况下,可能需要完成以下附加步骤:
git status
重新添加所有更改过的文件,并准备提交它们。这是检查哪些文件(如果有)未更改的机会。
x1米15英寸
在这里可以看到很多消息,上面写着“警告:文件中的CRLF将替换为LF。”
重写.gitattributes文件。
git add .gitattributes
个将更改提交到存储库。
git commit -m "Normalize all the line endings"
个e5njpo683#
使用.gitattributes代替,并进行以下设置:
.gitattributes会和你的全局. gitconfig在同一个目录中。如果.gitattributes不存在,就把它添加到那个目录中。添加/更改.gitattributes后,你必须对仓库进行硬重置,才能成功地把更改应用到现有的文件。
k7fdbhmy4#
问题与Windows操作系统上的git命令相关:
警告:LF将被CRLF替换...
文件的原始行尾将位于您的工作目录中。
分辨率:
未出现任何警告消息。
xggvc2p65#
我同时使用windows和linux,但是
core.autocrlf true
解决方案对我没有帮助,甚至在git checkout <filename>
之后我什么都没有得到改变。因此,我使用变通方法替换
git status
-gitstatus.sh
我只是比较一个文件的
md5sum
和它在存储库中的兄弟。输出示例:
mbyulnm06#
我创建了一个脚本来忽略行尾的差异:
它将显示那些没有被添加到提交列表中并且被修改过的文件(在忽略行尾的差异之后)。你可以添加参数“add”来将这些文件添加到你的提交中。
源代码:https://github.com/lepe/scripts/blob/master/gitdiff.pl
更新:
csga3l587#
我已经修改了+shukshin.ivan脚本一点-忽略windows / linux行尾。
w6lpcovy8#
在vscode中,只要暂存所有项目即可-只有行尾不同的档案应该会消失,只留下内容不同的档案。然后您可以取消暂存,以取得预期的状态。