Cofnij dodawanie svn bez przywracania lokalnych edycji

157

Przypadkowo uruchomiłem svn add *i dodałem kilka plików, których nie powinno być w repozytorium. Mam też lokalne zmiany w niektórych plikach, które chcę zachować. Czy istnieje prosty sposób na cofnięcie svn addzmian bez cofania lokalnych zmian? Główną sugestią, jaką widzę w Google, jest to svn revert, że rzekomo cofa lokalne zmiany.

Jonderry
źródło

Odpowiedzi:

282

To byłoby:

svn rm --keep-local

To samo przytrafiło się mnie. :-P

Wiele osób skomentowało, że powinieneś użyć:

svn rm --keep-local FILENAME

zastosowanie polecenia do jednego lub wielu plików zamiast wszystkiego, co może mieć niezamierzone skutki uboczne.

Nostradamus1935
źródło
1
Nie miało to na mnie żadnego efektu. Uruchomiłem kod jak powyżej (łącznie z końcowym okresem) z folderu podstawowego. Nie jestem pewien, czy czegoś mi brakuje.
zzz
8
Zauważ, że musisz dodać nazwę pliku do polecenia, aby tak było svn rm --keep-local FILENAME. FILENAMEMoże używać * pasuje do wielu plików (jeśli masz szczęście wystarczy, aby mieć wzór).
Adam Badura
4
ostrzeżenie! - użycie tej komendy podczas używania zewnętrznych svn usuwa również wszystkie dołączone zewnętrzne ...
kostja
2
Jeśli to zatwierdzisz, czy zatwierdzenie nie obejmie usunięcia danego pliku z repozytorium?
jwg
1
//, mam to samo pytanie co jwg. Dokonałem kilku zmian w pliku kontrolowanym przez SVN. Chcę zachować te zmiany lokalnie. Jednak nie chcę całkowicie usuwać pliku z repozytorium. Po prostu nie chcę wypychać lokalnych zmian do pliku.
Nathan Basanese,
34

Jeśli te pliki znajdują się w katalogu, który nie został jeszcze zatwierdzony, możesz usunąć całą zawartość katalogu z następnego zatwierdzenia, wykonując:

svn delete --keep-local /path/to/directory

Jeśli jednak te pliki są już w repozytorium i zawierają teraz zmiany, których nie chcesz zatwierdzać, możesz zatwierdzić pozostałe pliki za pomocą list zmian:

svn changelist somename /file/to/be/committed
svn commit --changelist somename
Juampy NR
źródło
7

Możesz naprawić swoje zamówienie w następujący sposób:

  1. Utwórz kopię zapasową plików lokalnych
  2. Przywróć płatność SVN
  3. Przywróć pliki

-

rsync -av --exclude .svn/ YOURDIR/ YOURDIR.bak
svn revert -R YOURDIR
rsync -av YOURDIR.bak/ YOURDIR 
Brice M. Dempsey
źródło
Ostateczne polecenie zawsze tworzy dodatkowy poziom katalogu, tj. Kończy się YOURDIR/YOURDIR/, chociaż myślę, że problem dotyczy początkowego tworzenia polecenia kopii zapasowej YOURDIR.bak/YOURDIR/.
James
Aby tego uniknąć, rsync wymaga końcowego ukośnika w katalogu źródłowym. Zredagowałem odpowiedź.
Brice M. Dempsey,
3

Miałem ten sam problem, przypadkowo dodałem katalog / przez svn addktóry zawiera pliki binarne i skompilowany plik. To polecenie faktycznie usuwa katalog.

svn rm --force <directory-name>

W moim przypadku nie potrzebuję katalogu, więc można było bezpiecznie usunąć. Jeśli chcesz zachować pliki / katalogi, zapisz je w miejscu przed zastosowaniem polecenia i po skopiowaniu z powrotem

pushya
źródło