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