2008-10-19 23 views
71

Czasami się rozwijasz i decydujesz się na popełnienie, zapominając, że utworzyłeś kilka plików w projekcie. Potem kilka dni później twój znajomy dostaje twoją kompilację z Subversion i skarży się, że brakuje niektórych plików. Zdajesz sobie sprawę, ach, cholera, zapomniałem dodać te pliki!Jak uzyskać listę wszystkich niewersjonowanych plików z SVN?

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

Odpowiedz

94

Użyj polecenia svn status:

svn status | grep ^? 

plików, które nie są wersjonowany 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ć właściwość svn:ignore w katalogu zawierającym, aby pliki te nie były wyświetlane. podczas korzystania z svn status.

+3

Osobiście zawsze „svn diff” przed „svn ci”, ale ponieważ jest to powolny czasami, zawsze „svn stat” przed „svn diff” co jest przydatne, ponieważ wtedy nie zapomnę dodawać rzeczy :) – ephemient

+9

Jeśli masz wiele niewersjonowanych plików, które chcesz dodać, zrób to: 'svn st | grep ^? | awk "{print 2 $} | xargs svn add' Najpierw znajdziesz niewersjonowane pliki, awk wydrukuje tylko drugi element w linii (tj. ścieżkę pliku), a xargs sprawi, że ta ścieżka będzie argumentem polecenia svn add. –

+6

Brak pojedynczego cudzysłowu na końcu polecenia awk. Polecenie powinno brzmieć: 'svn st | grep ^? | awk "{print 2 $}" xargs svn add' – jplandrain

15

Jeśli używasz systemu Windows, możesz zrobić coś podobnego do odpowiedzi Greg Hewgill przy użyciu PowerShell.

(svn stat) -match '^\?' 

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

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

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

+1

Jak nazywa się ta'() -math'? –

36

Jeśli niektóre pliki mają "ignorowane" dodane do ich statusu, nie będą wyświetlane w "statusie SVN". Będziesz potrzebować:

svn status --no-ignore 
+0

Jest to również przydatne w przypadku plików binarnych, które domyślnie są domyślnie ignorowane w ustawieniach svn. Prawdopodobnie nie jestem świadomy jakiegoś ustawienia, które to robi, ale użycie --no-ignore pomogło mi w tym scenariuszu. –

9

Albo z wiersza poleceń systemu Windows:

svn stat | find "?" 
0

Można użyć tego polecenia, aby wyświetlić listę wszystkich ścieżek dla nie-wersjonowanymi pliki:

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

Pierwszy część zrobi svn status, a następnie przekieruje wyjście do AWK, które zrobi prosty filtr "pierwszy znak powinien być"? "" wtedy wydrukuje drugi parametr "który jest ścieżką pliku" .

svn status będzie zawsze nie wydrukować zignorowanych plików. Możesz dodać plik lub ścieżkę dodając tę ​​ścieżkę przy użyciu

svn propset svn:ignore "PATH OR PATERN" 
Powiązane problemy