Jak uzyskać listę wszystkich niewersjonowanych plików z SVN?

80

Czasami programujesz i decydujesz się zatwierdzić, zapominając, że utworzyłeś kilka plików w swoim projekcie. Kilka dni później twój kumpel wyciąga twoją kompilację z Subversion i skarży się, że brakuje niektórych plików. Zdajesz sobie sprawę, ach, zapomniałem dodać te pliki!

Jak mogę uzyskać listę plików, które nie są pod kontrolą wersji od Subversion, więc jestem pewien, że dodałem wszystko do repozytorium?

Doug T.
źródło

Odpowiedzi:

107

Użyj svn statuspolecenia:

svn status | grep ^?

Pliki, które nie są wersjonowane, są oznaczone? na początku linii.

Jeśli okaże się, że zawsze masz określone pliki, które nie powinny być dodawane do repozytorium (na przykład wygenerowane pliki binarne), powinieneś ustawić svn:ignorewłaściwość w katalogu zawierającym, aby te pliki nie były wyświetlane podczas używania svn status.

Greg Hewgill
źródło
4
Osobiście zawsze "svn diff" przed "svn ci", ale ponieważ czasami jest to powolne, zawsze "svn stat" przed "svn diff", co jest przydatne, ponieważ wtedy nie zapominam o dodaniu rzeczy :)
ephemient
11
Jeśli masz wiele niewersjonowanych plików, które chcesz dodać, zrób to: svn st | grep ^? | awk '{print $2} | xargs svn add to najpierw znajdzie niewersjonowane pliki, awk wydrukuje tylko drugi element w linii (tj. Ścieżkę pliku), a xargs uczyni tę ścieżkę argumentem svn Dodaj.
duality_
7
Na końcu polecenia awk brakuje pojedynczego cudzysłowu. Polecenie powinno brzmieć:svn st | grep ^? | awk '{print $2}' | xargs svn add
jplandrain
46

Jeśli niektóre pliki zostały ignoredodane do ich statusu, nie pojawią się w svn status. Będziesz potrzebował:

svn status --no-ignore
bleater
źródło
1
Pomocne również w przypadku plików binarnych, które w mojej konfiguracji wydają się być domyślnie ignorowane przez status svn. Prawdopodobnie nie jestem świadomy pewnych ustawień, które to robią, ale użycie --no-ignore pomogło mi w tym scenariuszu.
Andy Weinstein
To powinna być akceptowana odpowiedź, ponieważ wybrana odpowiedź nie działała w moim przypadku (dla plików binarnych w środowisku linux)
Asqan
15

Jeśli pracujesz w systemie Windows, możesz zrobić coś podobnego do odpowiedzi Grega Hewgilla za pomocą PowerShell.

(svn stat) -match '^\?'

Można to dość łatwo rozszerzyć, aby znaleźć wszystkie niewersjonowane i zignorowane pliki i je usunąć.

(svn stat "--no-ignore") -match '^[I?]' -replace '^.\s+','' | rm

Mam nadzieję, że to komuś pomoże!

Damian Powell
źródło
1
Jak to się () -mathnazywa?
Pavel Petrov
11

Lub z wiersza poleceń systemu Windows:

svn stat | find "?"
crig
źródło
1

Możesz użyć tego polecenia, aby wyświetlić listę wszystkich ścieżek dla plików bez wersji:

svn status | awk '/^?/ {print $2}'

Pierwsza część wykona an svn status, a następnie przekieruje wyjście do AWK, który wykona prosty filtr „pierwszy znak powinien być '?'”, A następnie wypisze drugi parametr „który jest ścieżką do pliku”.

svn statuszawsze nie drukuje ignorowanych plików. Możesz dodać plik lub ścieżkę, dodając tę ​​ścieżkę za pomocą

svn propset svn:ignore "PATH OR PATERN"
user2710797
źródło
Wydaje się, że daje to wszystkie wyniki svn status, a nie tylko pliki bez wersji. Uważam, że polecenie powinno polegać svn status | awk '/^\?/ {print $2}'na ucieczce z znaku ?, ponieważ filtr jest wyrażeniem regularnym.
KymikoLoco