gpt4 book ai didi

git - 为什么 git 将某些 cpp 文件视为二进制文件?

转载 作者:太空狗 更新时间:2023-10-29 13:16:48 24 4
gpt4 key购买 nike

这是 git log 的输出:

* 5a831fdb34f05edd62321d1193a96b8f96486d69      HEAD (HEAD, origin/work, work)
| LIB/xxx.cpp | Bin 592994 -> 593572 bytes
| LIB/xxx.h | 5 +++++
| LIB/bbb/xxx.h | 9 +++++++++
| LIB/aaa/xxx.cpp | Bin 321534 -> 321536 bytes
| LIB/aaa/yyy.cpp | 31 +++++++------------------------
| tests/aaa/xxx.cpp | 29 +++++++++++++++++++++++++++++
| tests/test_xxx.vcproj | 4 ++++
| 7 files changed, 54 insertions(+), 24 deletions(-)

为什么将某些文件视为二进制文件,而另一些则不是?这会带来严重的问题,因为 git 也不想自动 merge 它们。因此几乎所有 merge/ rebase /pull 操作都会变得很痛苦。

这是 repo 配置:

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://xxx/project.git
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "work"]
remote = origin
merge = refs/heads/work
[svn-remote "svn"]
url = xxxx
fetch = :refs/remotes/git-svn

在主 .gitconfig 中还有 core.autocrlf = false。

编辑我按照评论中的建议将 core.autocrlf 设置为 true,但这似乎并不影响我之后的下一次 merge (也许现在更改 autocrlf 为时已晚?还是与问题无关?):

> git merge work
warning: Cannot merge binary files: LIB/xxx.cpp (HEAD vs. work)

warning: Cannot merge binary files: LIB/aaa/xxx.cpp (HEAD vs. work)

Auto-merging LIB/xxx.cpp
CONFLICT (content): Merge conflict in LLIB/xxx.cpp
Auto-merging LIB/xxx.h
Auto-merging LIB/aaa/xxx.cpp
CONFLICT (content): Merge conflict in LIB/aaa/xxx.cpp
Automatic merge failed; fix conflicts and then commit the result.

此外,现在 gits 坚持更改几个文件中的行尾(这是我想要的)。

最佳答案

尝试将以下行添加到您的 $repo/.git/info/attributes:

*.cpp crlf diff

您可以在gitattributes 中指定它每个存储库每个用户每个系统


基本检查 list

• 您的文件中是否真的有 CRLF 或 LF 行结尾?
👉 是的,CRLF — 将 core.autocrlf 设置为 true(至少对于这个 repo)。


• 文件是否包含有趣的非 ASCII 字符:元音变音符号、变音符号、表情符号、日本汉字、版权标记 ©、不可见的深奥空格 等?..
👉如果是,最好确保所有的东西都是encoded in UTF-8 .使用代理对进行模糊测试并不好玩。


• 文件内容是否以UTF-8 BOM开头?
👉现在擦,没意义。


• 文件内容是否以UTF16 BOM开头?
👉太糟糕了;在这一点上我没有什么好的建议给你;对不起。请联系您的系统供应商。

关于git - 为什么 git 将某些 cpp 文件视为二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4735663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com