Подтвердить что ты не робот

Слияние файлов vcproj - SCM hell

Объединение файлов проектов/решений - это известная катастрофа среди разработчиков/администраторов SCM, выполняющих слияния в их исходном контроле.

Возьмем, к примеру, общий сценарий: разработка выполняется по проекту/решению в двух разных ветвях. Когда приходит время слияния обратно в основную линию развития, между VCPROJ (и SLN) очень мало сходства.

Причина в том, что Visual Studio может изменить (и изменить) местоположение различных XML-подобных элементов в этих файлах. Например, Конфигурации Debug и Release могут менять порядок при каждой операции сохранения в файле proj. Это делает невозможным легкое включение изменений из каждой ветки разработки, даже не учитывая автоматического слияния.

Я могу предположить, что Microsoft использует некоторую систему хеширования perl для хранения структур vcproj, поэтому рендеринг файлов при операции сохранения не упорядочен.

Сначала я хотел бы спросить: кто-нибудь нашел какой-то изящный способ обхода этого?

Во-вторых, я хотел бы сделать два предложения:

  • Попросите Microsoft переопределить вышеуказанные файлы и ограничить их некоторым жестким упорядочением элементов.

  • найти инструмент (или написать один), который сортирует файлы vcproj (xml format) и sln (sln format...) в алфавитном порядке, рекурсивно (все элементы внутри элементов и т.д.). Использование этого инструмента как для исходных, так и для целевых файлов позволит легко указать (и объединить) изменения, надеясь, что Visual Studio прочитает отсортированный, объединенный проект или sln файл.

Любые другие идеи и мысли приветствуются.

4b9b3361

Ответ 1

Я создал инструмент для сравнения и слияния файла решения (http://slntools.codeplex.com). Гораздо проще объединить решение с инструментом по сравнению с "общим слиянием". Он не может обрабатывать файлы проекта.

Ответ 2

Проект: Merge - мой инструмент для сравнения и слияния XML файлов. Я изначально написал его, потому что у меня возникла именно эта проблема с файлами проекта Visual Studio.

Он правильно обнаруживает повторно упорядоченные элементы и/или атрибуты в XML файле и будет корректно разрешать почти все "конфликты" автоматически.

Ответ 3

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

Тогда у вас будет шанс эффективно объединить эти элементы.

Ответ 4

Обычно я стараюсь не помещать автоматически созданные файлы в SCM. Автоматически генерируемые файлы должны быть сгенерированы из исходных файлов, которые контролирует разработчик, и их можно поместить под SCM. Если конкретный инструмент хранит данные в непрозрачном и хрупком формате, это проблема с инструментом.

Что касается Visual Studio, хотя я считаю, что у него есть достойные компиляторы, библиотеки и среда отладки, я считаю, что файлы в генерации (PRJ, SLN, RC) очень проблематичны. Помимо проблем, о которых вы говорите, они также сильно меняются между различными версиями VS. По этой причине мы пишем наши собственные make файлы и создаем программы извне, используя make. Кроме того, мы разделяем файлы ресурсов на части, для которых мы вынуждены полагаться на VS, и те, с которыми мы можем справиться с нормальным редактором. Мы генерируем много файлов ресурсов автоматически из описания высокого уровня, написанного на пользовательских доменах. Таким образом, мы минимизируем влияние изменений, которые трудно обрабатывать в SCM.

Ответ 5

Что мы делаем с файлами ресурсов (не так много проблем с файлами проекта), это сортировать их до слияния. Мы сконфигурировали команду слияния на пластике, чтобы фактически запустить сортировку (другое приложение, которое мы разработали для этого, мы можем поделиться кодом, если вам интересно, ничего необычного) до слияния, поэтому все случайные перемещения исчезнут. Надеюсь, это поможет.

Ответ 6

Проверьте параметры установки - убедитесь, что у всех ваших коллег установлен компонент компилятора x64 (или все нет)

Ответ 8

Существует проект google с именем gyp, который генерирует решения и проекты Visual Studio, похожие на CMake. Часть этого проекта - инструменты python для сортировки узлов и атрибутов XML файлов .sln и .vcproj соответственно: pretty_sln и pretty_vcproj. Вы можете загрузить их независимо от http://gyp.googlecode.com/svn/trunk/tools/

Пока я смотрел только на pretty_vcproj, он также расширяет файлы .vsprop, импортированные в vcproj, возможно, для сравнения точного содержимого двух vcprojs. Получающийся в результате vcproj не соответствует схеме, предоставленной Microsoft, хотя, вероятно, будет работать нормально, или можно изменить ее только для сортировки узлов "Конфигурация" и "Платформа", оставив все остальное неповрежденным. Не уверен, стоит ли это усилий, поскольку, похоже, существуют другие проекты, направленные на нормализацию vcprojs уже...