Подтвердить что ты не робот

Добавьте все необработанные файлы в Subversion, используя одну команду Linux

Иногда я включаю много файлов в разные каталоги в моем проекте. На данный момент я добавляю все файлы по одному в свой проект перед фиксацией. Есть ли какая-либо команда терминала Linux, которая может добавить все неперевернутые файлы в Subversion?

И что, если я хочу добавить все файлы, кроме одного или двух файлов?

4b9b3361

Ответ 1

svn add --force <directory>

Добавить уже рекурсивный. Вам просто нужно заставить его перемещаться по версиям подкаталогов.

Ответ 2

Добавляет любой файл с вопросительным знаком рядом с ним, все еще исключая игнорируемые файлы:

svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}' | xargs svn add
svn commit

http://codesnippets.joyent.com/posts/show/45

Ответ 3

Это попытается добавить все файлы, но только на самом деле добавить те, которые еще не находятся в SVN:

svn add --force ./* 

Ответ 4

Эта команда добавит любые файлы без версии, перечисленные в выводе команды svn st, к подрывной деятельности.

Обратите внимание, что никакие имена файлов, содержащие пробелы в файле svn stat, не будут добавлены. Кроме того, может возникнуть нечетное поведение, если какие-либо имена файлов содержат "?".

svn st | grep ? | tr -s ' ' | cut -d ' ' -f 2 | xargs svn add

или если вы хорошо разбираетесь в awk:

svn st | grep ? | awk '{print $2}' | xargs svn add

Пояснение:

Шаг 1: svn st команда

[[email protected] rails]$svn st
?       app/controllers/application.rb
M       app/views/layouts/application.html.erb
?       config/database.yml

Шаг 2:. Мы загружаем файл без версии с командой grep:

[[email protected] rails]$svn st | grep ?
?       app/controllers/application.rb
?       config/database.yml

Шаг 3: Затем удалите сжатие между ? и файловым путем с помощью команды tr:

[[email protected] rails]$svn st | grep ? | tr -s ' '
? app/controllers/application.rb
? config/database.yml
</pre>

Шаг 4: Затем выберите второй столбец из вывода с помощью команды cut:

[[email protected] rails]$svn st | grep ? | tr -s ' ' | cut -d ' ' -f 2
app/controllers/application.rb
config/database.yml

Шаг 5: Наконец, передача этих путей файлов в качестве стандартного ввода в команду svn add:

[[email protected] rails]$svn st | grep ? | tr -s ' ' | cut -d ' ' -f 2 | xargs svn add
A       app/controllers/application.rb
A       config/database.yml

Ответ 5

По умолчанию команда svn add рекурсивна. Просто укажите его в каталог верхнего уровня вашего проекта, и он должен добавить любой файл, который еще не существует.

Возможно, вы захотите включить параметр --force, но имейте в виду, что это также добавит файлы, которые в противном случае будут исключены из-за svn: ignore (если вы не используете svn: ignore, то у вас не будет любые проблемы).

Ответ 6

Вышеупомянутое решение с awk '{print $2}', к сожалению, не работает, если файлы содержат пробелы. В этом случае это прекрасно работает:

svn st | grep "^?" | sed 's/^?[ \t]*//g' | sed 's/^/"/g' | sed 's/$/"/g' | xargs svn add

где

sed 's/^?[ \t]*//g'

удаляет знак вопроса и пустые символы с самого начала и

sed 's/^/"/g' | sed 's/$/"/g'

содержит имена файлов с кавычками.

Ответ 7

Подход с использованием Perl one-liner добавить все файлы, показанные с помощью вопросительного знака на "svn st", будет:

svn st | perl -ne 'print "$1\n" if /^\?\s+(.*)/' | xargs svn add

Это также должно работать с символами пробела в именах файлов.

Ответ 8

Никто из вас, парни, не полностью прав Я провожу целую ночь, чтобы исправить это, и он работает правильно в моих дженкинсах:

svn status | grep -v "^.[ \t]*\..*" | grep "^?[ \t]*..*" | awk '{print $2}' | sed 's/\\/\//g' | sed 's/\(.*\)\r/"\1"/g' | xargs svn add --parents
svn commit
  • Статус
  • удалить .svn
  • найти? на линии, начинающейся с того, чтобы определить, не преобразовано ли оно  (измените его на | grep "^? [\ t] *. * cpp" | будет добавлять только cpp)
  • удалить? (один из вышеупомянутых потоков - это проблема awk, вы можете попытаться вместо этого используйте tr или sed)
  • заменить splash на linux splash (необязательно, cygwin)
  • заключить строку с цитатой
  • вызов xargs (вы должны добавить --parent, чтобы убедиться, что вспомогательные папки среднего уровня также добавлены, если вы пытаетесь фильтровать cpp или определенный шаблон файла).

Ответ 9

Эта версия вышеприведенных команд учитывает случай, когда переданные файлы или пути к ним содержат пробелы. Однако эта команда все равно будет терпеть неудачу, если путь содержит одну цитату.

svn st |grep ^?| cut -c9-| awk '{print "\x27"$0"\x27"}' | xargs svn add

Я пошел на cut -c9-, чтобы избавиться от ведущих пробелов и предположил, что команда svn st начнет имя файла на 9-м символе на всех машинах. Если вы не уверены, сначала проверьте эту часть команды.

Ответ 10

Эта оболочка script, рекурсивно исследует (svn status) каталоги в вашем проекте, удаляя отсутствующие файлы и, добавляя новые файлы в репозиторий. Это своего рода "хранилище в хранилище, текущий моментальный снимок проекта".

if [ $# != 1 ]
then
    echo  "usage: doSVNsnapshot.sh DIR"
    exit 0
fi

ROOT=$1

for i in `find ${ROOT} -type d \! -path "*.svn*" `
do

    echo
    echo "--------------------------"
    ( cd $i ; 
    echo $i
    echo "--------------------------"


    svn status | awk '  
            /^[!]/ { system("svn rm " $2) }
            /^[?]/ { system("svn add " $2) }
        '
    )
    echo

done

Ответ 11

Я не использовал SVN. Но следующее должно работать.

svn add foo/bar.file bar/foo.file

Это должно добавить файл bar.file в каталог foo и foo.file, существующий в каталоге bar.

И svn add foo должен добавить все файлы в foo к серверу. Флаг "рекурсивный" устанавливается по умолчанию.

И чтобы добавить все файлы в каталог, за исключением нескольких (например, файлы, начинающиеся/заканчивающиеся на ключевые слова tmp, test и т.д.), я не думаю, что есть более чистый/более простой способ сделать это, и лучше написать оболочку script, которая делает это.