почему git рассматривает некоторые файлы cpp как двоичные? - PullRequest
5 голосов
/ 19 января 2011

здесь вывод 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.

Ответы [ 2 ]

10 голосов
/ 19 января 2011

Попробуйте добавить следующую строку в $repo/.git/info/attributes:

*.cpp crlf diff

. Вы можете указать ее в gitattributes system или в масштабе пользователя .

5 голосов
/ 29 марта 2018

Некоторые файлы обрабатываются как двоичные, потому что они имеют неправильную кодировку файлов.Это должно работать нормально, если вы конвертируете эти файлы в UTF-8 (или в ту же кодировку, что и в обычных файлах).Для изменения кодировки файла используйте notepad ++ или любым другим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...