SVN Festschreiben bestimmter Dateien

219

Gibt es eine Möglichkeit, nur eine Liste bestimmter Dateien festzuschreiben (eq nur eine der Listen der Dateien, die SVN festschreiben möchte).

Ich arbeite an MAC OS X unter Terminal ohne Benutzeroberfläche.

0100110010101
quelle

Antworten:

331

Sicher. Listen Sie einfach die Dateien auf:

$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png

Mir ist keine Möglichkeit bekannt, eine bestimmte Gruppe von Dateien zu ignorieren. Wenn die Dateien, die Sie festschreiben möchten, von der Shell leicht aufgelistet werden können, können Sie Folgendes verwenden:

$ svn ci -m "No longer sets printer on fire" printer-driver/*.c

Sie können den Befehl svn auch die Liste der zu festschreibenden Dateien aus einer Datei lesen lassen:

$ svn ci -m "Now works" --targets fix4711.txt
entspannen
quelle
1
Also, im Grunde sollte ich die Dateien explizit benennen? Ich kann nicht einfach sagen, diese bestimmte Datei nicht zu berühren?
0100110010101
16
Sie könnten tun: svn st | Schneiden Sie -c 9-> targets.txt aus, bearbeiten Sie dann die Datei targets.txt, um die spezifische Datei zu entfernen, und verwenden Sie den Parameter --targets, um die Dateiliste anzugeben.
Rein
17
Ich denke, meine neue Herausforderung besteht darin , einen Fehler zu erstellen, der den Drucker in Brand setzt.
James Webster
3
Es ist erbärmlich und lächerlich gleichermaßen. Kein Bereitstellungsbereich. svn addwird verwendet, um Dateien zu Repositorys hinzuzufügen.
Kandinski
68

Verwenden Sie Änderungslisten. Der Vorteil gegenüber der Angabe von Dateien besteht darin, dass Sie vor dem Festschreiben alles visualisieren und bestätigen können, was Sie möchten.

$ svn changelist fix-issue-237 foo.c 
Path 'foo.c' is now a member of changelist 'fix-issue-237'.

Nachdem dies erledigt ist, hält svn die Dinge jetzt für Sie getrennt. Dies ist hilfreich, wenn Sie mit mehreren Änderungen jonglieren

$ svn status
A       bar.c
A       baz.c

--- Changelist 'fix-issue-237':
A       foo.c

Sagen Sie ihm schließlich, er soll festlegen, was geändert werden soll.

$ svn commit --changelist fix-issue-237 -m "Issue 237"
jcwenger
quelle
+1 für Punktantwort. Changelisten sind wirklich der richtige Weg!
Miro Markaravanes
1
Wenn Sie einer Änderungsliste neue Verzeichnisse hinzufügen möchten, vergessen Sie nicht, zuerst svn add zu verwenden und dannsvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler
Tatsächlich können Änderungslisten nicht mit neuen Verzeichnissen verwendet werden ... "Subversion unterstützt derzeit nicht die Verwendung von Änderungslisten mit Verzeichnissen."
Fabian Schmengler
1
@fschmengler: SVN ist ein schreckliches Werkzeug. Ich habe nur versucht, das Beste aus dem schlechten Job zu machen, den es macht. Wechseln Sie zu Git. : P
jcwenger
10
Ich bin vor vielen Jahren zu Git gewechselt und habe nie zurückgeschaut. War gezwungen, svn erneut für einen Kunden zu verwenden, fühlt es sich an, als würde man mit Ball und Kette an beiden Beinen laufen
Fabian Schmengler
38

Grundsätzlich platzieren Sie die Dateien, die Sie festschreiben möchten, in der Befehlszeile

svn ci file1 file2 dir1/file3
Wienczny
quelle
1
Also, im Grunde sollte ich die Dateien explizit benennen? Ich kann nicht einfach sagen, diese bestimmte Datei nicht zu berühren?
0100110010101
2
Wenn es ohne Argumente ausgeführt wird, schreibt svn alle geänderten Dateien fest. Wenn es mit einer Datei als Argument ausgeführt wird, wird diese Datei festgeschrieben. Wenn es mit einem Verzeichnis ausgeführt wird, werden alle geänderten Dateien im Verzeichnis festgeschrieben
Wienczny
22

Aufgrund meines Subversion-Zustands musste ich kreativ werden. svn stzeigte M, Aund ~Zustände. Ich wollte nur Mund Aso ...

svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt

Dieser Befehl besagt, dass alle von svn stdiesem ausgegebenen Zeilen mit Moder beginnen sollen A, wobei ein Leerzeichen verwendet wird, und dann die Spalten 8 bis zum Ende abgerufen werden sollen. Legen Sie das in targets.txt ab und überschreiben Sie es.

Ändern Sie dann targets.txt, um die Dateiliste weiter zu bereinigen. Führen Sie dann die folgenden Schritte aus, um Folgendes festzuschreiben:

svn ci -m "My commit message" --targets targets.txt

Wahrscheinlich nicht der häufigste Anwendungsfall, aber hoffentlich hilft es jemandem.

Eric
quelle
2
Sie können auch verwenden, um grep -v '^~'auf die schwarze Liste zu setzen, was Sie möchten.
Martin Konecny
7

versuchen Sie dieses Skript ..

#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`; 
     do LIST="${LIST} $f $NULL on"; 
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
Abhijit Dhariya
quelle
1

Ich erstelle einen (Unter-) Ordner mit dem Namen "hide" und verschiebe die Datei, die ich nicht habe Festschreibung möchte. Dann mache ich mein Commit und ignoriere die Beschwerde über die fehlende Datei. Verschieben Sie dann die ausgeblendete Datei von "Ausblenden" zurück nach ./

Ich kenne keinen Nachteil dieser Taktik.

George Wyche
quelle