Was tun mit mehreren Projekten, die von der gleichen Quelle abhängig sind?

7

Dies ist etwas, auf das ich im letzten Monat zweimal gestoßen bin, und ich bin mir nicht einmal sicher, wie ich das als Google-Suchanfrage formulieren soll.

Ich benutze tatsächlich SVN für all das, aber es scheint, dass dies ein allgemeines Versionierungsproblem sein sollte.

Wir haben zwei Projekte und eines davon hängt vom Code des anderen ab. Aufgrund von API-Problemen ist es nicht pragmatisch, irgendeine Form der Verbindung zwischen den Produkten zu haben (und ich möchte nicht alle Maschinen der Nicht-Codierer konfigurieren müssen, damit dies funktioniert).

Ich würde mir vorstellen, dass ich, wenn ich eine Kopie des geteilten Codes in die Verzeichnisstruktur lege, alle Konfigurationsdateien überschreibe, die SVN verwendet. Dies würde bedeuten, dass die Version in den Verzeichnissen des abhängigen Projekts nicht mehr aktualisiert werden könnte.

Beispiel:

Projekt # 1 muss die Klasse MyExampleClass verwenden, MyExampleClass ist jedoch etwas, das als Teil von Project # 2 definiert und benötigt wird.

    
cwallenpoole 19.03.2009, 16:19
quelle

5 Antworten

11

Sehen Sie sich svn:externals

an     
Joel Coehoorn 19.03.2009, 16:21
quelle
14

Wir haben svn:externals seit einigen Jahren in der Praxis auf geteilten Code angewendet. Wir hatten einige interessante Probleme damit, die Sie wahrscheinlich in Betracht ziehen sollten, bevor Sie es benutzen. Hier ist die Struktur, die wir haben:

%Vor%

Die Verzeichnisse common in include und src in einem Projekt enthalten externe Definitionen, die die allgemeinen Bibliotheken abrufen:

%Vor%

Das Problem, auf das wir gestoßen sind, ist vielschichtig, bezieht sich aber auf die Markierung und Verzweigung unserer Quelle, wenn sich die Projekte im Laufe der Zeit ändern. Die externe Definition, die ich oben gezeigt habe, hat ein paar ziemlich schwerwiegende Probleme, wenn man reproduzierbare Builds haben will:

  1. Es bezieht sich auf ein dynamisches Ziel - trunk .
  2. Es bezieht sich nicht auf eine explizite Revision.

Wenn Sie mit svn copy verzweigen, werden die externen Daten wortwörtlich kopiert, da es sich nur um Eigenschaften handelt, die an das Objekt angehängt sind. Einige der anderen svn-Befehle ( commit , checkout und export ) interpretieren die Eigenschaften tatsächlich. Wenn Sie ein Projekt markieren, möchten Sie den Status des Projekts wirklich für alle Zeit beibehalten. Dies bedeutet, dass Sie die externen Elemente an eine bestimmte Revision "anheften" müssen, sodass Sie die externe Definition so ändern müssen, dass sie explizit auf die gewünschte Revision verweist (z. B. "lib1 -r42 http://.../common/lib1/trunk/src" ). Dies löst eine Facette des Problems.

Wenn Sie mehrere inkompatible Zweige des gemeinsamen Codes pflegen müssen, müssen Sie angeben, welche Verzweigung explizit (möglicherweise) mit der Revision verknüpft werden soll.

Unnötig zu sagen, das kann ein bisschen Kopfschmerzen sein. Glücklicherweise schreibt jemand in Subversion-Land das Skript svncopy.pl , das einiges von diesem Chaos automatisiert. Wir haben (und hatten) immer noch mit einigen der Schwierigkeiten zu kämpfen, die dies in einem im Feld eingesetzten Produkt mit einer Menge gemeinsamen Codes und einem Mandat von drei verschiedenen Versionen im Feld zu jeder Zeit unterstützen.

Wenn Sie diesen Weg einschlagen, sollten Sie sich überlegen, wie Sie die Verknüpfungen beibehalten, wenn die Projekte wachsen und sich verändern. Wir haben festgestellt, dass ein bisschen Zeit, über einen Prozess nachzudenken, hier einen langen Weg zurücklegen wird.

    
D.Shawley 19.03.2009 17:50
quelle
1
___ qstnhdr ___ Was tun mit mehreren Projekten, die von der gleichen Quelle abhängig sind? ___ antwort662919 ___

Legen Sie alle freigegebenen Dateien in einem separaten Ordner in einem der Projekte oder in einem separaten Ordner ab. Dann verwenden Sie externals , um auf diesen Ordner zu verweisen. Das Mischen von Dateien von verschiedenen Orten im selben Ordner ist eine schlechte Idee.

    
___ answer662905 ___

Sehen Sie sich %code%

an     
___ answer685024 ___

Externals, aber beachten Sie dieses Problem:

Subversion aktualisiert externe Daten auf ein Datum

    
___ tag123versioncontrol ___ Versionskontrolle ist die Verwaltung von Änderungen an Dokumenten, Programmen und anderen Informationen, die als Computerdateien gespeichert werden. Verwenden Sie dieses Tag, um allgemeine Fragen zur Verwendung und Anwendbarkeit der Versionskontrolle, VCS-Vergleich, zu markieren. Für die meisten spezifischen VCS-Befehle und -Techniken gibt es spezifische Tags, die bevorzugt werden sollten. ___ tag123svn ___ Verwenden Sie dieses Tag für Fragen zu SVN (Subversion), einem zentralisierten Open-Source-Versionskontrollsystem, das unter der Apache-Lizenz vertrieben wird. ___ answer662934 ___
Mit

