2012-05-24 13 views
19

Chcę zatwierdzić wszystkie zmodyfikowane pliki poza jednym za pomocą Subversion.W jaki sposób zatwierdzam wszystkie pliki z wyjątkiem jednego z SVN

Tak oto scenariusz:

$ svn st 
M file1 
M file2 
M file3 
M file4 

mogę zrobić coś takiego:

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

Ale gdy duża liczba plików, Próbuję uprościć pracę:

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

To rozwiązanie jest bardzo delikatne, ponieważ przy takim scenariuszu nie działa:

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

Myślę, że SVN nie ma wbudowanego rozwiązania mojego problemu, ale nie jestem pewien. Jakieś inne podejście?

Odpowiedz

21

Opcji 1, awk:

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

Wariant 2, --targets:

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

Opcja 3, --changelist:

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

Choć jestem pewien, że można wypracować rozwiązanie jak proponujesz stosując bardziej skomplikowany wiersz polecenia awk, ponieważ mówimy o jednym pliku, dlaczego nie

  1. Skopiuj plik tymczasowy lokalizacja
  2. svn revert zmodyfikowany plik, aby uzyskać oryginalne powrotem
  3. popełnienia cały repozytorium
  4. Skopiuj zmodyfikowany plik z powrotem

Prosty, łatwy, szybki.

4

Możesz nieco poprawić swoje podejście, dodając pliki ze skryptem do change list i zatwierdzając je. Możesz sprawdzić listę, aby upewnić się, że zawiera właściwe elementy przed zatwierdzeniem.

Zobacz opcję svn changelist --help i w svn ci --help.

13

Można to zrobić tak:

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

W tym momencie wszystkie pliki są zaangażowani wyjątkiem file4

+1

'svn patch' został dodany w 1.7. Użyłem 'łatki -p0 -i tmp.patch' zamiast ostatniej linii w tym przykładzie. – Rich

0

Po prostu zatwierdź przefiltrowaną listę plików.

svn ci `ls | grep -v file4` 
4

popełnienia wszystkich z wyjątkiem jednego z wykorzystaniem list zmian:

svn changelist my-list -R . 
svn changelist --remove file4 
svn ci -m "Commit 1" --changelist my-list 
svn ci -m "Commit 2" file4 
Powiązane problemy