Jeśli mam kopię roboczą repozytorium Subversion, czy istnieje sposób na usunięcie wszystkich niewersjonowanych lub zignorowanych plików w tej kopii roboczej za pomocą jednego polecenia lub narzędzia? Zasadniczo szukam analogu SVN do git clean
.
Albo linia poleceń, albo rozwiązanie GUI (dla TortoiseSVN) byłyby dopuszczalne.
svn
tortoisesvn
ignore
Nick Meyer
źródło
źródło
Odpowiedzi:
Korzystanie z TortoiseSVN:
źródło
svn cleanup --remove-unversioned --remove-ignored .
Ma to następujące cechy:
--xml
opcji i przeanalizowaniem wynikowego wyjścia xml)svn status
drukuje inne znaki statusu przed nazwą pliku (czego nie powinno, ponieważ pliki nie są śledzone, ale na wszelki wypadek ...)Używam skryptu powłoki o nazwie,
svnclean
który zawiera następujące elementy:źródło
IFS
wracać do tego, co było wcześniej. Kiedy to zrobiszVARNAME=value command
, przypisanievalue
doVARNAME
ma zastosowanie tylko podczas wykonywaniacommand
(z pewnymi wyjątkami, które nie mają zastosowaniaread
). Zobacz specyfikację POSIX i ten raport o błędzie POSIX, aby uzyskać więcej informacji.Wiem, że to stare, ale na wypadek, gdyby ktoś się na to natknął, nowsze wersje (1.9 lub nowsze) obsługi svn
--remove-unversioned
, npsvn cleanup . --remove-unversioned
.https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
źródło
svn cleanup . --remove-ignored
Ten oneliner może Ci pomóc:
Używaj ostrożnie!
źródło
svn status --no-ignore
do dobrze wychwycenia ignorowanych plików.Modyfikowanie odpowiedzi Yanal-Yves Fargialla i gimpf za pomocą Powershell (ale bez możliwości komentowania oryginalnego postu przez Stackoverflow):
Dodaje to karat („^”), aby określić początek wiersza, unikając dopasowywania wszystkich plików zawierających literę „i”. Dodaj także flagi -recurse i -force do rm, aby polecenie to stało się nieinteraktywne i możliwe do użycia w skrypcie.
źródło
Wiele rzeczy w SVN można zrobić na różne sposoby, o czym świadczą różne odpowiedzi wiersza poleceń podane tutaj. Wraz z nadejściem wersji 1.7 istnieje jeszcze jedna technika TortoiseSVN, która w rzeczywistości zapewnia lepszą rozdzielczość ziarna niż ta, którą dostarczyła odpowiedź Stefana, pozwalając na wybieranie niewersjonowanych plików oddzielnie od ignorowanych. Po prostu wybierz,
TortoiseSvn >> Clean up...
aby otworzyć to okno dialogowe.źródło
Z PowerShell:
Z linii poleceń:
źródło
-match '[\?i]' -replace '^.{8}'
zamiast tego, który działa poprawnie, nawet jeśli nazwa pliku zaczyna się od spacji, a także usuwa ignorowane pliki.code
@ (svn status --no-ignore) -match '[\? I]' -replace '^. {8}' | rm `. Zrozumiałem to z pomocą tego postupowershell -Command "&{(svn status --no-ignore) -match '[\?i]' -replace '^.{8}' | remove-item -force -recurse}"
Ten oneliner działa dla mnie (na podstawie odpowiedzi Richarda Hansena, która, co zaskakujące, nie działała dla plików zawierających spacje):
źródło
-fr
dorm
polecenia: svn status --no-ignore | grep '^ [I?]' | cut -c 9- | xargs -d "\ n" -I {} rm -fr {}Korzystanie z TortoiseSVN:
Niezbyt ładne i czyste rozwiązanie, ale najszybszy sposób, jaki znam (w systemie Windows).
Dzięki pkh za wskazówkę dotyczącą ignorowanych plików.
źródło
Jest to podobne do innych odpowiedzi, ale w rzeczywistości pliki są ignorowane (zwróć uwagę na „I” w RE):
źródło
Ktoś powiedział, że nie możesz tego zrobić z wiersza poleceń systemu Windows.
Byk.
Robi to w jednej linii i nie wymaga ani jednego narzędzia GNU. :)
źródło
for /f "tokens=2 delims= " %%I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%%I" & rmdir /S /Q "%%I")
%%
%
nie możesz ich usunąć za pomocą wiersza poleceń SVN (nie jestem pewien co do narzędzi GUI), jeśli jesteś w systemie Linux, może to pomóc:
http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/
Drugą (brutalną) metodą jest zatwierdzenie zmian, usunięcie wszystkiego z folderu i ponowne wyewidencjonowanie.
źródło