Почему git показывает конфликт между двумя явно идентичными добавленными файлами?

У меня есть проект, который был запущен в TFS, затем переместился на Git. К сожалению, парень, который перевел его на Git, только что проверял в текущих файлах вместо использования git -tfs. Я пытаюсь переустановить его новые коммиты в Git поверх коммитов, которые я вытащил из TFS, используя git -tfs.

Для этого я просто перезаряжаю свои коммиты поверх git -tfs. (Я понимаю, что это испортит удаленные ветки Git, но мы небольшая команда, и все будет хорошо. Я также попробовал выбор вишни, но я столкнулся с той же проблемой.)

Проблема, с которой я сталкиваюсь, - это набор конфликтов, которые выглядят следующим образом:

<<<<<<< HEAD
namespace OurNiftyProject
{
    public enum CardType
    { 
        Visa = 0,
        MasterCard = 1
    }
}
||||||| merged common ancestors
=======
namespace OurNiftyProject
{
    public enum CardType
    { 
        Visa = 0,
        MasterCard = 1
    }
}
>>>>>>> Add a bunch of stuff.

Похоже, что это конфликт между фиксацией с стороны TFS, которая добавила эти файлы, и фиксацией на стороне Git, которая их добавила (поскольку репозиторий Git запущен пустым).

Логичным было бы пропустить это коммит, возможно, но в нем есть несколько файлов (скажем, десять из пары сотен), которые являются новыми. Конечно, это не вызывает конфликтов.

Почему не может Git самостоятельно определить, что эти два файла идентичны? Даже если я использую --ignore-whitespace, когда я переустанавливаю, Git все еще показывает десятки файлов, подобных этому, которые кажутся одинаковыми. Я не понимаю, как это решить.

Ответ 1

Это должно быть о различиях, заканчивающихся окончанием строки, в качестве комментариев ebneter.
Я уже подробно рассказал о том, как слияние git не помогло игнорировать эти различия (в отличие от различий в пробелах):
"Возможно ли, что git -merge проигнорирует разницу в конце строки?

Вот почему для этих хранилищ в гетерогенной среде необходима последовательная политика конверсии eol.
См. "Распределение конфигурации git с кодом".

Ответ 2

Я делаю подобную вещь и только что узнал "-X ignore-space-at-eol". Он доступен для слияния и перезагрузки. Кажется, он делает правильные вещи, но делает это смерть медленной для меня.

Ответ 3

Я только что столкнулся с этой проблемой, после которой этот пост был просто для того, чтобы реализовать для меня сценарий окончания строки.

Итак, FWIW, это произошло в моем случае, потому что я использовал "Использовать окончания строки стиля Windows", но в какой-то момент для другого проекта я переконфигурировал его на "Использовать окончание строк в стиле Unix" (эти конфигурации доступны из программы установки Git).

Возврат к разделу "Использование строк в стиле Windows" разрешил проблему без использования "--ignore-whitespace"

Ответ 4

Если вы можете исключить невидимые изменения из-за разных строк, вы можете проверить, имеют ли файлы разные режимы (например, если установлен исполняемый бит). Git показывает полный файл в diff при изменении режима файла.