2016-03-29 9 views
1

Ich bin neu in Git Versionskontrolle. Ich möchte nur, dass jedes Projekt sein eigenes Repository hat.Gemeinsame Bibliothek im Repository mit Visual Studio

I

erstellt
  1. A Project (Geteilt Lib) in REPOA
  2. B Project (Geteilt Lib) in RepoB die Teilstruktur von A
  3. C Project (Geteilt Lib) in RepoC hat, die aufweist Teilbaum von A
  4. D Project (Konsolenanwendung) in RepoD die Teilstruktur von B und C

die Ordnerstruktur ist wie unten hat.

D

-B

--Eine

-C

--Eine

Wie Sie sehen können, ist ein Ordner dupliziert, und ich kann nicht Fügen Sie das gleiche Projekt zweimal im Visual Studio hinzu.

Wenn ich ein Projekt in B-Ordner hinzufügen, tritt der Kompilierungsfehler auf.

Metadatendatei Projekt C ..... 'A.dll' konnte nicht Da ein Projekt in C-Ordner gefunden werden, nie kompilieren gewesen, A.dll fehlt.

Wenn A in C-Projekt einmal kompiliert wird, es funktioniert gut. (Entweder durch C.sln oder A.sln in C-Projekt öffnen) Natürlich wäre es A.dll, sein

aber beim nächsten Mal jemand anderes D-Projekt von Git herunterladen, er/sie sollte C oder A in C-Projekt vor dem Kompilieren D-Projekt kompilieren.

Wer hat eine gute Lösung dafür?

Antwort

1

Sie können versuchen, über Submodule zu lesen.

Submoduleserlauben fremde Repositories in einem eigenen Unterverzeichnis des Quellbaums eingebettet werden, immer an einem bestimmten darauf verpflichten.


git submodule

Pause Ihr großes Projekt Teilprojekte, wie Sie bisher getan haben.
nun jedes Unterprojekt zu Ihnen Hauptprojekt hinzufügen mit:

git submodule add <url> 

Sobald Sie das projizierte hinzugefügt wird tot Ihr Repo haben es init und zu aktualisieren.

git submodule init 
git submodule update 

Ab Git 1.8.2 neue Option --remote hinzugefügt wurde

git submodule update --remote --merge 

wird fetch die neuesten Änderungen von stromaufwärts in jedem Modul, merge them in und check out die neueste Revision des Submoduls.

Als the docs beschreiben:

--remote

Diese Option ist für den Update-Befehl nur gültig ist. Verwenden Sie den Status des Remote-Tracking-Zweigs des Submoduls nicht, um das Superprojekt mit dem aufgezeichneten SHA-1 zu aktualisieren, um das Submodul zu aktualisieren.

Dies entspricht dem Ausführen von Git Pull in jedem Submodul.


Doch wie würde ich schiebe ein in dem Szenario von Bug-Fix in C begehen, die den Code mit den übergeordneten Schichten geteilt beeinflusst?

Nochmal: Submodul verwendet, wird der Code in Ihrem Hauptprojekt als Teil ihres Inhalts platzieren. Der Unterschied zwischen dem lokalen Ordner oder dem Teil eines Submoduls besteht darin, dass der Inhalt im Submodul in einem anderen eigenständigen Repository verwaltet (commited) wird.

Dies ist eine Illustration von Submodul - Projekt in einem anderen Projekt, in dem jedes Projekt ein eigenständiges Projekt ist.

enter image description here


git subtree

Git Teilstruktur können Sie einen beliebigen Repository als ein Unterverzeichnis eines anderen

Sehr ähnlicheinfügen 10 aber der Hauptunterschied ist, wo Ihr Code verwaltet wird.In Submodulen wird der Inhalt in einem separaten Repo abgelegt und dort verwaltet, so dass Sie ihn auch in viele andere Repos klonen können.

subtree wird der Inhalt als Teil des Stammprojekt Verwaltung und nicht in einem separaten Projekt.

Anstatt zu schreiben, wie man es einrichtet und zu verstehen, wie man es benutzt, können Sie einfach diesen ausgezeichneten Beitrag lesen, der alles erklären wird.

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

+0

Danke für die Antwort. aber ich möchte Teilbaum verwenden. wegen der folgenden Gründe. 1. Ich muss Bibliotheken aktualisieren, während ich die Konsolenanwendung entwickle. Wenn ich ein Submodul verwende, muss ich die Bibliothek in einer anderen Lösung öffnen, Code ändern, commit, push, dann muss ich das Modul von meiner Konsolenlösung aus aktualisieren. Das verstehe ich unter Submodul. 2. Auch mit Submodul, löst es das obige Problem nicht. Danke. –

+0

Kein Problem, deshalb gab ich Ihnen eine Erklärung über die Optionen, die Sie verwenden können. – CodeWizard

+1

Tatsächlich half mir deine Antwort, den Teilbaum tiefer zu verstehen, aber es ist nicht die Antwort, die ich wollte, aber es gibt keine andere Antwort. Ich werde deine als Antwort akzeptieren. Danke;) –