2012-05-24 2 views
19

Ich möchte alle modifizierten Dateien außer einem mit Subversion committen.Wie alle Dateien außer einem mit SVN committen

So, hier ist das Szenario:

svn ci -m "Commit 1" file1 file2 file3 
svn ci -m "Commit 2" file4 

Aber wenn eine große Anzahl von Dateien, ich versuche, meine Arbeit zu vereinfachen:

$ svn st 
M file1 
M file2 
M file3 
M file4 

ich so etwas tun kann

svn ci -m "Commit 1" `svn st | awk '{print $2}' | grep -v file4` 
svn ci -m "Commit 2" file4 

Diese Lösung ist sehr zerbrechlich, weil mit diesem Szenario nicht funktioniert:

$ svn st 
M file1 
M file2 
D file3 
A + file4 

Ich denke, dass SVN keine integrierte Lösung für mein Problem hat, aber ich bin mir nicht sicher. Irgendein anderer Ansatz?

Antwort

21

Option 1, AWK:

svn ci -m "Commit 1" `svn st | awk '{print $NF}' | grep -v file4` 
svn ci -m "Commit 2" file4 

Option 2, --targets:

svn ci -m "Commit 1" --targets filesToCommit.txt 
svn ci -m "Commit 2" file4 

Option 3, --channelist:

svn changelist my-changelist file1 file2 file3 
svn ci -m "Commit 1" --changelist my-changelist 
svn ci -m "Commit 2" file4 
2

Obwohl ich bin sicher, dass Sie eine Lösung erarbeiten könnten, wie Sie eine komplexere awk Befehlszeilen schlagen die Verwendung, da wir über nur eine Datei im Gespräch sind, warum nicht

  1. Kopieren Sie die Datei in einem temporären Lage
  2. svn revert die geänderte Datei die ursprüngliche zurück
  3. verpflichten sich die ganze Repository
  4. Kopieren Sie die geänderte Datei zurück
zu bekommen

Einfach, einfach, schnell.

4

Sie können Ihren Ansatz etwas verbessern, indem Sie Ihre Dateien mit einem Skript zu einem change list hinzufügen und es committen. Sie können die Liste überprüfen, um sicherzustellen, dass sie die richtigen Elemente vor der Übergabe enthält.

Siehe svn changelist --help und --changelist Option in svn ci --help.

13

Sie können es wie folgt tun:

svn diff file4 > tmp.patch 
svn revert file4 
svn ci -m "Commit 1" 
svn patch tmp.patch 

An dieser Stelle alle Dateien verpflichtet sind außer file4

+1

'svn patch' in 1.7 hinzugefügt wurde. Ich habe 'patch -p0 -i tmp.patch' anstelle der letzten Zeile in diesem Beispiel verwendet. – Rich

0

Nur gefilterte Liste von Dateien zu committen.

svn ci `ls | grep -v file4` 
4

commiting alle außer einem mit Änderungslisten:

svn changelist my-list -R . 
svn changelist --remove file4 
svn ci -m "Commit 1" --changelist my-list 
svn ci -m "Commit 2" file4