здесь вывод 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 также не хочет автоматически объединять их. Следовательно, почти все действия по слиянию / ребазированию / извлечению становятся болью.
Вот конфигурация репо:
[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
также core.autocrlf = false в основном .gitconfig.
редактировать
Я установил для core.autocrlf значение true, как предлагается в комментариях, но, похоже, это не повлияет на следующее слияние, за которым я следую (может быть, уже слишком поздно менять 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 настаивает на изменении конца строки в паре файлов (что я и делаю , а не хочу).
решение
Я закончил с этим в файле атрибутов, благодаря:
*.cpp -text crlf diff
часть -text
была необходима для того, чтобы git не конвертировал строки, даже если для core.autocrlf задано значение false.