Я немного играл с CVS и не очень хорошо знаком со всеми его возможностями, но меня очень раздражает попытка добавить новые каталоги, которые содержат больше каталогов. Запуск "cvs add
" добавляет только содержимое текущей директории, а использование "cvs import
" тоже не выглядит правильным, так как это все равно весь код, который я создаю (в этом howto утверждается, что импорт предназначен для сторонних источников).
Знаете ли вы, ребята, какой-нибудь способ рекурсивно добавить все в заданной директории в текущий проект CVS (или если SVN или git делают это заметно проще)?
Я нашел, что это работало довольно эффективно:
Во-первых, добавьте все справочники, но не любой назвал " CVS":
find . -type d \! -name CVS -exec cvs add '{}' \;
Тогда добавьте все файлы, исключая что-либо в каталоге CVS:
find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs add '{}' \; \)
Теперь, если у кого-либо есть лечение для затруднения использования CVS в этот день и возраста...
А, пробелы. Это будет работать с пробелами:
find . -type f -print0| xargs -0 cvs add
Я использую это:
Сначала добавьте рекурсивно все справочники меньше CVS:
< pre> < code> $ > найти. - тип d \! - имя CVS - должностное лицо cvs добавляют ' {} ' \;Второй добавляют все файлы, меньше каталоги CVS:
< pre> < code$ > найти. \(-тип d - называют CVS - чернослив \)-o \(-тип f - должностное лицо cvs добавляют ' {} ' \; \)Треть действительно «передает» рекурсивно как " первый version" комментарий:
< pre> < code$ > найти. \(-тип d - называют CVS - чернослив \)-o \(-тип f - должностное лицо cvs передают-m " первый version" ' {} ' \; \)В последний раз маркировка всех рекурсивно:
< pre> < code$ > найти. \(-тип d - называют CVS - чернослив \)-o \(-тип f - должностное лицо cvs помечают-F MY_CVS_TAG ' {} ' \; \)Сначала добавьте все справочники к CVS
find . -type d -print0| xargs -0 cvs add
Тогда добавьте все файлы в справочниках к CVS
find . -type f | grep -v CVS | xargs cvs add
Работавший для меня
Этот ответ от Марка был полезен (найти. - тип f-print0 | xargs-0 cvs добавляет), но я решил некоторую проблему, которая произошла, когда cvs добавляют попытку добавить его собственные файлы как Признак, Записи, ect..
Добавьте свою большую часть папки высокого уровня под названием NEW_FOLDER
< pre> cvs добавляют NEW_FOLDERИспользуйте предыдущую команду с некоторым исключением, чтобы добавить все дерево подпапок
найдите NEW_FOLDER/-тип d ! - имя " CVS" - и ! - имя " Tag" - и ! - имя " Записи. Log" - и ! - имя " Entries" - и ! - имя " Repository" - и ! - имя " Root"-print0 | xargs-0 cvs добавляют
найдите NEW_FOLDER/-тип f ! - имя " CVS" - и ! - имя " Tag" - и ! - имя " Записи. Log" - и ! - имя " Entries" - и ! - имя " Repository" - и ! - имя " Root"-print0 | xargs-0 cvs добавляют
'импорт cvs' не только для сторонних источников. На самом деле справочники не versioned CVS, таким образом, они не предмет, чтобы ветвиться политика. Пока Вы импортируете пустые справочники, это прекрасно.
Обратите внимание, что Вы можете только использовать 'cvs, добавляют' на файлах и папках, которые расположены в, уже проверил рабочую копию, иначе Вы доберетесь " не Может открыть CVS/Entries для reading" сообщение. Техника для создания нового " корень module" использование 'cvs добавляет', объяснен в этом пункте часто задаваемых вопросов WinCVS: http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule
Если Вы находитесь на Windows, и TortoiseCVS и WinCVS поддерживают рекурсивное дополнение (и дополнительный передают) нескольких файлов в единственной операции. В WinCvs ищут макро-Add> Рекурсивный Добавляют (автопередают)... У Черепахи используют Добавить команду Содержания на справочнике. Оба позволят Вам выбирать, какие файлы добавить и что способы расширения ключевого слова использовать для них (главным образом используемый для определения, какие файлы двойные).
Поскольку дальнейшая информация о рекурсивном добавляет во взгляде WinCvs здесь: http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive
Кроме этого 'cvs импорт' хорошо подходит для массовых дополнений. Однако путь 'cvs импорт' осуществлен в ванили, у CVS есть два недостатка (потому что это было первоначально написано для стороннего кодекса):
Если Вы используете CVSNT, Вы можете избежать обоих недостатков, определив '-nC' выбор на импорте. '-n' для предотвращения " vendor" отделение и '-c' для создания каталогов CVS.
I' m использующий этот простой скрипт оболочки, который должен быть начат с уже, проверил каталог CVS. Это глупо попытается добавить/передать любые файлы и справочники, которые это находит после его рекурсивного поиска, таким образом, в конце Вы должны закончить с, полностью передают дерево.
Просто сохраните это как что-то как < code>/usr/bin/cvsadd и don' t забывают к < code> chmod +x/usr/bin/cvsadd.
< pre> #!/bin/sh # (#) добавляют файлы и справочники рекурсивно к текущему каталогу CVS # (c) 2009 Дирком Джегдманном < [email protected]>если [-z " 1$ "]; тогда эхо " использование: cvsadd ' импорт message' " выход 1 fi
если [-d " 2$ "]; тогда cvs добавляют " 2$ " CD " 2$ " || выходят 1 fi
если [!-d CVS]; тогда эхо " текущий каталог должен содержать CVS/directory" выход 1 fi
XARGS =" xargs-0-r-t-L 1"
найти.-maxdepth 1 - тип f-print0 | $XARGS cvs добавляет найти.-maxdepth 1 - тип f-print0 | $XARGS cvs ci-m " 1$ "
найти.-maxdepth 1 - тип d - не - называет CVS-a - не - имя.-print0 | $XARGS " 0$ " " 1$ "
Думаю, именно так я и поступала в те времена, когда работала в CVS:
find . -type f | xargs cvs add
Сначала добавьте все справочники к CVS
find . -type d -print0| xargs -0 cvs add
Тогда добавьте все файлы в справочниках к CVS
find . -type f -print0| xargs -0 cvs add
Уже обсужденные методы сделают рекурсивный поиск, но он потерпит неудачу, если Вы выполните то же действие снова (если Вы хотите добавить, что поддерево к существовало дерево), По этой причине Вы должны проверить, что Ваши справочники еще не были добавлены, и затем добавьте только файлы который не добавленный все же. Чтобы сделать это, мы израсходовали продукцию 'cvs', чтобы видеть, какие элементы еще не был добавлен - будет иметь вопросительный знак в начале линии.
Мы используем варианты '-0', '-print0' и '-zZ', чтобы быть уверенным, что мы правильно обрабатываем места в именах файлов. Мы также использующий '-никакой пробег, если пустой', чтобы избежать пробега, если ничто не должно быть добавлено.
CVS_PATTERN=/tmp/cvs_pattern
cvs -z3 -q up | egrep '^\?.*' | sed -e 's/^? //' > $CVS_PATTERN
find . -type d \! -name CVS -print0 | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
find . \( -type d -name CVS -prune \) -o \( -type f -print0 \) | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
cvs commit -m 'commiting tree recursively'
С этим подходом мы избежим таких ошибок:
cvs add: cannot add special file `.'; skipping
cvs [add aborted]: there is a version in ./dirname1 already
и
cvs add: `./dirname2/filename' already exists, with version number 1.1.1.1
[Mark' s решение] (https://stackoverflow.com/a/5262/1287812) решает вопрос мест, но производит эту проблему:
cvs добавляют: не может открыть CVS/Entries для чтение: Никакой такой файл или папка < br/> cvs [добавьте прерванный]: никакое хранилище
Чтобы зафиксировать его, фактическая команда, чтобы использовать:
find . -type f -exec cvs add {} \;
мне нравится делать (как directory' s нужно добавление к),
cvs status 2>/dev/null | awk '{if ($1=="?")system("cvs add "$2)}'
Вы, возможно, должны были бы управлять этим многократно (сначала для directory' s тогда для его детей) до нет никакой продукции
SVN определенно делает эту задачу тривиальной, однако использование графического интерфейса, такого как Tortoise, еще проще.
Это может быть хорошим местом для начала: http://www-mrsrl.stanford.edu/~brian/cvstutorial/