Das SzenarioWie stellt git Submodule
Wir haben ein großes Projekt mit vielen Teilprojekten in Unterverzeichnissen und Abhängigkeiten. Wir planen, einen Teil des Projekts auszulagern.
Unsere Projektstruktur ist wie dieser (Text sind Unterordner Namen):
MAIN
|_Custom
| |_Source
| | |_CustA (Contains multiple projects each in own directory)
| | |_CustB (Contains multiple projects each in own directory)
| |
| |_Dll
| | |_Debug
| | |_Release
| |
| |_Lib
| |_Debug
| |_Release
|
|_Dll
| |_Debug
| |_Release
|
|_Lib
| |_Debug
| |_Release
|
|_Plugins
| |_Dll
| | |_Debug
| | |_Release
| |
| |_Source
| |_PluginA
| |_PluginB
|
|_Source
|_Module1
| |_M1A
| |_M1B
|
|_Module2
|_M2A
Wie ich bereits erwähnt, die ‚Benutzerdefiniert‘ Teil ist das, was wir auslagern möchten. Diese benutzerdefinierten Projekte hängen von den dll- und lib-Dateien in den Ordnern Main/Custom/Dll, Main/Custom/Lib, Main/Dll, Main/Lib und Main/Plugins/Dll ab. Das Problem hierbei ist, dass unabhängig vom Root-Laufwerk die Ordner Main/Dll-Lib und Main/Plugins/Dll dieselbe Hierarchie und Position innerhalb des Hauptordners beibehalten müssen.
Angenommen, CustA hat ein Projekt, das von einer DLL aus dem Main abhängt. Alle Projekte unter CustA müssen die Ausgabepfade zwingend so setzen, dass die exe und dll Dateien zu Main/Custom/Dll und lib Outputs zu Main/Custom/Lib gehen. Diese exe (angenommen, es befindet sich in Release) muss unbedingt nach der referenzierten Hauptdll suchen, die den relativen Pfad "...... \ Dll \ Release" verwendet, der auf den Main/Dll/Release-Ordner und ähnlich für jede Hauptdatei verweist -plugin dlls. Es kann die DLL oder die lib nicht von irgendeinem anderen willkürlich eingestellten Pfad referenzieren.
Die Anforderung:
Als Haupt von unseren eigenen Leuten geklont werden soll, müssen sie alle Quell- und DLLs und Dateien unter Haupt bekommen. Für Custom müssen jedoch die Ordner Main/Custom/Source, Main/Custom/Dll und Main/Custom/Lib erstellt werden (sie können eine leere Datei enthalten, falls git keine leeren Ordner zulässt.), Aber die spezifischen benutzerdefinierten Module (wie CustA und seine Unterverzeichnisse und seine Ausgabe exe, dll & lib-Dateien) dürfen nicht geklont werden. Die benutzerdefinierten Module (CustA, CustB, CustC ...) müssen bei Bedarf einzeln im Ordner "Main/Custom/Source" gezogen/geklont werden, um ihren Quellcode zu erhalten, und um ihre exe-dll-lib-Dateien zu erhalten .
Auf der anderen Seite, wenn Outsourcing, muss es leicht sein, an ihrem Ende auch einzurichten. Hier sollten sie in der Lage sein, den Main so zu klonen, dass sie die Ordner Main/Dll, Main/Lib und Main/Plugins/Dll und ihren Inhalt exe-dll-lib und andere Ausgabedateien erhalten, aber nicht die Quelle Code innerhalb von Main/Source und Main/Plugins/Source. Da der Outsourcer pro Custom-Modul ausgeführt wird, vorausgesetzt, dass diesem Entwickler CustA zugewiesen wurde, muss er leicht den Quellcode für alle Projekte unter CustA abrufen können, aber nicht in der Lage sein, Clone/Pull Custom/Quelle/CustB.
Was habe ich schon versucht:
Die ganze Haupt und alles in ihm derzeit zu einem SVN-Repository auf unserem eigenen Server-Rechner gesichert. Aber wir wollen nach git migrieren, und verwenden Nulabs-Rückstand für Projektverfolgung und -verwaltung.
Ich habe etwas recherchiert und eine Kopie unserer Projektstruktur mit Dummy-Dateien erstellt und war in der Lage, ein Test-Repo mit allen (ich meine ALL) die Dateien und Unterordner zu erstellen, aber das erlaubte nicht den eingeschränkten Zugriff wie ich erwähnt habe über.
Ich verstehe, dass ich das gesamte Projekt in mehrere kleinere Repositories partitionieren kann und dann die git Submodul-Funktion verwenden, um bestimmte Repositories unter anderen Repos zu referenzieren.So habe ich separate Repositories von Main/Plugins/Source, Main/Source und für die Custom Module jeweils eigene Repositories für Main/Custom/Source/CustA, Main/Custom/Source/CustB, Main/Custom/Source/CustC etc und lade sie auf die Fernbedienung hoch. Dann habe ich ein Repository für den Hauptordner selbst erstellt und die Main/Dll-, Main/Lib-, Main/Plugins/Dll-Ordner hinzugefügt. Hier erscheinen die #/Source-Module als Untermodule, die auf den ersten Blick OK erscheinen. Wenn ich dieses Hauptrepo auf die Fernbedienung drücke, zeigt die Fernbedienung auch an, dass CustA, CustB ..., Main/Source, Main/Plugins/Source usw. Untermodule sind, während die Dll- und Lib-Ordner die korrekten Dateien anzeigen.
Aber ich kann nicht verstehen, wie man diese richtig klont.
Das Problem:
Als ich Haupt Repo von entfernten klonen, wird das Klonen das auslagern Szenario neu, wo die Quellordner enthalten nichts, als sie Submodule sind, während die DLL und Lib Ordner richtig bevölkerten . Aber wenn ich versuche, die Main/Source oder Main/Plugins/Source Ordner explizit zu ziehen, funktioniert es nicht. Weder erlaubt es mir nicht, den Remote-Pfad der Quellordner festzulegen, da diese Ordner selbst Teil des Hauptrepos sind, noch erlaubt es mir, einen Pull auszuführen, wenn ich diese leeren Quellordner lösche und sie dann neu erstellen und deren festlegen Remote-Pfad, um die tatsächliche Repo-URL des Sub-Moduls widerzuspiegeln.
Ist die Partitionierung, die ich falsch gemacht habe? Oder ist der Klonschritt falsch? Wenn ja, wie kann ich git richtig einrichten, um die oben genannten Anforderungen zu erfüllen?
Wenn Sie etwas auslagern, warum nicht einfach diese Arbeit als benutzerdefinierte Abhängigkeit einschließen? Dies würde das Versionskontrollproblem vollständig umgehen. Außerdem ist deine Frage sehr lang, du solltest sie vielleicht kürzen. –
Sorry für die lange Frage. Ich wollte die Situation richtig erklären. – PRinCEKtd
Ich schaute auf die benutzerdefinierte Abhängigkeit. Es scheint, dass ich einige andere Werkzeuge dafür verwenden muss. Derzeit entwickeln wir unter Windows7 mit VS2012. Die Outsource-Projekte sind meist VC++/MFC und manchmal .Net/C#. NuGet kann .Net verwalten, aber MFC benötigt etwas anderes. Wir möchten das einfacher halten. Ich gucke auch auf git subtrees ... – PRinCEKtd