Ответ 1
вы можете просто сделать svn add path/to/dir/*
, вы получите предупреждение обо всем, что уже есть в управлении версиями, но оно добавит все, что нет.
Я использую ORM, который генерирует большое количество файлов из CLI. Есть ли простой способ запустить svn add
для всех файлов в каталоге, который отображается как ?
при запуске svn status
?
Изменить Эти файлы существуют в дереве каталогов, поэтому добавление *
для одного каталога не будет работать.
вы можете просто сделать svn add path/to/dir/*
, вы получите предупреждение обо всем, что уже есть в управлении версиями, но оно добавит все, что нет.
Это добавит все неизвестные (кроме проигнорированных) файлы в указанном дереве каталогов:
svn add --force path/to/dir
Это добавит все неизвестные (кроме проигнорированных) файлы в текущем каталоге и ниже:
svn add --force .
Для справки эти являются очень похожими вопросами.
Кажется, они работают лучше для меня. Они также работают с пробелами и не добавляют повторно добавленные игнорируемые файлы. Я не видел их в списке других ответов, которые я видел.
добавление:
svn st | grep ^? | sed 's/? //' | xargs svn add
удаление:
svn st | grep ^! | sed 's/! //' | xargs svn rm
Изменить: важно не использовать "добавить *", если вы хотите сохранить свои проигнорированные файлы, иначе все, что было проигнорировано, будет добавлено повторно.
svn status | grep "^\?" | awk '{print $2}' | xargs svn add
Взято откуда-то в Интернете, но я использовал его некоторое время, и он работает хорошо.
Если svn add whatever/directory/*
не работает, вы можете сделать это жестким способом:
svn st | grep ^\? | cut -c 2- | xargs svn add
Решение
svn status | grep ^? | sed 's/? //' | xargs svn add
не работает с пробелами. Вместо этого можно использовать
svn status | grep ^? | sed 's/^? //' | xargs -I fn svn add "fn"
(похоже, что количество ведущих заготовок отличается от моей системы - просто отрегулируйте).
Вы должны иметь возможность запускать:
svn add *
Он может жаловаться на файлы, которые уже находятся под управлением версиями, но также добавит новые.
Возможно, вам захочется подумать, действительно ли вы хотите добавить эти сгенерированные файлы в управление версиями. Они могут рассматриваться как производные артефакты, вроде как скомпилированный код, и поэтому их не следует добавлять. Конечно, это зависит от вас, но о чем-то думать.
svn add *
должен выполнить эту работу. Просто убедитесь, что:
svn commit
затем:)
В некоторых оболочках, таких как fish, вы можете использовать globing **
для этого:
svn add **
svn status | grep "^\?" | awk '{ printf("\""); for (f=2; f <= NF; f++) { printf("%s", $f); if (f<NF) printf(" "); } printf("\"\n");}' | xargs svn add
Это было основано на ответе markb... и небольшой охоте в Интернете. Это выглядит уродливо, но, похоже, для меня это работает на OS X (включая файлы с пробелами).
Это добавляет все неверсированные файлы, даже если они содержат пробелы
Статус svn | awk '{$ 1 = "; print $0} '| xargs -i svn добавить" {}"
Мне нравятся эти команды, поскольку они используют svn status
для поиска новых или отсутствующих файлов, которые уважают файлы, которые игнорируются.
svn add $( svn status | sed -e '/^?/!d' -e 's/^?//' )
svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' )
Среди bash однострочного я думаю, что это самый красивый:
svn status | tee >(awk '/^?/{print $2}' | xargs -r svn add >&2) | awk '/^!/{print $2}' | xargs -r svn delete
Он добавит все новые файлы и удалит все отсутствующие файлы. Используйте с осторожностью, возможно, установите псевдоним для быстрого доступа.
ПРИМЕЧАНИЕ для Mac: в xargs -r
есть расширение GNU: оно может не поддерживаться. В этом случае просто удалите его и игнорируйте предупреждения, когда нет файлов для добавления или удаления
Я новичок в управлении версиями svn. Однако для случая, когда люди хотят добавлять файлы, не игнорируя уже установленные свойства svn: ignore, я решил проблему, как показано ниже.
Вышеупомянутые шаги работали.