Czy ktoś zna sposób na rekurencyjne usuwanie wszystkich plików w kopii roboczej, które nie są objęte kontrolą wersji? (Potrzebuję tego, aby uzyskać bardziej wiarygodne wyniki w mojej automatycznej kompilacji VMware).
svn
build-automation
Stefan Schultze
źródło
źródło
hg purge --all
w Mercurial.Odpowiedzi:
Edytować:
Subversion 1.9.0 wprowadził opcję, aby to zrobić:
Wcześniej używam tego skryptu Pythona, aby to zrobić:
Wydaje się, że całkiem nieźle wykonuje swoją pracę.
źródło
svn cleanup --remove-unversioned
jest lepsze. I to jest dla Subversion 1.9.0 (ta wersja pochodzi z 2015 roku). Jest stabilny i standardowy.to działa dla mnie w bash:
Seth Reno jest lepszy:
Obsługuje niewersjonowane foldery i spacje w nazwach plików
Zgodnie z komentarzami poniżej, działa to tylko w przypadku plików, o których subversion nie wie (status =?). Wszystko, Subversion nie wiedzieć (w tym Ignorowani plików / folderów) nie zostaną usunięte.
Jeśli używasz subversion 1.9 lub nowszej, możesz po prostu użyć polecenia svn cleanup z opcjami --remove-unversioned i --remove-ignored
źródło
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
Natknąłem się na tę stronę, szukając tego samego, ale nie dla automatycznej kompilacji.
Po dokładniejszym przyjrzeniu się odkryłem „ Rozszerzone menu kontekstowe ” w TortoiseSVN. Przytrzymaj klawisz Shift i kliknij prawym przyciskiem myszy kopię roboczą. Istnieją teraz dodatkowe opcje w menu TortoiseSVN, w tym „ Usuń niewersjonowane elementy… ”.
Chociaż być może nie dotyczy tego konkretnego pytania (tj. W kontekście automatycznej kompilacji), pomyślałem, że może to być pomocne dla innych, którzy chcą zrobić to samo.
źródło
Zobacz: svn-clean
źródło
Jeśli korzystasz z wiersza poleceń systemu Windows,
Poprawiona wersja:
Jeśli używasz tego w pliku wsadowym, musisz podwoić
%
:źródło
Dodałem to do mojego profilu Windows PowerShell
źródło
--no-ignore
dosvn status
i-Recurse
doRemove-Item
Linia poleceń Linuksa:
Lub, jeśli właścicielem niektórych plików jest root:
To jest oparte na odpowiedzi Kena. (Odpowiedź Kena pomija ignorowane pliki; moja odpowiedź usuwa je).
źródło
Po prostu zrób to na powłoce unix za pomocą:
źródło
Czy nie możesz po prostu wyeksportować do nowej lokalizacji i stamtąd budować?
źródło
Jeśli masz TortoiseSVN na swojej ścieżce i jesteś we właściwym katalogu:
Opcje są opisane w pomocy TortoiseSVN dla
/command:cleanup
:źródło
Jeśli używasz żółwia svn, istnieje ukryte polecenie, aby to zrobić. Przytrzymaj klawisz Shift, klikając prawym przyciskiem myszy folder, aby uruchomić menu kontekstowe w eksploratorze Windows. Otrzymasz polecenie „Usuń elementy bez wersji”.
zobacz szczegóły na dole tej strony lub zrzut ekranu poniżej, który podkreśla rozszerzone funkcje zielonymi gwiazdami, a ten, który Cię interesuje, żółtym prostokątem ...
źródło
Subversion 1.9.0 wprowadził opcję usuwania niewersjonowanych elementów [1]
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
źródło
Moja konwersja C # skryptu Thomas Watnedals w języku Python:
źródło
To jest polecenie powłoki unix, które usuwa wszystkie pliki poza kontrolą subversion.
Uwagi:
st
wsvn st
to wbudowany aliasstatus
, czyli komenda jest równoważnasvn status
--no-ignore
włącza również pliki niezwiązane z repozytoriami w wyjściu statusu, w przeciwnym razie ignoruje je za pomocą mechanizmów, takich jak.cvsignore
itp. - ponieważ celem jest uzyskanie czystego punktu startowego dla kompilacji, ten przełącznik jest koniecznościągrep
filtry wyjście takie, że tylko te pliki, nie wiadomo do Subversion pozostało - linie począwszy?
Files list nieznany wywrotową, które byłyby ignorowane bez--no-ignore
opcjised
xargs
komenda jest instruowany przez-r
nie wykonaćrm
, gdy lista argumentem byłaby pusta-d '\n'
opcja nakazujexargs
używać nowej linii jako separator takie polecenie działa również w nazwach plików ze spacjamirm -r
jest używany w przypadku konieczności usunięcia kompletnych katalogów (które nie są częścią repozytorium)źródło
Nie mogłem uruchomić żadnego z powyższych bez dodatkowych zależności, których nie chciałem dodawać do mojego automatycznego systemu kompilacji na win32. Dlatego zestawiłem następujące polecenia Ant - zauważ, że wymagają one zainstalowania pliku JAR Ant-contrib w (używałem wersji 1.0b3, najnowszej, z Ant 1.7.0).
Zauważ, że powoduje to usunięcie wszystkich niewersjonowanych plików bez ostrzeżenia.
W przypadku innego folderu zmień
${basedir}
odniesienie.źródło
usuń echo, jeśli to jest pewne, co chcesz zrobić.
źródło
/bin/sh
i nrm
procesów.Ponieważ wszyscy to robią ...
źródło
Równie dobrze może przynieść inną opcję
Plik /(config|.ini)/ jest przeznaczony do moich własnych celów.
Dobrym pomysłem może być dodanie --no-ignore do polecenia svn
źródło
Natknąłem się na svn-clean na mojej maszynie RH5. Znajduje się w / usr / bin / svn-clean
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
źródło
Czyste rozwiązanie Windows CMD / BAT:
źródło
Wypróbowałem wersję Setha Reno z tej odpowiedzi, ale nie zadziałała. Mam 8 znaków przed nazwą pliku, a nie 9 używanych w
cut -c9-
.Więc to jest moja wersja z
sed
zamiastcut
:źródło
Jeśli nie przeszkadza Ci PowerShell:
Usuń flagę -WhatIf, aby polecenie faktycznie wykonało usuwanie. W przeciwnym razie wyświetli tylko to, co by zrobił, gdyby działał bez -WhatIf.
źródło
Dodałbym to jako komentarz do odpowiedzi Thomasa Watnedala , ale jeszcze nie mogę.
Drobny problem z nim (który nie wpłynie na system Windows) polega na tym, że sprawdza tylko pliki lub katalogi. W przypadku systemów typu Unix, w których mogą występować dowiązania symboliczne, konieczna jest zmiana linii:
do
aby również usunąć linki.
Dla mnie zmiana ostatniej linii
if match: removeall(match.group(1))
naaby wyświetlał to, co usuwa, też był przydatny.
W zależności od przypadku użycia
?[\?ID]
część wyrażenia regularnego może być lepsza?[\?I]
, ponieważD
usuwa również usunięte pliki, które były pod kontrolą wersji. Chcę użyć tego do zbudowania w czystym, zaznaczonym folderze, więc nie powinno być żadnych plików wD
stanie.źródło
@zhoufei Przetestowałem twoją odpowiedź i tutaj jest zaktualizowana wersja:
%
znaków przed G i H.%~1
można użyć dowolnej nazwy katalogu, użyłem tego jako funkcji w pliku bat, więc%~1
jest to pierwszy parametr wejściowyźródło
Jeśli nie chcesz pisać żadnego kodu, robi to svn2.exe z svn2svn , jest też artykuł o tym, jak to jest zaimplementowane. Usunięte foldery i pliki są umieszczane w koszu.
Uruchom polecenie „svn2.exe sync [ścieżka]”.
źródło
Dla ludzi, którzy lubią to robić za pomocą perla zamiast pythona, powłoki Unix, javy itp. Oto mały skrypt w Perlu, który również wykonuje jib.
Uwaga: spowoduje to również usunięcie wszystkich niewersjonowanych katalogów
źródło
Używając TortoiseSVN: * kliknij prawym przyciskiem myszy folder kopii roboczej, trzymając wciśnięty klawisz Shift * wybierz "usuń niewersjonowane elementy"
Jak mogę usunąć wszystkie niewersjonowane / ignorowane pliki / foldery z mojej kopii roboczej?
źródło
Czystym sposobem na zrobienie tego w PERL byłoby:
źródło
Wygenerowałem to przez około 3 godziny. Zrobienie tego w systemie Unix zajęłoby 5 minut. Głównymi problemami były: spacje w nazwach folderów Win, niemożność edycji %% i oraz problem z definiowaniem zmiennych w pętli Win cmd.
źródło
Fragment kodu C # powyżej nie działał dla mnie - mam klienta svn żółwia, a linie są sformatowane nieco inaczej. Oto ten sam fragment kodu, co powyżej, tylko przepisany do funkcji i przy użyciu wyrażenia regularnego.
źródło