Ich suche nach einer guten Möglichkeit, alle nicht versionierten Dateien in einer Arbeitskopie automatisch zu meinem SVN-Repository hinzuzufügen.
Ich habe einen Live-Server, der einige Dateien erstellen kann, die unter Quellcodeverwaltung stehen sollten. Ich hätte gerne ein kurzes Skript, das ich ausführen kann, um diese automatisch hinzuzufügen, anstatt sie einzeln durchzugehen und hinzuzufügen.
Auf meinem Server wird Windows Server 2003 ausgeführt, sodass eine Unix-Lösung nicht funktioniert.
svn
command-line
windows-server-2003
JerSchneid
quelle
quelle
Antworten:
svn add --force * --auto-props --parents --depth infinity -q
Toller Tipp! Eine Bemerkung: Meine Eclipse fügt der Ignorierliste automatisch neue Dateien hinzu. Es kann eine Frage der Konfiguration sein, aber trotzdem: Es gibt die
--no-ignore
Option, die hilft.Danach können Sie Folgendes festlegen:
quelle
alias magic="svn add --force * --auto-props --parents --depth infinity -q"
- Erklärt:svn help add
*
am Ende setzen, sonst würde es nicht funktionieren (Dies ist eine andere Frage als meine, aber es gibt dort eine Antwort, die zu dieser Frage gehört:
quelle
Was funktioniert ist folgendes:
Fügt den Inhalt von Unterverzeichnissen hinzu.
Fügt keine ignorierten Dateien hinzu.
Listet auf, welche Dateien hinzugefügt wurden.
Der Punkt im Befehl gibt das aktuelle Verzeichnis an. Dies kann durch einen bestimmten Verzeichnisnamen oder Pfad ersetzt werden, wenn Sie ein anderes Verzeichnis als das aktuelle hinzufügen möchten.
quelle
.\*
oder wenn sich svn root in einem anderen Verzeichnis befindetstuff\svn_root\*
.stuff\svn_root
keine Dateien in Unterverzeichnissen hinzugefügt (zstuff\svn_root\already_in_svn\not_in_svn.txt
. B. in ). Daher der Stern am Ende.Das hat bei mir funktioniert:
( Quelle )
Da Sie Ihr Problem für Windows bereits gelöst haben, handelt es sich um eine UNIX-Lösung (nach Sam). Ich habe hier hinzugefügt, da ich denke, dass es immer noch nützlich ist für diejenigen, die diese Frage erreichen und nach dem gleichen Thema fragen (da der Titel nicht das Schlüsselwort "WINDOWS" enthält).
Hinweis (Februar 2015): Wie von "bdrx" kommentiert, könnte der obige Befehl auf folgende Weise weiter vereinfacht werden:
quelle
awk '/^[?]/{print $2}'
; Der zusätzliche Grep-Prozess ist nicht erforderlich.Dadurch werden alle nicht versionierten Dateien im aktuellen Verzeichnis und alle versionierten untergeordneten Verzeichnisse hinzugefügt.
quelle
Diese Methode sollte Dateinamen verarbeiten, die eine beliebige Anzahl / Kombination von Leerzeichen enthalten ...
Hier ist eine Erklärung, was dieser Befehl tut:
Verwenden Sie das Argument -i für xargs, um Dateinamen mit Leerzeichen in 'svn add' importieren zu können. Grundsätzlich setzt -i {} als Platzhalter, damit wir die "Zeichen um den von 'svn verwendeten Dateinamen setzen können hinzufügen'.
Ein Vorteil dieser Methode besteht darin, dass Dateinamen mit Leerzeichen behandelt werden sollen.
quelle
TortoiseSVN verfügt über diese integrierte Funktion, wenn Sie eine Lösung ohne Befehlszeile verwenden möchten. Klicken Sie einfach mit der rechten Maustaste auf den Ordner der obersten Ebene und wählen Sie Hinzufügen ...
quelle
Dies ist wie im SVN-Buch dokumentiert und das einfachste und funktioniert perfekt für mich
http://svnbook.red-bean.com/de/1.6/svn.ref.svn.c.add.html
quelle
Verwenden:
quelle
svn status | cut -d ? -f 2 -s | xargs svn add
Ich benutze immer:
Kopieren Einfügen
quelle
Da dieser Beitrag mit Windows markiert ist, dachte ich, ich würde eine Lösung für Windows ausarbeiten. Ich wollte den Prozess automatisieren und habe eine Fledermausdatei erstellt. Ich habe mich geweigert, eine console.exe in C # zu erstellen.
Ich wollte alle Dateien oder Ordner hinzufügen, die nicht zu meinem Repository hinzugefügt wurden, wenn ich mit dem Festschreibungsprozess beginne.
Das Problem bei vielen Antworten ist, dass sie nicht versionierte Dateien auflisten, die gemäß meiner Ignorierliste in TortoiseSVN ignoriert werden sollten .
Hier ist meine Hook-Einstellung und Batch-Datei, die das macht
Schildkrötenhaken-Skript:
svnadd.bat
quelle
Innerhalb dieser Implementierung treten Probleme auf, wenn Ihre Ordner / Dateinamen mehr als ein Leerzeichen haben (siehe unten):
solche Fälle werden durch einfache abgedeckt:
quelle
Wenn Sie Linux oder Cygwin oder MinGW in Windows verwenden, können Sie bash-ähnliche Lösungen wie die folgenden verwenden. Im Gegensatz zu anderen ähnlichen hier vorgestellten werden hier Dateinamenräume berücksichtigt:
quelle
Nachdem ich einige Zeit damit verbracht hatte, herauszufinden, wie man nur einige der Dateien rekursiv hinzufügt, dachte ich, es wäre gültig zu teilen, was für mich funktioniert hat:
Hier geht eine Erklärung.
Der erste Befehl fügt alle Verzeichnisse hinzu. Der zweite Befehl fügt nur die Dateien entsprechend den angegebenen Mustern hinzu.
Lassen Sie mich weitere Details geben:
Im zweiten Befehl sind die einzigen Unterschiede der Befehl dir und der Befehl svn. Ich denke, es ist klar genug.
quelle
Sie können den Befehl verwenden
oder
Wenn Ihre Dateien / Verzeichnisse nicht rekursiv hinzugefügt werden. Dann überprüfen Sie dies.
Das rekursive Hinzufügen ist die Standardeigenschaft . Sie können im SVN-Buch sehen .
Das Problem kann in Ihrer Ignorierliste oder in globalen Eigenschaften liegen.
Ich habe Lösung Google Issue Tracker
Überprüfen Sie die globalen Eigenschaften, um den Stern (*) zu ignorieren.
TortoiseSVN > Properties
.svn:global-ignores with a value of *
star(*)
haben, wird das rekursive Hinzufügen ignoriert. Entfernen Sie also diese Eigenschaft.Überprüfen Sie das globale Ignoriermuster, um den Stern (*) zu ignorieren.
TortoiseSVN > Settings > General
.star(*)
, entfernen Sie diese Eigenschaft.Dieser Typ erklärte auch, warum diese Eigenschaft in meinem Projekt hinzugefügt wurde.
Am ähnlichsten ist es, dass jemand mit der rechten Maustaste auf eine Datei ohne Erweiterung geklickt und TortoiseSVN -> SVN Ignore -> * (rekursiv) ausgewählt und diese dann festgeschrieben hat.
quelle
Sie können den folgenden Befehl unter Linux eingeben:
quelle
Seit er Windows spezifiziert hat, wo awk & sed nicht Standard sind:
oder in einer Batch-Datei:
quelle
Dies ist die träge und gefährliche Methode, um ein Verzeichnis mit SVN einschließlich neuer Dateien zu synchronisieren:
Obwohl dies zur Not funktionieren kann, kann es auch schwerwiegende Folgen haben. Beispielsweise verliert SVN häufig den Überblick über den Verlauf einer Datei.
Der ideale Weg, ein Verzeichnis zu synchronisieren, besteht darin, diff zu können und dann den svn-Patch zu verwenden. Dies weicht jedoch von den Formaten im Befehl diff ab, und der Befehl svn diff vergleicht die Unterschiede im Arbeitsverzeichnis und nicht die Unterschiede auf Dateisystemebene.
quelle
Ich glaube, ich habe etwas Ähnliches gemacht mit:
aber nicht sicher, ob mein Gedächtnis korrekt ist ;-p
quelle