Моя группа SW пытается обновить нашу систему управления версиями из Visual Source Safe, которая больше не поддерживается Microsoft, для Subversion (поскольку наш сайт-партнер уже использует ее). У нас есть много общего кода, который в VSS можно сделать напрямую с внутренними ссылками. Они должны быть перемещены в общие папки для использования нескольких проектов. Хотя внешние средства могут использоваться для их внедрения, они несколько рискованны и не являются естественным образом интегрированы в архитектуру SVN (хотя мы все еще намерены использовать их для стороннего кода и других вещей, которые не меняются). Во всяком случае, мы придумали решение, которое я не видел нигде, но все мы думаем, что это имеет смысл, поэтому я хотел посмотреть, что думают другие, и если есть подводные камни (на самом деле они еще не пробовали его жить).Subversion - общий доступ к общей папке без внешних ссылок
Так что я называю это «Общие внутренние» папки, чтобы контрастировать с внешними. Предположим, у меня есть каталог Common_Code в моем корне репозитория, содержащий общие файлы библиотеки для данного языка (в данном случае C++). Теперь я создаю MyProject с помощью соединительных линий/ветвей/тегов и хочу поместить общую папку в подкаталог моего проекта. Поэтому я создаю нормальную ветвь subversion, которая отделяется от Common_Code до MyProject/trunk/Common_Code. Так что различные члены команды работают над MyProject, отрываясь от ствола. Филиал Боба может выглядеть так: MyProject/branch/Bob_Working и вложенная папка будут входить в MyProject/branch/Bob_Working/Common_Code. Это фактически ветвь ветки общей папки.
Когда Боб закончен, он снова сливается с багажником. Это продолжается, не мешая никакому другому проекту, который мог бы также создать «внутреннюю ветвь» из корневой общей папки. В конечном итоге мы выпускаем наш продукт, но обнаруживаем, что мы внесли некоторые общие изменения в Common_Code, которые принесут пользу другим проектам. Поэтому, после некоторого группового обзора, мы соглашаемся объединить версию нашего проекта Common_Code с корневой версией, из которой было первоначально принято. Это отделяет необходимость обновления общего кода для выпуска из необходимости поделиться изменениями с остальной компанией.
Это похоже на простой, но гибкий способ совместного использования кода. Я вижу два возможных ограничения. Во-первых, он не будет работать в репозиториях, и в этом случае необходимо будет использовать внешние. Во-вторых, вы не можете удалить первую ветвь после слияния, так что я не думаю, что -reintegrate будет использоваться. Я все еще не уверен, будет ли приемлемым нормальное слияние или если наш клиент Tortoise поддерживает его.
Не изобретайте колесо !!! Внешние внешние элементы SVN - это естественный путь (tm) ** кода обмена и ** ОНИ ЕСТЕСТВЕННО ИНТЕГРИРУЮТСЯ В SVN-АРХИТЕКТУРЕ **. Разумеется, благодаря вашему «рабочему процессу» вы получите много головной боли при слиянии изменений с копии копии копии в исходное местоположение. Просто прочитайте больше о PEG-ревизиях во внешнем (и забывайте о не PEG-ed), а внешние - в общем –
Является ли почти неизбежным расхождение общих внутренних компонентов в этой схеме, пока они больше не «разделяются» по правде, от проекта к проекту , чего вы хотите избежать? Или ты в порядке с этим? – Ben
Наш сайт-партнер использует привязанные внешние ссылки (привязанный путь - да). Но у них очень сложный метод обновления. Чтобы вносить изменения, им необходимо разветвить общий, указать внешнюю на головную ревизию ветки. Когда это будет сделано, слейте ветку в общую соединительную линию и снова привяжите внешнюю к новой версии соединительной линии. Похоже на более сложную версию того же самого, что описано выше. Мы по-прежнему позволяем проектам использовать внешний код для указания общего кода, если они не намерены вносить в него изменения. Но если это так, этот метод кажется более простым. –