2010-01-08 6 views
5

Ich habe zwei Versionen eines Projekts in einem lokalen Git-Repository. Ich muss dieses Repository in zwei Remote-Repositories einreichen, eines für jede Version;Wie verfolgen Sie zwei Versionen eines Projekts in einem GIT-Repository?

LOCAL GIT (V1/V2) -> REMOTE GIT (V1), REMOTE GIT (V2)

Ich habe einige Dateien im lokalen GIT-Repository, das nur sollte auf REMOTE GIT (V1) und andere gehen gehe nur zu REMOTE GIT (V2). Jetzt beginne ich das komplette lokale Repository für beide Fernbedienungen. Kann ich nur einige Dateien an REMOTE1 übergeben?

Ich brauche beide Versionen des Projekts in einem Repository, hätte aber gerne eine Option, die Geschichte etwas zu teilen. Ich denke nicht, dass Verzweigungen helfen können, denn dann müsste ich in beiden Branchen die gleichen Änderungen vornehmen. Der Großteil des Codes, 90% des Codes, ist für VER 1 und VER 2 identisch. Neuer Code ist normalerweise für beide Versionen gleich.

+0

Es wäre gut zu verstehen (und hier zuerst), was Sie versuchen zu erreichen. Kleinste mögliche Repository-Größe? Müssen Sie mit VER2 etwas verschmelzen, das aus VER1 abgeleitet wurde? Noch etwas? –

Antwort

-1

Klingt, als ob Sie Submodule git-submodule verwenden müssen. Sie würden den gemeinsamen Code im Haupt-Repository speichern, aber dann die einzelnen Versionen in Submodulen speichern. Sie können den Verlauf nicht mit git teilen. Jedes Commit basiert kryptographisch auf Inhalt und Eltern.

+1

Untermodule dienen zum Einbetten eines anderen Projekts in einem fremden Repository an einem bestimmten Ort in Ihrem Quellbaum. Das OP hat nur ein Projekt (mit verschiedenen Zweigen), daher sind Submodule nicht relevant. –

3

Verzweigung ist genau das, was Sie brauchen. Verzweigen ist einfach und sehr schnell mit Git, so dass Sie nichts als ein paar mehr Tastenanschläge verlieren.

Sie können 3 Zweige verwenden. Erstelle einen "gemeinsamen" Zweig, in dem du an Sachen arbeitest, die für beide "Gabeln" gemeinsam sind und verbinde sie nach dem Commit. Für bestimmte Sachen, arbeite in einer der Filialen.

Git verwendet feste Links auf dem Dateisystem, so dass Filialen sowohl hinsichtlich der Geschwindigkeit als auch des genutzten Platzes günstig sind.

Schließlich können Sie immer auswählen, welcher Zweig gedrückt/gezogen werden soll.

+1

Branchen sind nicht billig wegen der "harten Verbindungen".Verzweigungen sind billig, weil die Verzweigung nur ein Commit ist, das durch SHA1-ID auf alle seine Teile verweist, und die gleiche Datei in verschiedenen Commit-Bäumen wird die gleiche SHA1 haben und nur einmal gespeichert werden. Nun, SVN, auf der anderen Seite, speichert Filialen, indem sie ganze Verzeichnisstrukturen hat, und * verwendet * harte Verbindungen, um das zu optimieren. Bitte verwechseln Sie nicht das alte, hässliche SVN mit neuem, glattem Idioten. –

+0

Danke für die Korrektur, ich habe es jetzt behoben. –

+0

@Randal: SVN verwendet auch keine Hardlinks für das Dateisystem. Ein Zweig in SVN ist auch billig, weil es "nur ein Commit" ist. Der einzige Unterschied ist, dass in SVN billige Datei-/Ordnerkopien, Zweige und Tags alle nach dem gleichen Mechanismus erstellt werden, während in git-Zweigen ein separates Konzept existiert. –

0

Erstellen Sie drei Git-Repositories: core, app_1, app_2. Erstellen Sie in jedem der app Repositorys ein Git-Submodul, das auf das Repository core verweist.

Behandeln Sie die core Repository als reine Bibliothek und die app Repositories als reine Bibliothek Verbraucher, die Strukturierung der drei Projekte, so dass Sie alles, was gemeinsam mit den beiden „Versionen“ im core Repository und alles, was zwischen den beiden halten können abweichen würde Versionen in den app Repositories. Strukturieren Sie die app-Repositorys so, dass das core-Projekt ohne Änderungen in einem Unterverzeichnis innerhalb der app-Repositorys platziert werden kann. Möglicherweise benötigen Sie ein minimales gemeinsames Initialisierungsskript, das zwischen allen app Repositories geteilt wird, aber das ist ein kleiner Preis, den Sie bezahlen müssen.

Das Szenario der Strukturierung des Codes ist sehr verbreitet. Obwohl die Verwendung von Git auf diese Weise zur Unterstützung dieses Codearchitektur-Szenarios weit weniger verbreitet ist, wird es als eine machbare Möglichkeit angesehen.