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?

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.


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

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!


1
Jak to się () -mathnazywa?
Pavel Petrov

11

Lub z wiersza poleceń systemu Windows:

svn stat | find "?"

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"

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.