Как добавить CVS каталоги рекурсивно

голоса
35

Я играл с CVS немного , и я не самый знакомый со всеми его возможностями, но огромная досада для меня пытается добавить новые каталоги , которые содержат больше каталогов в них. Запуск « cvs add» только добавляет содержимое текущего каталога, а также с помощью « cvs import» не выглядел , как правильно либо , так как это все-таки весь код я продюсирование (это HOWTO заявляемого импорт для 3 - го источников партии )

Как вы, ребята, знаете, какой-либо способ рекурсивно добавлять все, что в данной директории текущего проекта CVS (или SVN или Git делает это заметно проще)?

Задан 07/08/2008 в 19:05
источник пользователем
На других языках...                            


14 ответов

голоса
69

Я нашел, что это работает довольно эффективно:

Во-первых, добавить все каталоги, но не любой названный «CVS»:

find . -type d \! -name CVS -exec cvs add '{}' \;

Затем добавьте все файлы, за исключением ничего в директории CVS:

find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs add '{}' \; \)

Теперь, если у кого есть лекарство от смущения использования CVS в этот день и возраст ...

Ответил 01/03/2011 в 18:31
источник пользователем

голоса
10

Ах, пространство. Это будет работать с пробелами:

find . -type f -print0| xargs -0 cvs add
Ответил 07/08/2008 в 21:22
источник пользователем

голоса
8

Я использую это:

Сначала нужно добавить рекурсивно все каталоги меньше тех CVS:

$> find . -type d \! -name CVS -exec cvs add '{}' \;

Во-вторых добавить все файлы, меньше из них в CVS директории:

найти . \ (-типа д -name CVS -prune \) -о \ (типа F -exec резюме добавить '{}' \; \)

В-третьих же «совершить» рекурсивно, как «первая версия» комментарий:

найти . \ (-типа д -name CVS -prune \) -о \ (типа F -exec резюме фиксации -m "первый вариант" '{}' \; \)

Последнее мечение все рекурсивно:

найти . \ (-тип д -name CVS -prune \) -о \ (тип F -exec резюме тега -F MY_CVS_TAG '{}' \; \)
Ответил 17/07/2014 в 09:21
источник пользователем

голоса
5

Сначала добавьте все каталоги в CVS

find . -type d -print0| xargs -0 cvs add

Затем добавьте все файлы в каталогах, в CVS

find . -type f | grep -v CVS | xargs cvs add

Работал для меня

Ответил 05/10/2010 в 09:46
источник пользователем

голоса
2

Этот ответ от Марка был полезно (найти -тип х -print0 |. Xargs -0 резюме добавить), но я решил некоторые проблемы, которые произошли, когда резюме добавить пытаются добавить свои собственные файлы, как Tag, записи, ЭСТ ..

  1. Добавить наиболее высокий уровень папки под названием new_folder
резюме добавить new_folder
  1. Используйте предыдущую команду с некоторым исключением, чтобы добавить все суб-дерево папок

найти new_folder / -type д! -name "CVS" й! -name "Tag" й! -name "Entries.Log" й! -name «Запись» й! -name "Repository" й! -name "Root" -print0 | xargs -0 резюме добавить

  1. Используйте предыдущую команду с некоторым исключением, чтобы добавить все файлы

найти new_folder / -type п! -name "CVS" й! -name "Tag" й! -name "Entries.Log" й! -name «Запись» й! -name "Repository" й! -name "Root" -print0 | xargs -0 резюме добавить

Ответил 07/06/2016 в 09:29
источник пользователем

голоса
2

Обратите внимание , что вы можете использовать только cvs addдля файлов и папок , которые находятся внутри уже проверили рабочую копию, в противном случае вы получите «Не удается открыть CVS / записи для чтения» сообщение. Техника для создания нового «модуль корня» с использованием cvs addописанного в этом WinCvs FAQ пункт: http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule

Если вы на Windows, как TortoiseCVS и WinCVS поддерживают рекурсивное добавление (и необязательно фиксацию) нескольких файлов в одной операции. В WinCvs искать макро Добавить> Рекурсивный Add (автофиксация) ... В Tortoise используйте Добавить Contents команду на каталог. И позволит вам выбрать, какие файлы для добавления и какие ключевые режимы расширения для использования их (в основном используются для определения того, какие файлы являются бинарными).

Для получения дополнительной информации о рекурсивной оных в WinCvs смотрите здесь: http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive


