Как работать с общими файлами (DLL) в нескольких не связанных проектах - PullRequest
0 голосов
/ 03 мая 2018

В настоящее время мне поручено перенести наш репозиторий из SVN в GIT. Пока я это делал, я собирался попытаться сломать некоторые из наших в основном не связанных областей. Мы скажем, что у нас есть несколько проектов в ExternalCustomerCommunications, которые используют проекты с ABC.cs, и у нас есть код пользовательского интерфейса InternalUser, который также использует некоторые файлы и файлы проекта. Конечно, если я оставлю весь этот код в одном репо в настоящее время, но при этом они могут совместно использовать dll ABC внутри решений, потому что все они находятся в одном репозитории. Из-за размера нашего репозитория и двух частей, расположенных на двух полностью разных серверах и приложениях, я подумал, что разделение некоторых частей может иметь смысл.

У меня вопрос, чтобы сделать это, как бы один обработал оба хранилища, которым нужен один и тот же общий код? Я понимаю, что поддерево может быть решением, но я не был уверен, целесообразно ли это. Я читаю майские посты об ужасах поддеревьев и подмодулей.

Я думаю, что это довольно распространенная ситуация, но я не знал ни одной наилучшей практики для ее решения.

Я также считаю, что я прочитал, что одно решение не может иметь или не должно иметь два репозитория.

Если это имеет значение, я использую VSTS и их размещенный экземпляр GIT, а также Visual Studio (и, возможно, sourcetree, если он хорошо поддается процессу)

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Предположим, SubRepo - это git-репо, управляющее ссылочным проектом (ABC.cs), MainRepo - это git-репо, в которое вы хотите добавить ссылки из внешнего репо (SubRepo). Ниже приведены способы достижения по подмодулю и поддереву отдельно:

Вариант 1: подмодуль

Чтобы добавить SubRepo в качестве подмодуля для MainRepo, вы можете использовать следующие команды:

# In the directory of the local MainRepo directory, such as C:\MainRepo
git submodule add <URL for SubRepo>
git commit -m 'add SubRepo as a submodule for the MainRepo'
git push

Теперь все файлы SubRepo добавляются в подкаталог C:\MainRepo\SubRepo, затем вы можете ссылаться на файлы в этом подкаталоге, фиксировать и отправлять и изменять.

Примечание: Если файлы в SubRepo обновлены, вы можете обновить подмодуль в MainRepo соответственно с помощью следующих команд:

git submodule update --remote
git commit -am 'update submodule'
git push

Вариант 2: поддерево

Чтобы добавить SubRepo в качестве поддерева для MainRepo, вы можете добавить файлы ветви SubRepo в подкаталог Mainrepo. Команды для добавления поддерева, как показано ниже:

git subtree add --prefix=subfolder <URL for SubRepo> master
git push

Теперь добавьте файлы ветки master SubRepo в подпапку subfolder MainRepo, объедините и зафиксируйте изменения в MainRepo.

.

Примечание: Если файлы обновляются в SubRepo, вы можете обновить поддерево MainRepo с помощью следующих команд:

git subtree pull --prefix=sub <URL for SubRepo> master
git push
0 голосов
/ 03 мая 2018

Ваши GIT-репозитории должны быть максимально легкими, а управление сборкой, тестированием, развертыванием и зависимостями должно выполняться некоторыми файлами конфигурации. Формат файлов конфигурации обычно определяется используемой платформой или средством автоматизации. Например, в JavaScript вы бы использовали npm менеджер пакетов, чтобы вывести свои зависимости и оставить их вне репозитория. Если вы хотите поделиться кодом между двумя репозиториями, вы создаете третий репозиторий с новым npm package, а затем в других репозиториях вы можете использовать package.json (npm файл конфигурации), чтобы указать репозиторий общего кода, из которого нужно извлекать код во время Установка зависимостей.

Если вам нужен цикл сборки, тестирования и развертывания для общего репозитория, вы должны опубликовать свои артефакты в каком-то специальном репозитории, предназначенном для этой цели (я слышал хорошие вещи о артефакте )

Я вижу, что вы упомянули ABC.cs, поэтому я делаю вывод о языке C #. Есть менеджер пакетов NuGet , который вы можете исследовать для этой цели.

Существуют также решения, такие как GIT LFS, для хранения больших файлов, но мне никогда не приходилось их использовать.

...