Сначала я объясню историю использования Subversion в нашей компании.
Мы начали использовать Subversion около 3 лет назад. Мы используем его вместе с TortoiseSVN в качестве клиента.
У нас есть 3 хранилища с совершенно разными проектами, которые не имеют ничего общего.
Но в 1 репозитории у нас есть около шести продуктов / проектов, которые используют общие библиотеки DLL (для архивирования, XML, базовых типов и т. Д.)
У нас есть около 20 из этих общих DLL (которые все еще обновляются).
Итак, эти 20 Common Dll находятся в багажнике вместе с шестью проектами, которым они нужны.
Теперь ствол действительно заполняется, и недостатком этого является то, что все проекты полагаются друг на друга. Таким образом, если изменения вносятся в 1 общую DLL для одного проекта, то все остальные проекты должны быть обновлены и должны быть адаптированы и проверены.
Поскольку это не очень удобно (особенно если вы хотите выпустить продукт, а затем появятся некоторые новые изменения в других продуктах), мы решили объединить все для каждого проекта. Все еще сохраняю большой ствол для синхронизации между различными проектами.
Таким образом, мы создаем папку trunk / branch / tags для каждого проекта и делаем svn-копию только dll, необходимой для этого проекта.
Ситуация:
До:
-branches
-tags
-trunk
-Common DLL 1
-Common DLL 2
-Common DLL 3
-Common DLL 4
-Common DLL 5
-Project 1
-Project 2
-Project 3
Теперь
-Projects
-Project1
-branches
-tags
-trunk
-Common DLL 1
-Common DLL 2
-Project1
-Project2
-branches
-tags
-trunk
-Common DLL 2
-Common DLL 3
-Common DLL 4
-Project2
Преимущество этого подхода в том, что у вас есть лучшее представление о том, какие dll имеют различные проекты, и вы можете проверить каждый отдельный проект как полностью рекурсивный вместо частичной проверки.
У нас также больше контроля, когда мы выполняем синхронизацию общей библиотеки DLL (важно для выпусков), и у нас нет незавершенных рабочих коммитов от других разработчиков проекта.
ОДНАКО: у нас много проблем с объединением этих Common Dll. С последней версией TortoiseSVN у нас постоянно возникают «конфликты деревьев». Также много проблем со слиянием (иногда возвращаясь назад больше месяца и не помня, что действительно изменилось).
Также переименование dll происходит неправильно, и Tortoise всегда добавляет все dll ствола, еще не вошедшего в проект, в рабочую копию этого проекта. Затем вы всегда должны удалить их вручную перед регистрацией.
Я знаю, что мы никогда не должны использовать «Реинтегрировать ветку», но осталось два варианта. Кто-нибудь знает, какой из них лучше?
Можем ли мы сохранить эту структуру репо или изменить ее.
Что лучше поместить все Common Dll в другой репо, а затем использовать внешние?
ТНХ