Frage

Ich habe eine etwas interessante Entwicklungssituation.Der Client und der Bereitstellungsserver befinden sich innerhalb einer Firewall und haben keinen Zugriff auf den Subversion-Server.Doch die Entwickler befinden sich außerhalb der Firewall und können den Subversion-Server nutzen.Die Lösung, die ich derzeit gefunden habe, besteht darin, meine lokale Kopie des Codes zu aktualisieren und dann die zuletzt aktualisierten Dateien mit UnleashIT abzurufen.

Die Frage ist, wie man nur die aktualisierten Dateien aus Subversion herausbekommt, damit sie physisch durch die Firewall transportiert und auf den Bereitstellungsserver gestellt werden können.

Ich mache mir keine Sorgen darüber, dass ich versuche, die Firewall-Einrichtung zu ändern oder einen einfacheren Weg zu finden, um von innerhalb der Firewall auf den Subversion-Server zu gelangen.Ich bin nur an einer Möglichkeit interessiert, einen teilweisen Export der zuletzt geänderten Dateien aus dem Repository zu erhalten.

Gibt es noch andere Vorschläge?

Antwort gefunden:Zusätzlich zu der Antwort, die ich als Antwort markiert habe, habe ich hier auch Folgendes gefunden, um dies von TortoiseSVN aus tun zu können:

aus 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..." 
War es hilfreich?

Lösung

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

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

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

Ihre Frage hört sich so an, als hätten Sie tatsächlich keinen direkten Netzwerkzugriff von Ihren Entwicklungsarbeitsstationen auf Ihren 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 zwischen bestimmten Revisionen geändert wurden.Aus 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 im Auge behalten, welche Revision Sie zuletzt auf den Server kopiert haben.Angenommen, es handelt sich um die SVN-Revision xxxx:

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

Dann kopieren Sie einfach den Inhalt der einsetzen Verzeichnis auf Ihrem Server zusätzlich zu den vorhandenen Dateien.

Gelöschte Dateien werden dadurch nicht verarbeitet, was sich in manchen Umgebungen als problematisch erweisen kann.

Andere Tipps

svn export akzeptiert keinen Revisionsbereich, probieren Sie es aus.

Eine mögliche Lösung besteht darin, die Liste der geänderten Dateien abzurufen mit:

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

und dann jedes davon exportieren.

Also wenn ich das richtig verstehe...

Nehmen wir an, Sie haben ein Repository, das so aussieht:

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

Nehmen wir an, Sie aktualisieren Dateien FILEa, FILEc, Und FILEf und übertragen Sie sie zurück 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?

Die Subversion-Hooks scheinen vielversprechend zu sein.Aber da ich relativ uninformiert darüber bin, wie man den Hook skriptet, wie soll ich die Dateien, die festgeschrieben wurden, herausziehen und sie per FTP an einen beliebigen Ort übertragen, wobei die Verzeichnisstruktur erhalten bleibt?

Wenn ich das könnte, könnte jemand innerhalb der Firewall die Dateien auf den Bereitstellungsserver herunterziehen, und wir könnten loslegen.

Du könntest versuchen, damit herumzuspielen svnadmin-Dump Befehl, der mit den Subversion-Binärdateien geliefert wird.Mit diesem Befehl können Sie das gesamte Repository, nur eine bestimmte Revision oder eine Reihe von Revisionen in eine Datei sichern.Dann benutze svnadmin laden um die zu laden dump-Datei in ein neues, sauberes Repository.

Keine perfekte Lösung, da sie im Hinblick auf das Repository und nicht auf einzelne Dateien funktioniert.

Sie möchten einfach nur, dass die Leute, die sich hinter der Firewall befinden, auf die neuesten Dateien zugreifen können, die an Subversion übertragen wurden, oder?

Könnten Sie eine schreiben? SVN-Hook-Skript das eine Methode (vielleicht scp oder ftp) verwendet, um die Dateien zum Zeitpunkt ihrer Festschreibung an den Remote-Standort zu senden?

Wenn Sie die Revisionen mit Tags versehen, kann dies hilfreich sein Github SVN-Diff-Export

Sie geben keine Auskunft darüber, was durch die Firewall zugelassen wird.Ich kenne UnleashIT nicht.

Ich vermute, Sie könnten ein Skript haben, das von SVN in einen Ordner auf dem SVN-Server exportiert.Anschließend komprimiert das Skript die exportierten Dateien.Anschließend können Sie die ZIP-Datei beliebig transportieren und auf den Deployment-Server extrahieren.

TortoiseSVN unterstützt Proxyserver, sodass Sie einen davon auf der Clientseite verwenden können?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top