2016-03-29 10 views
1

Я новичок в управлении версиями Git. Я просто хочу, чтобы каждый проект имел свой собственный репозиторий.Общая библиотека в репозитории с визуальной студией

Я создал

  1. проект (общий Lib) в RepoA
  2. B проекта (общий Lib) в RepoB, который имеет поддерево A
  3. C Project (общий Lib) в RepoC, который имеет поддерево из A
  4. D Project (Консоль Application) в RepoD, который имеет поддерево в и С

структура папки, как показано ниже.

D

-B

-C

Как вы можете видеть, папка дублируется, и я не могу дважды добавьте тот же проект в визуальную студию.

Если я добавляю проект в папку B, возникает ошибка компиляции.

Метаданные Файл проекта C ..... «A.DLL» не может быть найден Поскольку проект в папке C, никогда не было компилировать, A.DLL отсутствует.

Если А в проекте C компилируется один раз, он работает отлично. (Открыв Либо C.sln или A.sln в проекте C) Конечно, было бы A.DLL,

но в следующий раз кто-то еще загрузит проект D из git, он должен скомпилировать C или A в проекте C перед компиляцией D проекта.

У кого-нибудь есть хорошее решение для этого?

ответ

1

Вы можете попробовать и прочитать о подмодулях.

Submodulesпозволяют иностранным хранилищами быть встроены в выделенном подкаталоге дерева источника, всегда указывали на конкретное обязательство.


git submodule

Разбейте свой большой проект для подпроектов, как вы делали до сих пор.
Теперь добавьте каждый суб проект к вам основному проекту с помощью:

git submodule add <url> 

После того, как прогнозируемые добавляются карапуз вашего репозитория, вы должны инициализировать и обновлять его.

git submodule init 
git submodule update 

На Git 1.8.2 новый вариант --remote был добавлен

git submodule update --remote --merge 

будет fetch последние изменения от входа в каждый подмодуль, merge them in и check out последняя редакция подмодуля.

Как the docs описать:

--remote

Эта опция действительна только для команды обновления. Вместо использования зарегистрированного SHA-1 суперпроекта для обновления подмодуля, используйте состояние ветви удаленного отслеживания подмодуля.

Это эквивалентно запуску git в каждом подмодуле.


Однако, как бы я нажимаю фиксации в сценарии исправления ошибки в C, который влияет на код совместно с родительскими слоями?

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


Это иллюстрация подмодуля - проект внутри другого проекта, в котором каждый проект является автономным проектом.

enter image description here


git subtree

Git поддерево позволяет вставить любой репозиторий в подкаталог другого одного

Очень похож на submodule, но основное различие заключается в том, где ваш код управляется.В подмодулях содержимое помещается внутри отдельного репо и управляется там, что позволяет вам клонировать его также и ко многим другим репозиториям.

subtree управляет содержанием как часть корневого проекта, а не в отдельном проекте.

Вместо того, чтобы записывать, как настроить его и понять, как его использовать, вы можете просто прочитать этот отличный пост, который объяснит все это.

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

+0

Спасибо за ответ. но я хочу использовать поддерево. по причине внизу. 1. Мне нужно обновлять библиотеки при разработке консольного приложения. Если я использую подмодуль, мне нужно открыть библиотеку в другом решении, изменить код, зафиксировать, нажать, тогда мне нужно обновить модуль из моего консольного решения. Это то, что я понимаю о подмодуле. 2. Даже с подмодулем, он не решает вышеуказанную проблему. Спасибо. –

+0

Нет проблем, поэтому я объяснил вам варианты, которые вы можете использовать. – CodeWizard

+1

На самом деле ваш ответ помог мне глубже понять поддеревье, однако это не тот ответ, который я хотел, но другого ответа нет. Я отвечу на ваш ответ. Спасибо;) –