Git Merge и исправление смешанных пробелов и вкладок с двумя ветвями - PullRequest
33 голосов
/ 10 марта 2011

Я прошел через несколько похожих SOQ и не нашел адекватного решения для этого случая.

Я заметил, что во многих файлах есть грязное сочетание вкладок и пробелов, используемых для отступа. В настоящее время мы придерживаемся стандарта кодирования, который использует 4 пробела для табуляции.

Хотя это должно было быть решено, когда это произошло, я должен рассмотреть это сейчас и хотел бы исправить файлы, с которыми сталкиваюсь. Проблема в том, что есть две команды, использующие разные ветви кода, и нам в конечном итоге придется объединить эти ветви. Что произойдет, если мы изменим все файлы нашей ветки на правильное форматирование и попытаемся объединить его? Будет ли это трудно сделать? Это покажет мне массу конфликтов? В идеале - git merge, чтобы игнорировать пробелы, но я не знаю, как узнать, какую версию выбрать.

Есть ли лучшие решения с точки зрения реактивности?

Это в первую очередь техническое лидерство, проблема кода, проблема с проверкой кода, но в настоящее время я не нахожусь в таком положении или в деле. Я могу это легко исправить? (К сожалению, о слиянии нарушителей не может быть и речи!)

Ответы [ 4 ]

56 голосов
/ 10 марта 2011

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

Однако вы можете выбрать стратегию слияния для использованияс параметром -s:

git merge -s recursive -Xignore-space-change

Эта команда использует рекурсивную стратегию и использует параметр ignore-space-change.Git-merge docs достаточно хорошо объясняет, как это повлияет на ваше слияние:

  • Если их версия вводит только пробельные изменения в строку, используется наша версия;
  • Если в нашей версии внесены изменения в пробельные символы, но в их версию внесено существенное изменение, используется их версия;
  • В противном случае объединение происходит обычным образом

Было бы также разумно посмотреть, что думает git, прежде чем выполнять слияние с использованием diff с некоторыми дополнительными опциями.Просматривая diff docs , вы увидите, что эти опции помогут вам наиболее:

-b
--ignore-space-change Игнорировать изменения количества пробелов,Это игнорирует пробелы в конце строки и считает все другие последовательности одного или нескольких пробельных символов эквивалентными.

-w
--ignore-all-space Игнорировать пробелы при сравнении строк.Это игнорирует различия, даже если в одной строке есть пробел, а в другой нет ни одной.

1 голос
/ 16 ноября 2012

Обратите внимание, что, как упоминалось в " Git: объединение без пробелов ", использование git merge -Xignore-space-change приведет к

  • игнорировать все изменения пробелов в файле, а не только пробелы, где есть конфликты,
  • однако полученный объединенный файл возвращает пробелы,
  • Использование ловушки pre-commit в дополнение к этой стратегии слияния может помочь полностью удалить эти конечные пробелы.
1 голос
/ 10 марта 2011

Предполагая, что у вас есть по крайней мере три ветви (скажем, 'master', 'team1', 'team2'), затем обновите ветку 'master' со всеми правильными интервалами / отступами и попросите каждую команду внести изменения из 'master».Затем каждая команда должна убедиться, что все их новые коды / файлы соответствуют вашей стандартной практике кодирования.

1 голос
/ 10 марта 2011

Почему бы не запустить обе базы кода через отступ с одинаковым стилем в обеих ветвях?Это не займет много времени.

Тогда у вас не будет пробелов или других проблем (например, различных стилей блоков).В противном случае, да, будет сложно объединить эти ветви.

Предположим, вы кодируете на C, очевидно.

...