Kar*_*ter 5 git lf line-endings gitattributes
我很确定我明白文件末尾没有换行符是什么意思。我想提供一个我很久以前创建并重新定位的分支的拉取请求(提交可能来自之前.gitattributes添加的时间)。我看到一些.java源代码文件只有更改
-}
\ No newline at end of file
+}
Run Code Online (Sandbox Code Playgroud)
无论配置如何,我都希望将这些更改从 PR 提交中排除。我想避免选择更改git difftool并扩大我对git.
问题是,我已经不明白这种变化是如何存在的,因为有一个.gitattributes用
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
*.java text
*.css text
*.js text
*.xml text
*.dtd text
*.xsl text
*.properties text
*.txt text
*.svg text
*.yml text
*.md text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.gif binary
*.jpg binary
*.jpeg binary
*.eot binary
*.ttf binary
*.woff binary
*.woff2 binary
Run Code Online (Sandbox Code Playgroud)
在存储库中,我运行git rm --cached -r . && git add .它应该将所有行结尾转换为 LF 因为*.java text(也尝试过*.java text),但没有显示任何更改(针对HEAD)并且git diff仍然显示行结尾差异。
也find ./ -type f -name '*.java' -exec dos2unix {} \;不会导致任何更改被识别git status并git diff master仍然显示行结束更改(而工作目录没有暂存或未暂存的更改)。
我对隐藏更改不感兴趣,就像git diff --ignore-all-space会做的那样。
我git在 Ubuntu 18.04 上使用2.17.1。
\n\n问题是我已经不明白这种变化是如何存在的......
\n
该更改表明文件a/的版本whatever.java缺少换行符,而b/文件的版本有换行符。“缺少换行符”意味着文件以没有行终止符\xe2\x80\x94 结尾,这不是 CRLF 与 LF 的问题,而是“有终止符”与“没有终止符”的问题。
某些编辑器能够处理最后一行缺少终止符的文件。其他编辑没有,甚至没有注意到缺少一个(大多只是假装有一个)。如果合适的话,一些编辑器会默认添加终止符,也许会带有警告。这里有很多变化。
\n您没有显示git diff生成差异的特定命令(带有哪些选项),因此很难说a/和b/版本来自哪里,但我将假设HEAD提交和index下面的“非此即彼”工作树。(也就是说,我们正在查看修剪git diff --cached或git diff HEAD输出。无论哪种方式,我们都会看到相同的事情,因为必须通过任何过滤器和任何行尾过滤git diff来运行工作树文件。)clean
\n\n...因为有一个
\n.gitattributes[包括]Run Code Online (Sandbox Code Playgroud)\n*.java text\n...我跑了
\ngit rm --cached -r . && git add .它应该将所有行结尾转换为 LF ...
这会将工作树中任何现有的 CRLF 行结尾转换为索引中仅 LF 行结尾。我不相信它会在根本没有结尾的行中添加 LF 结尾(基于 in 中的代码crlf_to_git)convert.c。
因此,这表明文件的工作树副本具有最终的 CRLF 作为文件的最后两个字节,或者最终的仅 LF 换行字节作为文件的最后一个字节。Git 会将git add其作为最后的换行符。同时,如果提交本身有一个单独的闭花括号(根本没有行结尾,既没有 CRLF 也没有 newlne)作为其最终字节,则意味着HEAD文件的已提交 ( ) 副本与同一文件的索引版本不同通过让提交的副本根本没有任何行终止符来更改文件,您将看到您所看到的内容。
| 归档时间: |
|
| 查看次数: |
8982 次 |
| 最近记录: |