Czy w SVN jest polecenie, którego mogę użyć, aby usunąć wszystkie lokalnie brakujące pliki w katalogu?
Lub jeśli to się nie uda, w jakiś sposób wyszczególni się tylko te pliki, których brakuje (lub, w bardziej ogólnym przypadku, mają status A, D,? Itd.)
Odpowiedzi:
Jeśli używasz TortoiseSVN, po prostu zrób Sprawdź zmiany , posortuj według kolumny Stan , wybierz wszystkie zaznaczone wpisy
missing
, kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe i wybierz Usuń . Na koniec zobowiąż się do opublikowania zmian w repozytorium.Jeśli korzystasz z systemu Windows, ale wolisz wiersz poleceń i lubisz bawić się w PowerShell, ta jedna linijka załatwi sprawę:
Oznacza to, że filtruj dane wyjściowe tylko do tych wierszy, które pokazują brakujące pliki (oznaczone wykrzyknikiem na początku wiersza), przechwytuj skojarzoną nazwę pliku i wykonaj operację
svn rm
na tej nazwie pliku.(Wpis na blogu Usuń wszystkie „brakujące” pliki z kopii roboczej SVN działa podobnie w systemie Unix / Linux).
źródło
svn up
? ponieważ pliki są przywracane z serwera svnJeśli używasz systemu Mac ( Darwin ) lub Linux, możesz przesłać dane wyjściowe następujących poleceń do
svn rm
wszystkich brakujących plików. Możesz ustawić bieżący katalog roboczy na odpowiedni katalog lub podkatalog przed ich uruchomieniem - w zależności od tego, czy chcesz uruchomić całą kopię roboczą, czy tylko podzbiór.svn rm
używając danych wyjściowych # 3 jako argumentówWięc pełne polecenie to:
Bibliografia:
źródło
awk '{print " --force "$2"@"}'
jeśli nazwa pliku zawiera@
(na przykład, jeśli jesteś programistą iOS)awk '{$1=""; print " --force \""substr($0,2)"@\"" }'
powinno załatwić sprawę (i zaczyna wyglądać brzydko)--force
do części xargs?svn status
svn remove
każdy plikźródło
-r
doxargs
opcji (nie uruchamiaj, jeśli nie podano argumentów). Ponadto liczba argumentów powinna być ograniczona, a usunięcia powinny być grupowane, ponieważ wywołanie kończy się niepowodzeniem przy bardzo dużej liczbie plików do usunięcia, np-n 500
. I wreszcie, wykonywane cytowanie jest nieoptymalne dla plików zawierających specjalne powłoki, takie jak$
- lepiej użyj\n
jako separatora i pozostaw cytowanie naxargs
:svn status | grep "!" | cut -d! -f2 | sed 's/^ *//' | xargs -n 500 -d "\n" -r svn rm
Właśnie znalazłem to, co załatwia sprawę, Usuń wszystkie „brakujące” pliki z kopii roboczej SVN :
źródło
Podziękowania dla Paula Martina za wersję Windows.
Tutaj jest niewielka modyfikacja skryptu, więc pliki Windows ze spacjami są również brane pod uwagę. Również
missing.list
plik zostanie usunięty na końcu.Zapisałem następujący plik w svndel.bat w moim katalogu bin SVN (ustawionym w moim środowisku %% PATH), aby można go było wywołać z dowolnego folderu w wierszu polecenia.
źródło
del missing.list 2>NUL
, ponieważ dodałem wszystkie nowe pliki bezpośrednio po pierwszym usunięciu usuniętych plików, więc dodałemmissing.list
do svn:svn delete "missing.list"
działało dla mniePodoba mi się opcja PowerShell ... Ale oto inna opcja, jeśli używasz skryptów wsadowych systemu Windows:
źródło
Alternatywa, która działa w systemie Linux (bash) dla plików do usunięcia, które nie zawierają spacji w ścieżce:
źródło
W rzeczywistości możliwe jest całkowite usunięcie
missing.list
z user3689460 i Paul Martinźródło
Ten skrypt powłoki rekurencyjnie bada (
svn status
) katalogi w twoim projekcie, usuwając brakujące pliki (zgodnie z pytaniem) i dodając nowe pliki do repozytorium. Jest to coś w rodzaju „przechowywania w repozytorium aktualnego obrazu projektu”.źródło
Niewielka modyfikacja wiersza poleceń, która działa w systemie Mac OS (miejmy nadzieję, że nawet na Linuksie) i radzi sobie z plikami, które zgłasza polecenie „svm sr”, np. „! M” (brakujący i zmodyfikowany).
Radzi sobie ze spacjami w plikach.
Opiera się na modyfikacji poprzedniej odpowiedzi:
źródło
Gdy mamy do czynienia z dużą liczbą plików, może się zdarzyć, że argument wejściowy do xargs staje się zbyt długi. Poszedłem na bardziej naiwną implementację, która działa również w tym przypadku.
To jest dla Linuksa:
źródło
Poprawiona wersja
Więc pełne polecenie to:
źródło