Кроме того cvs import, хорошо подходит для масс-дополнений. Тем не менее, способ cvs importреализуется в ванильным CVS имеет два недостатка (потому что она была первоначально написана для стороннего кода):

  • он создает обязательную ветвь с особой семантикой.
  • он не создает хранилище метаданных (то есть скрытые CVS каталогов), необходимых для создания импортируемого кода в качестве рабочей копии, а это значит, что для того, чтобы реально работать с импортированными файлами вы должны сначала проверить их из хранилище

Если вы используете CVSNT вы можете избежать обоих недостатков, указав -nCопцию импорта. -nдля избежания сука «поставщика» и -Cдля создания CVS каталогов.

Ответил 06/11/2008 в 11:38
источник пользователем

голоса
2

cvs importне только для источников третьих сторон. На самом деле, каталоги не версионируются по CVS, поэтому они не подлежат политике отрасли. До тех пор, как вы импортировать пустые каталоги, это прекрасно.

Ответил 29/08/2008 в 22:28
источник пользователем

голоса
1

Уже рассмотренные методы будут делать рекурсивный поиск, но это не сработает , если вы выполняете то же действия снова (если вы хотите добавить поддерево к существовавшему дереву) По этой причине вам необходимо убедиться , что ваши каталоги еще не были добавлены , а затем добавить только те файлы , которые не добавил еще. Для этого мы используем вывод , cvs upчтобы увидеть , какие элементы еще не были добавлены - его будет иметь знак вопроса в начале строки.

Мы используем варианты -0, -print0и -zZбыть уверенным , что мы правильно обрабатывать пробелы в именах файлов. Мы также используем , --no-run-if-emptyчтобы избежать бежать , если ничего не нужно добавлять.

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
Ответил 03/07/2014 в 08:58
источник пользователем

голоса
1

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

Просто сохраните это как - то вроде /usr/bin/cvsaddи не забудьте chmod +x /usr/bin/cvsadd.

#! / Bin / ш
# @ (#) Добавлять файлы и каталоги рекурсивно к текущей директории CVS
# (С) 2009 Дирк Jagdmann 

если [-z "$ 1"]; тогда
    эхо «Использование: cvsadd„импорта сообщение“»
    выход 1
фи

если [-d "$ 2"]; тогда
    резюме добавить «$ 2»
    CD "$ 2" || выход 1
фи

если [ ! CVS -d]; тогда
    эхо «текущий каталог должен содержать CVS / каталог»
    выход 1
фи

XARGS = "xargs -0 -r -t -L 1"

# Сначала добавить все файлы в текущем каталоге
найти . -maxdepth 1 -тип х -print0 | $ XARGS резюме добавить
найти . -maxdepth 1 -тип х -print0 | $ XARGS резюме CI -m "$ 1"

# Затем добавить все каталоги
найти . -maxdepth 1 -тип д -не -name C -a -на -name. -print0 | $ XARGS "$ 0" "$ 1"
Ответил 30/12/2009 в 12:39
источник пользователем

голоса
1

Сначала добавьте все каталоги в CVS

find . -type d -print0| xargs -0 cvs add

Затем добавьте все файлы в каталогах, в CVS

find . -type f -print0| xargs -0 cvs add
Ответил 29/08/2008 в 19:06
источник пользователем

голоса
1

Я думаю, что это то, что я сделал еще в моих CVS дней:

find . -type f | xargs cvs add
Ответил 07/08/2008 в 19:25
источник пользователем

голоса
0

я хотел бы сделать (как потребность каталога в надстройку к)

cvs status 2>/dev/null | awk '{if ($1=="?")system("cvs add "$2)}'

Вы, возможно, потребуется запустить это несколько раз (первый для справочника, то для своих детей) до тех пор, пока не выводится

Ответил 18/07/2013 в 11:20
источник пользователем

голоса
0

Решение Марка решает проблему пробелов, но производит этот вопрос:

резюме добавить: не могу открыть CVS / Записи для чтения: Нет такого файла или каталога
CVS [добавить прерванный]: нет хранилищу

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

find . -type f -exec cvs add {} \;
Ответил 07/08/2008 в 22:18
источник пользователем

голоса
0

SVN определенно делает это тривиальная задача, используя графический интерфейс, как черепаха еще проще, однако.

Это может быть хорошим местом для начала: http://www-mrsrl.stanford.edu/~brian/cvstutorial/

Ответил 07/08/2008 в 19:08
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more