„Usuń” plik do svn przed zatwierdzeniem

200

Byłem w trakcie robienia rekursywnego dodawania / zatwierdzania svn i dołączono folder, który nie miał odpowiednich właściwości ignorowania. Mam teraz około 100 przesłanych plików binarnych w wersji, ale jeszcze nie popełniłem.

Jak najłatwiej to cofnąć bez usuwania wszystkich dokumentów?

Lowgain
źródło

Odpowiedzi:

244

Posługiwać się svn revert --recursive folder_name


Ostrzeżenie

svn revertjest z natury niebezpieczny, ponieważ jego jedynym celem jest wyrzucenie danych - mianowicie niezatwierdzonych zmian. Po przywróceniu Subversion nie pozwala odzyskać tych niezatwierdzonych zmian.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html

Julien Lebosquain
źródło
12
Aby rozwinąć tę revertkwestię - bez określonej wersji cofa wszelkie zmiany, które wystąpiły od ostatniego pobrania, w tym dodawanie / usuwanie zmian w harmonogramie dla określonych plików.
Bursztyn
gdzie nazwa_folderu jest folderem nadrzędnym folderu, w którym wykonano polecenie „Dodaj”
MacGyver,
28
Ta odpowiedź jest niebezpiecznie niepoprawna - spowoduje zmianę scenariusza poprzez USUNIĘCIE LOKALNYCH KOPII PLIKÓW. Poniższa odpowiedź Briana Lacy'ego jest znacznie lepsza.
Henry Henrinson
6
Chłopaki, to odpowiada na pierwotne pytanie: plik lub folder, który został dodany, a następnie cofnięty, wraca tylko do wersji bez wersji, bez usuwania. Właśnie o to pyta pytanie. Jeśli użyjesz go na zmodyfikowanych plikach, oczywiście to je przywraca: ale to nie było pytanie. To nawet bardzo szczególny przypadek użycia pokazany na stronie, do której prowadzi link!
Julien Lebosquain
2
@JulienLebosquain Ok, myślę, że rozumiem to zdanie inaczej: bez usuwania wszystkich dokumentów . Niestety svn revertusuwa również nowo dodane zmiany w kopii roboczej, przywracając ostatnią HEADwersję. Usunąłem moją opinię, ale nadal uważam, że ostrzeżenie jest ważne.
jpaugh
145

svn rm --keep-local folder_name

Uwaga: W svn 1.5.4 svn rm usuwa niewersjonowane pliki, nawet jeśli podano opcję --keep-local. Aby uzyskać więcej informacji, zobacz http://svn.haxx.se/users/archive-2009-11/0058.shtml .

Brian Lacy
źródło
9
Warto o tym wiedzieć, ponieważ pozwala to po prostu cofnąć „dodawanie svn” bez utraty zmian!
Ryan H.,
1
Czy na pewno SVN 1.5.4 usuwa niewersjonowane pliki? Raportu nie można było odtworzyć i nie ma na ten temat innego e-maila.
Quentin Pradet
4
To lepsza odpowiedź, jeśli chcesz „usunąć” pliki, ale nadal je zachować. Po tym poleceniu pliki będą nadal dostępne z? status.
Robin Zimmermann
32

Wypróbuj svn revert filenamekażdy plik, który nie jest potrzebny i nie został jeszcze zatwierdzony. Lub alternatywnie wykonaj svn revert -R folderdla problematycznego folderu, a następnie ponownie wykonaj operację z poprawną konfiguracją ignorowania.

Z dokumentacji:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops
Bobah
źródło
4
Nie! Cofanie jest niebezpieczne, ponieważ traci wszystkie lokalne zmiany
jpaugh
@jpaugh - To jest dokładnie to, co napisałem w odpowiedzi, nie?
bobah
1
To, o co OP poprosił (i czego się spodziewałem), to polecenie cofnięcia dodania bez utraty lokalnych zmian. svn revert. Żadna z odpowiedzi tutaj nie wspomina o tym, że lokalne zmiany zostaną utracone przez przywrócenie.
jpaugh
3

Pełny proces (pakiet svn dla systemu Unix):

Sprawdź, czy plików nie ma w SVN:

> svn st -u folder 
? folder

Dodaj wszystkie (w tym pliki ignorowane):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

Usuń flagę „Dodaj” do wszystkich plików * Ignoruj ​​*:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

Edytuj ignorowanie svn w folderze

svn propedit svn:ignore .

Dodaj dwie linie singli z następującymi:

folderToIgnore
fileToIgnore2.txt

Sprawdź, które pliki zostaną przesłane i zatwierdź:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"
mud1e
źródło
1
Dzięki dokładnie tego, czego potrzebowałem. Wygląda na to, że cofnęło tylko operację „dodaj”, nie dotykając samej zawartości pliku. Bałam się utraty lokalnych zmian w komentarzach do poprzednich odpowiedzi, ale wygląda na to, że żadne pliki nie zostały uszkodzone.
Peter M. - oznacza Monikę
1

Dla plików - svn revert filename

Dla folderów - svn revert -R folder

Arvind singh
źródło
4
Nie! Cofanie jest niebezpieczne, ponieważ traci wszystkie lokalne zmiany
jpaugh