svn: externals können Sie Dateien auf Verzeichnisebene einbinden. Wie:

%Vor%

Dann können Sie in Proj2 svn: externals Proj1 und enden mit:

%Vor%

Wenn Sie nun Dateien aus 2 Projekten in einem Ordner haben möchten:

%Vor%

Dann glaube ich nicht, dass SVN das unterstützt.

Ich habe jedoch mit anderen Tools zur Quellcodeverwaltung zusammengearbeitet, mit denen Sie eine einzelne Datei von einem Projekt zu einem anderen "verlinken" können (Borland StarTeam im Speziellen).

    
___ qstntxt ___

Dies ist etwas, auf das ich im letzten Monat zweimal gestoßen bin, und ich bin mir nicht einmal sicher, wie ich das als Google-Suchanfrage formulieren soll.

Ich benutze tatsächlich SVN für all das, aber es scheint, dass dies ein allgemeines Versionierungsproblem sein sollte.

Wir haben zwei Projekte und eines davon hängt vom Code des anderen ab. Aufgrund von API-Problemen ist es nicht pragmatisch, irgendeine Form der Verbindung zwischen den Produkten zu haben (und ich möchte nicht alle Maschinen der Nicht-Codierer konfigurieren müssen, damit dies funktioniert).

Ich würde mir vorstellen, dass ich, wenn ich eine Kopie des geteilten Codes in die Verzeichnisstruktur lege, alle Konfigurationsdateien überschreibe, die SVN verwendet. Dies würde bedeuten, dass die Version in den Verzeichnissen des abhängigen Projekts nicht mehr aktualisiert werden könnte.

Beispiel:

Projekt # 1 muss die Klasse MyExampleClass verwenden, MyExampleClass ist jedoch etwas, das als Teil von Project # 2 definiert und benötigt wird.

    
___ answer663283 ___

Wir haben %code% seit einigen Jahren in der Praxis auf geteilten Code angewendet. Wir hatten einige interessante Probleme damit, die Sie wahrscheinlich in Betracht ziehen sollten, bevor Sie es benutzen. Hier ist die Struktur, die wir haben:

%Vor%

Die Verzeichnisse %code% in %code% und %code% in einem Projekt enthalten externe Definitionen, die die allgemeinen Bibliotheken abrufen:

%Vor%

Das Problem, auf das wir gestoßen sind, ist vielschichtig, bezieht sich aber auf die Markierung und Verzweigung unserer Quelle, wenn sich die Projekte im Laufe der Zeit ändern. Die externe Definition, die ich oben gezeigt habe, hat ein paar ziemlich schwerwiegende Probleme, wenn man reproduzierbare Builds haben will:

  1. Es bezieht sich auf ein dynamisches Ziel - %code% .
  2. Es bezieht sich nicht auf eine explizite Revision.

Wenn Sie mit %code% verzweigen, werden die externen Daten wortwörtlich kopiert, da es sich nur um Eigenschaften handelt, die an das Objekt angehängt sind. Einige der anderen svn-Befehle ( %code% , %code% und %code% ) interpretieren die Eigenschaften tatsächlich. Wenn Sie ein Projekt markieren, möchten Sie den Status des Projekts wirklich für alle Zeit beibehalten. Dies bedeutet, dass Sie die externen Elemente an eine bestimmte Revision "anheften" müssen, sodass Sie die externe Definition so ändern müssen, dass sie explizit auf die gewünschte Revision verweist (z. B. %code% ). Dies löst eine Facette des Problems.

Wenn Sie mehrere inkompatible Zweige des gemeinsamen Codes pflegen müssen, müssen Sie angeben, welche Verzweigung explizit (möglicherweise) mit der Revision verknüpft werden soll.

Unnötig zu sagen, das kann ein bisschen Kopfschmerzen sein. Glücklicherweise schreibt jemand in Subversion-Land das Skript %code% , das einiges von diesem Chaos automatisiert. Wir haben (und hatten) immer noch mit einigen der Schwierigkeiten zu kämpfen, die dies in einem im Feld eingesetzten Produkt mit einer Menge gemeinsamen Codes und einem Mandat von drei verschiedenen Versionen im Feld zu jeder Zeit unterstützen.

Wenn Sie diesen Weg einschlagen, sollten Sie sich überlegen, wie Sie die Verknüpfungen beibehalten, wenn die Projekte wachsen und sich verändern. Wir haben festgestellt, dass ein bisschen Zeit, über einen Prozess nachzudenken, hier einen langen Weg zurücklegen wird.

    
___
svinto 19.03.2009 16:23
quelle
1

Externals, aber beachten Sie dieses Problem:

Subversion aktualisiert externe Daten auf ein Datum

    
Jim T 26.03.2009 09:17
quelle
0
Mit

svn: externals können Sie Dateien auf Verzeichnisebene einbinden. Wie:

%Vor%

Dann können Sie in Proj2 svn: externals Proj1 und enden mit:

%Vor%

Wenn Sie nun Dateien aus 2 Projekten in einem Ordner haben möchten:

%Vor%

Dann glaube ich nicht, dass SVN das unterstützt.

Ich habe jedoch mit anderen Tools zur Quellcodeverwaltung zusammengearbeitet, mit denen Sie eine einzelne Datei von einem Projekt zu einem anderen "verlinken" können (Borland StarTeam im Speziellen).

    
CodingWithSpike 19.03.2009 16:26
quelle

Tags und Links