2012-05-24 6 views
19

Voglio salvare tutti i file modificati tranne uno utilizzando Subversion.Come salvare tutti i file tranne uno con SVN

: ecco lo scenario:

$ svn st 
M file1 
M file2 
M file3 
M file4 

posso fare qualcosa di simile:

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

Ma quando un gran numero di file, sto cercando di semplificare il mio lavoro:

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

Questa soluzione è molto fragile, perché con questo scenario non funziona:

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

Penso che SVN non abbia una soluzione integrata per il mio problema, ma non ne sono sicuro. Qualche altro approccio?

risposta

21

Opzione 1, AWK:

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

Opzione 2, --targets:

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

Opzione 3, --changelista:

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

Anche se sono sicuro che si potrebbe trovare una soluzione come voi proponete di utilizzare una più complessa linea di awk di comando, dal momento che stiamo parlando di un solo file, perché non

  1. Copiare il file in una temporanea posizione
  2. svn revert il file modificato per ottenere il posteriore originale
  3. impegnare l'intero repository
  4. Copiare il file modificato indietro

Semplice, facile, veloce.

4

È possibile migliorare il proprio approccio aggiungendo i file con uno script a change list e confermandolo. Puoi controllare l'elenco per assicurarti che contenga gli elementi giusti prima di impegnarti.

Vedere l'opzione svn changelist --help e --changelist in svn ci --help.

13

Si può fare in questo modo:

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

A questo punto tutti i file sono impegnati ad eccezione file4

+1

'patch' svn è stato aggiunto in 1.7. Ho usato 'patch -p0 -i tmp.patch' invece della riga finale in questo esempio. – Rich

0

Basta eseguire il commit dell'elenco dei file filtrati.

svn ci `ls | grep -v file4` 
4

commettere tutti tranne uno che utilizzano changelists:

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