Git Merge и исправление смешанных пробелов и вкладок с двумя ветвями
Я прошел через несколько похожих SOQ и не нашел адекватного решения для этого случая.
Я заметил, что во многих файлах есть грязное сочетание вкладок и пробелов, используемых для отступа. Стандарт кодирования, которому мы следуем, в настоящее время использует 4 пробела для табуляции.
Хотя это должно было быть решено, когда это произошло, я должен рассмотреть это сейчас и хотел бы исправить файлы, с которыми я сталкиваюсь. Проблема в том, что есть две команды, использующие разные ветви кода, и нам в конечном итоге придется объединить эти ветви. Что произойдет, если мы изменим все файлы нашей ветки на правильное форматирование и попытаемся объединить его? Будет ли это трудно сделать? Это покажет мне массу конфликтов? В идеале, например, git merge, чтобы игнорировать пробелы, но я не знаю, как узнать, какую версию выбрать.
Есть ли лучшие решения с реактивной точки зрения?
Это в первую очередь техническое лидерство, проблема кода, проблема с проверкой кода, но в настоящее время я не нахожусь в таком положении. Я могу это легко исправить? (К сожалению, о правонарушителях не может быть и речи!)
4 ответа
По умолчанию git будет рассматривать каждую разницу в отступе строки как изменение, так что да, вы, скорее всего, столкнетесь с массовыми конфликтами при слиянии акций.
Однако вы можете выбрать стратегию объединения для использования с -s
опция:
git merge -s recursive -Xignore-space-change
Эта команда будет использовать рекурсивную стратегию и использует ее ignore-space-change
вариант. Документы git-merge достаточно хорошо объясняют, как это повлияет на ваше слияние:
- Если их версия только вводит пробельные изменения в строку, используется наша версия;
- Если наша версия вносит изменения в пробельные символы, но их версия содержит существенные изменения, используется их версия;
- В противном случае слияние происходит обычным образом.
Также было бы разумно взглянуть на то, что думает git, прежде чем выполнять слияние с использованием diff с некоторыми дополнительными опциями. Просматривая документы diff, кажется, что эти опции помогут вам больше всего:
-b
--ignore-space-change Игнорировать изменения количества пробелов. Это игнорирует пробелы в конце строки и считает все другие последовательности одного или нескольких пробельных символов эквивалентными.-w
--ignore-all-space Игнорировать пробелы при сравнении строк. Это игнорирует различия, даже если в одной строке есть пробелы, а в другой нет ни одной.
Предполагая, что у вас есть по крайней мере три ветви (скажем, "master", "team1", "team2"), затем обновите ветку "master" со всеми правильными интервалами / отступами и попросите каждую команду внести изменения из "master". Затем каждая команда должна убедиться, что все их новые коды / файлы соответствуют вашей стандартной практике кодирования.
Почему бы не запустить обе базы кода через отступ с одинаковым стилем в обеих ветвях? Не займет много времени
Тогда у вас не будет пробелов или других проблем (например, разных стилей блоков). В противном случае, да, будет сложно объединить эти ветви.
Предполагая, что вы код в C, очевидно.
Обратите внимание, что, как упоминалось в " Git: Слияние без конфликтов пробелов", используя git merge -Xignore-space-change
будут
- игнорировать все изменения пробелов в файле, а не только пробелы, где есть конфликты,
- тем не менее, полученный объединенный файл возвращает пробелы,
- используя
pre-commit
Хук в дополнение к этой стратегии слияния может помочь полностью удалить эти конечные пробелы.