Включение новых файлов в SVN diff - PullRequest
30 голосов
/ 22 ноября 2010

У меня есть скрипт, который собирает мое приложение, загружает его на удаленный компьютер, выполняет там тест производительности и собирает некоторые метрики, которые меня интересуют. Сценарий создает файл патча для локальных изменений, которые я делаю в своем рабочем пространстве, и показывает его вместе с номерами производительности. Это помогает мне сравнивать влияние различных параметров настройки. Если я захочу воссоздать свое рабочее пространство позднее, я могу использовать номер редакции SVN и патч.

svn diff не сообщает о новых файлах, которые я добавляю в рабочую область, если я сначала не использую svn add для них. Есть ли какой-нибудь способ создать файл патча, который будет также включать новые файлы?

PS: Похожий вопрос был задан здесь , но не получил адекватного ответа, ИМО.

Ответы [ 2 ]

41 голосов
/ 23 ноября 2010

Чтобы svn diff включал все неверсионные файлы из вашей локальной рабочей копии, вы должны сначала добавить эти файлы. svn diff выводит тот же набор изменений, который будет использовать svn commit.

Если вы точно знаете, что все неверсионные файлы должны быть добавлены, вот что вы можете сделать.

Подготовьте список неверсионных файлов, взяв из вывода svn status все строки, начинающиеся со знака вопроса:

svn status | grep ^? | sed -r 's/^\? +//' > ../unversioned_files_list.txt

Затем вы можете передать этот список файлов на svn add, используя xargs:

xargs -r -d '\n' svn add < ../unversioned_files_list.txt

А затем создайте патч:

svn diff > ../my_patch.patch

Если вы не хотите сохранять эти файлы добавленными, используйте список файлов, чтобы удалить их:

xargs -r -d '\n' svn rm --keep-local < ../unversioned_files_list.txt
12 голосов
/ 03 февраля 2013

Спасибо, Александр.Сначала его подход не работал в моем случае.Я был уверен, что все новые файлы были помечены A в svn status, однако файл diff все еще был пустым.Наконец, я нашел разницу в svn status выходных данных, все четвертые столбцы в моем случае заполнены +, например:

$ svn st
M      .
A  +    New.java

Это означает, что элемент запланирован на addition-with-history [1],Обычно это происходит, когда вы svn move или svn copy файл или каталог [2].В моем случае New.java - это svn merged из другой ветви, включая историю предыдущих коммитов в этой ветви.Давайте удалим эту информацию истории.

Сначала найдите все элементы addition-with-history:

svn status | grep ^A | sed -r 's/^A[ +]+//' > /tmp/add_list

При необходимости удалите пути к каталогам в /tmp/add_list, чтобы избежать предупреждений на следующем шаге.1021 * Затем удалите информацию об их фиксации истории с помощью svn remove:

xargs -r -d '\n' svn remove --keep-local --force < /tmp/add_list

Затем вернитесь к решению Александра, чтобы снова добавить их в Subversion и получить diff.

Ссылки:

[1]http://svnbook.red-bean.com/nightly/en/svn.ref.svn.c.status.html
[2]http://www.linuxtopia.org/online_books/programming_tool_guides/version_control_with_subversion/svn.ref.svn.c.status.html
...