2008-09-03 8 views
4

Ich habe eine interessante Entwicklungssituation. Der Client und der Deployment Server befinden sich in einer Firewall ohne Zugriff auf den Subversion-Server. Die Entwickler befinden sich jedoch außerhalb der Firewall und können den Subversion-Server verwenden. Im Moment ist die Lösung, die ich ausgearbeitet habe, meine lokale Kopie des Codes zu aktualisieren und dann die zuletzt aktualisierten Dateien mit UnleashIT herauszuziehen.Subversion Partial Export

Die Frage ist, wie man nur die aktualisierten Dateien aus Subversion herausholt, damit sie physisch durch die Firewall transportiert und auf dem Deployment Server abgelegt werden können.

Ich mache mir keine Sorgen, dass ich versuche, das Firewall-Setup zu ändern oder einen einfacheren Weg aus der Firewall heraus zum Subversion-Server zu finden. Ich bin nur daran interessiert, einen partiellen Export aus dem Repository der zuletzt geänderten Dateien zu erhalten.

Gibt es noch weitere Vorschläge?

Antwort gefunden: Zusätzlich zu der Antwort, die ich als Antwort markiert, habe ich auch die folgenden hier in der Lage sein, dies zu tun von TortoiseSVN gefunden:

von http://svn.haxx.se/tsvn/archive-2006-08/0051.shtml

* select the two revisions 
* right-click, "compare revisions" 
* select all files in the list 
* right-click, choose "export to..." 

Antwort

1

Ich habe gefunden rsync extrem nützlich für die Synchronisierung von Verzeichnisbäumen über mehrere Systeme hinweg. Wenn Sie von einer Entwicklungs-Workstation aus Shell-Zugriff auf Ihren Server haben, können Sie regelmäßig Code lokal auschecken und rsync ausführen, wodurch nur die Dateien übertragen werden, die sich auf dem Server geändert haben.

(Dies setzt eine Unix-ähnliche Umgebung auf dem Entwicklungs Workstations. Cygwin wird gut funktionieren.)

cd deploy 
svn update 
rsync -a . server:webdir/ 

Ihre Frage klingt wie Sie eigentlich keinen direkten Netzwerkzugriff von Ihren Entwicklungsarbeitsstationen haben Sie zu Ihrem Server, und was Sie wirklich suchen, ist eine Möglichkeit, Subversion dazu zu bringen, Ihnen mitzuteilen, welche Dateien sich geändert haben. svn export unterstützt ein Argument, mit dem Sie nur die Dateien auschecken können, die sich zwischen bestimmten Revisionen geändert haben. Von der Svn Hilfe:

-r [--revision] arg  : ARG (some commands also take ARG1:ARG2 range) 
          A revision argument can be one of: 
           NUMBER  revision number 
           '{' DATE '}' revision at start of the date 
           'HEAD'  latest in repository 
           'BASE'  base rev of item's working copy 
           'COMMITTED' last commit at or before BASE 
           'PREV'  revision just before COMMITTED 

Sie müssen verfolgen, was die neueste Revision Sie auf den Server kopiert haben. Unter der Annahme, es ist SVN Revision xxxx:

svn export -r xxxx:HEAD http://svn/ 

Dann kopieren Sie einfach der Inhalt der Verzeichnis auf dem Server auf den vorhandenen Dateien bereitstellen.

Dies wird nicht mit gelöschten Dateien umgehen, die sich in einigen Umgebungen als problematisch erweisen können.

-1

Sie don‘ t Informationen darüber, was durch die Firewall erlaubt ist. Ich bin mit UnleashIT nicht vertraut.

Ich denke, Sie könnten ein Skript haben, das von SVN in einen Ordner auf dem SVN-Server exportiert. Das Skript reißt dann die exportierten Dateien. Sie können die ZIP-Datei dann wie gewünscht transportieren und auf den Deployment Server extrahieren.

TortoiseSVN unterstützt Proxy-Server, so dass Sie einen solchen von der Client-Seite verwenden können?

0

Sie könnten versuchen, mit dem svnadmin dump Befehl, der mit den Subversion-Binärdateien ausgeliefert wird, herumzuspielen. Sie können diesen Befehl verwenden, um das gesamte Repository in eine Datei, nur eine bestimmte Revision oder eine Reihe von Revisionen zu speichern. Verwenden Sie dann svnadmin load, um die Dump-Datei in ein neues, sauberes Repository zu laden.

Keine perfekte Lösung, da es in Bezug auf das Repository und nicht einzelne Dateien funktioniert.

1

Also, wenn ich das richtig verstehe ...

Angenommen, Sie haben ein Repository, das wie folgt aussieht: Die

/ 
|+-DIR1 
| |- FILEa 
| |- FILEb 
|+-DIR2 
| |- FILEc 
| |- FILEd 
|- FILEe 
|- FILEf 

Und lassen Sie sagen, dass Sie Dateien, um sie aktualisieren zurück FILEa, FILEc und FILEf und verpflichten in das Repository. Was Sie dann aus dem Repository exportieren möchten, ist eine Struktur, die wie folgt aussieht:

/ 
|+-DIR1 
| |- FILEa 
|+-DIR2 
| |- FILEc 
|- FILEf 

Ist das richtig?

0

Sie möchten nur die Leute, die hinter der Firewall sind, um auf die neuesten Dateien zugreifen zu können, die an Subversion gebunden sind, nicht wahr?

Konnten Sie eine schreiben, die eine Methode (möglicherweise scp oder ftp) verwendet, um die Akten zum entfernten Zeitpunkt an den Remotestandort zu senden?

0

Die Subversion Haken sieht aus wie es viel verspricht. Aber wie wäre es, wenn ich relativ uninformiert darüber wäre, wie man den Hook scripte, wie würde ich die Dateien, die committed wurden, herausziehen und sie irgendwo FTP betreiben, um die Verzeichnisstruktur zu erhalten?

Wenn ich das tun könnte, dann kann jemand innerhalb der Firewall die Dateien zum Deployment Server herunterziehen und wir wären gut zu gehen.

2

svn export akzeptiert keinen Revisionsbereich, probieren Sie es aus.

Eine mögliche Lösung ist die Liste der geänderten Dateien mit bekommen:

svn diff --summarize -rXXX http://svn/... 

und dann jeder von ihnen zu exportieren.