10

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

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

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

<<<<<<< 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 repo начался пустым).

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

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

+0

«Разница» также дает вам разницу? – Reactormonk

+4

Разве это могут быть разногласия? – ebneter

+0

Проходящие пробелы, возможно, –

ответ

9

Это должно быть о различиях в окончании строки, так как комментарии ebneter.
я уже подробно давно, как мерзавец слияние не было хорошо, игнорируя эти различия (в отличие от пробельных различий):
«Is it possible for git-merge to ignore line-ending differences?»

Поэтому последовательная политика преобразования EOL необходимо для этих хранилищ в гетерогенной среде.
См. "Distributing git configuration with the code".

+0

Действительно ли Git рассматривает отличия от строк, отличные от пробелов? Я думал, что концы строк * были * пробелами! –

+0

@ Kyralessa: не совсем. http://gitster.livejournal.com/28862.html упоминает 'cr-at-eol': с' trailing-space', не запускается, если символ перед таким возвратом каретки не является пробелом, но он * не активируется по умолчанию *. – VonC

5

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

+1

Возможно, они нашли ускорение, потому что для меня добавление флага меня не мешает. версия git 1.9.5.msysgit.0 – AnneTheAgile

1

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

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

Возвращаясь к «окончаниям стиля линии Использовать Windows» решить эту проблему без использования «--ignore-пропусков»

1

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

Смежные вопросы