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


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 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?


76
2017-10-19 05:25


pochodzenie




Odpowiedzi:


Użyj svn status dowództwo:

svn status | grep ^?

Pliki, które nie są wersjonowane, są oznaczone symbolem? 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ś skonfigurować svn:ignore Właściwość w katalogu zawierającym, dzięki czemu pliki te nie będą wyświetlane podczas używania svn status.


98
2017-10-19 05:26



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 zapomnę dodawać rzeczy :) - ephemient
Jeśli masz wiele niewersjonowanych plików, które chcesz dodać, wykonaj następujące czynności: svn st | grep ^? | awk '{print $2} | xargs svn add  Najpierw znajdziesz niewersjonowane pliki, awk wypisze tylko drugi element w linii (tj. Ścieżkę pliku), a xargs sprawi, że ta ścieżka będzie argumentem polecenia svn add. - duality_
Brak pojedynczego cudzysłowu na końcu polecenia awk. Polecenie powinno brzmieć: svn st | grep ^? | awk '{print $2}' | xargs svn add - jplandrain
Działa również w systemie Windows: svn status | find "?" - Florian Straub


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

41
2017-08-29 14:05



Jest również pomocny 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. - Andy Weinstein
To powinna być zaakceptowana odpowiedź, ponieważ wybrana odpowiedź nie działa w moim przypadku (w przypadku plików binarnych w środowisku Linux) - Asqan


Jeśli używasz systemu Windows, możesz zrobić coś podobnego do Greg HewgillOdpowiedź 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!


15
2017-07-04 12:42



Jak to jest () -math nazywa? - Pavel Petrov


Lub z wiersza poleceń systemu Windows:

svn stat | find "?"

10
2017-11-26 17:05





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ęść zrobi svn status, a następnie przekieruje wyjście do AWK który zrobi prosty filtr "pierwszy znak powinien być"? "" wtedy wydrukuje drugi parametr "który jest ścieżką pliku".

svn status będzie zawsze nie wydrukuj zignorowane pliki. Możesz dodać plik lub ścieżkę, dodając tę ​​ścieżkę za pomocą

svn propset svn:ignore "PATH OR PATERN"

0
2017-09-25 11:00



To wydaje się uzyskać wszystkie wyniki svn status, nie tylko pliki bez wersji. Uważam, że polecenie powinno być svn status | awk '/^\?/ {print $2}' uciec przed ?, ponieważ filtr jest wyrażeniem regularnym. - KymikoLoco