Проблема, с которой я столкнулся, связана с проектом автоматизации, над которым я работаю. По сути, через пользовательский интерфейс кто-то фиксирует изменение в конце файла (в данном случае test.conf), и в то же время кто-то другой фиксирует другое изменение в конце того же файла. Порядок этих строф/коммитов не имеет значения. Я хочу сохранить оба изменения, так как прямо сейчас репозитории Azure Devops обнаруживают конфликт слияния, мешающий утверждающим завершить работу в пользовательском интерфейсе.
Например: В отдельной ветке, в данном случае "branch_a", кто-то делает в test.conf коммит "Hello\nworld\n"
В то же время кто-то создает новую ветку «branch_b» и добавляет «это\nme» в конец файла.
Затем, через 5 минут, создается PR для ветки_a в основной и завершается. Итак, на данный момент строка 1 — «hello\nworld».
Затем, через 15 минут, создается PR для ветки_b в main и возникают конфликты слияния, поскольку в строке 1 main теперь есть hello, а не пустая.
Проблема в том, что я хочу, чтобы обе записи были объединены, без необходимости извлекать, объединять и разрешать конфликты. Таким образом, желаемым конечным результатом будет «hello\nworld\nits\nme». Я попытался установить объединение в атрибуты git, но это все равно вызывает конфликт.
Я также хочу, чтобы это выполнялось автоматически через репозитории кода Azure Devops.
Например, что, если в этом случае Branch_b добавит hello\nworld\nits\nme
, конечный результат будет hello\nworld\nhello\nworld\nits\nme
?
Кроме того, поскольку фактический файл является файлом .conf
, что, если одна ветвь добавит foo=bar
, а другая — foo=baz
?
Вероятно, это не лучший пример, который я мог бы привести, поскольку он относится к файлу Splunk .conf, поэтому несколько разделов с одинаковыми атрибутами могут быть действительными. Похоже, что TFS не поддерживает это из коробки, что крайне прискорбно. В любом случае спасибо всем за помощь!
Боюсь, что не существует готового метода, позволяющего автоматически объединить две записи в Azure DevOps.
А когда вы используете функцию запроса на извлечение Azure DevOps, она игнорирует настройки в gitattributes
и .git/config
. Таким образом, параметр объединения объединения не будет работать в Azure DevOps.
Чтобы удовлетворить ваши требования, я предлагаю вам установить и использовать расширение: Расширение конфликта слияния запросов на включение в Azure DevOps.
После установки расширения мы можем разрешить конфликты непосредственно в пользовательском интерфейсе запроса на извлечение Azure DevOps.
Например:
В этом случае пользователи могут объединить две записи вручную в пользовательском интерфейсе запроса на включение и отправить объединение для разрешения конфликта. Затем утверждающие могут продолжить слияние запросов на включение.
Если вам нужно использовать настройки в файле gitattributes, вам необходимо извлечь, объединить и разрешить конфликты на вашем локальном компьютере.
Я могу полностью понять ваши требования. Вы можете отправить заявку на сайте: Сообщество разработчиков, чтобы сообщить об этой функции.
Спасибо тебе за это. К сожалению, он не понимает тег merge=union. Я слышал ужасные истории об этом расширении, стирающем данные, которые являются символом utf-8, но я попробую и посмотрю. Еще раз спасибо.
@MrDaveForDays Да. Поскольку это не встроенная функция, у нее могут быть некоторые недостатки. Но это единственный метод в Azure DevOps, который может напрямую разрешать конфликты. Если вы решите использовать это расширение, вы можете заставить утверждающих выполнить некоторую проверку разрешенных конфликтов.
С другой стороны, вы также можете отправить заявку на предложение, основанную на ваших фактических требованиях. Разработчикам Azure Devops будет полезно собрать требования пользователей.
Вам нужен собственный драйвер слияния, но даже в этом случае вы, вероятно, столкнетесь со многими случаями, когда потребуется вмешательство человека.