Як отримати список усіх безверсійних файлів із SVN?


80

Іноді ви розробляєтесь і вирішуєте зробити комітет, забувши, що створили кілька файлів у своєму проекті. Потім кілька днів по черзі ваш приятель виводить вашу збірку з Subversion і скаржиться, що деякі файли, здається, відсутні. Ви розумієте, ах лайно, я забув додати ці файли!

Як я можу отримати з Subversion список файлів, які не перебувають під контролем версій, щоб я впевнений, що все додав до сховища?

Відповіді:


107

Використовуйте svn statusкоманду:

svn status | grep ^?

Файли, які не мають версій, позначаються знаком? на початку рядка.

Якщо ви виявите, що у вас завжди є певні файли, які не слід додавати до сховища (наприклад, згенеровані двійкові файли), слід налаштувати svn:ignoreвластивість у каталозі, що містить, щоб ці файли не відображалися під час використання svn status.


4
Особисто я завжди "svn diff" перед "svn ci", але оскільки це іноді повільно, я завжди "svn stat" перед "svn diff", що зручно, бо тоді я не забуваю додавати речі :)
ephemient

11
Якщо у вас є багато неверсійних файлів, які ви хочете додати, зробіть так: svn st | grep ^? | awk '{print $2} | xargs svn add спочатку буде знайдено неверсійні файли, awk надрукує лише другий елемент у рядку (тобто шлях до файлу), а xargs зробить цей шлях аргументом svn додати.
duality_

7
У кінці команди awk відсутня одна лапка. Команда повинна бути такою:svn st | grep ^? | awk '{print $2}' | xargs svn add
jplandrain

46

Якщо деякі файли ignoreдодали свій статус, вони не відображатимуться в svn status. Вам знадобиться:

svn status --no-ignore

1
Також корисно для двійкових файлів, які за моїм налаштуванням ігноруються статусом svn за замовчуванням. Мені, мабуть, невідома якась установка, яка робить це, але використання --no-ignore допомогло мені в цьому сценарії.
Енді Вайнштейн

Це має бути прийнятою відповіддю, оскільки обрана відповідь не працювала в моєму випадку (для двійкових файлів у середовищі Linux)
Asqan,

15

Якщо ви працюєте в Windows, ви можете зробити щось подібне до відповіді Грега Хьюгілла за допомогою PowerShell.

(svn stat) -match '^\?'

Це можна розширити досить легко, щоб знайти всі неверсійні та ігноровані файли та видалити їх.

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

Сподіваюся, це комусь корисно!


1
Як це () -mathназивається?
Павло Петров


1

За допомогою цієї команди можна перерахувати всі шляхи до неверсійних файлів:

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

Перша частина виконає svn status, а потім перенаправить вихід на AWK, який зробить простий фільтр "перший символ повинен бути '?'", Потім надрукує другий параметр ", який є шляхом до файлу".

svn statusзавжди не друкуватиме ігноровані файли. Ви можете додати файл або шлях, додавши цей шлях за допомогою

svn propset svn:ignore "PATH OR PATERN"

Здається, це дає всі результати svn status, а не лише неверсійні файли. Я вважаю, що команда повинна бути, svn status | awk '/^\?/ {print $2}'щоб уникнути ?, оскільки фільтр є виразом регулярного виразу.
KymikoLoco
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.