URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3046
[ Назад ]

Исходное сообщение
"практическое использование CVS для большого проекта - два вопроса"

Отправлено Ingvar , 09-Июн-04 23:49 
Привет Всем!
Делаем проект под UNIX (первый), пришла пора использовать систему контроля версий. Выбрали CVS, прочитал кучу документации, много думал, много пробовал, но есть в CVS несколько вещей, которые я пойму только через год-полтора практического использования, а хотелось бы раньше. Может, кто подскажет свою методику? :)
1. Я занимаюсь изменениями в ядре Linux для embedded устройства. Хочется держать под контролем CVS все ядро Linux для него, и файловую систему этого устройства (которая хранится рядом с ядром для него), но непонятно как это сделать с начала. Если я делаю в соответствии с документацией: import, потом удаление этой директории, потом checkout на старое место, CVS теряет некоторые файлы, которые вроде не исходники, но вроде и нужны - это файлы устройств (/dev/...) в файловой системе  девайса, некоторые файлы настроек, файлы hdepend и т.д. Выходом кажется импортировать только файлы с определенным расширением (*.c, *.h, *.s,...), но я пока только понимаю как запретить некоторые расширения. А вот как разрешить только определенные разрешения к импорту? И что потом, как вернуть остальные файлы на место после chekout по всей куче директорий - писать скрипт для этого? Наверняка я просто чего-то не понимаю. Описывать вручную около сотни расширений как запрещенные - наверное все-таки есть второй метод. Какова вообще Ваша методика в подобном случае?
2. Если я сделал изменения в локальной копии файла, потом подумал, и решил их отменить - простите мою серость, нашел только один путь: удалить локальный файл и сделать update - иначе update только сообщает о разнице, и все. Как забрать файл из репозитория, переписав локальный файл сверху?
Спасибо за помощь,
Игорь.

Содержание

Сообщения в этом обсуждении
"практическое использование CVS для большого проекта - два во..."
Отправлено vnp , 10-Июн-04 02:25 
>Привет Всем!
>Делаем проект под UNIX (первый), пришла пора использовать систему контроля версий. Выбрали
>CVS, прочитал кучу документации, много думал, много пробовал, но есть в
>CVS несколько вещей, которые я пойму только через год-полтора практического использования,
>а хотелось бы раньше. Может, кто подскажет свою методику? :)
>1. Я занимаюсь изменениями в ядре Linux для embedded устройства. Хочется держать
>под контролем CVS все ядро Linux для него, и файловую систему
>этого устройства (которая хранится рядом с ядром для него), но непонятно
>как это сделать с начала. Если я делаю в соответствии с
>документацией: import, потом удаление этой директории, потом checkout на старое место,
>CVS теряет некоторые файлы, которые вроде не исходники, но вроде и
>нужны - это файлы устройств (/dev/...) в файловой системе  девайса,
>некоторые файлы настроек, файлы hdepend и т.д. Выходом кажется импортировать только
>файлы с определенным расширением (*.c, *.h, *.s,...), но я пока только
>понимаю как запретить некоторые расширения. А вот как разрешить только определенные
>разрешения к импорту? И что потом, как вернуть остальные файлы на
>место после chekout по всей куче директорий - писать скрипт для
>этого? Наверняка я просто чего-то не понимаю. Описывать вручную около сотни
>расширений как запрещенные - наверное все-таки есть второй метод. Какова вообще
>Ваша методика в подобном случае?

Честно говоря, никогда не сталкивался с "потерей файлов", но не думаю, что запрет на импорт сколько-нибудь поможет (извините, если чего не понял).

Прежде всего, теряются ли файлы при импорте или при чекауте (т.е. попали ли "пропавшие файлы" в репозиторий)? Какие на них permissions?

>2. Если я сделал изменения в локальной копии файла, потом подумал, и
>решил их отменить - простите мою серость, нашел только один путь:
>удалить локальный файл и сделать update - иначе update только сообщает
>о разнице, и все. Как забрать файл из репозитория, переписав локальный
>файл сверху?

update -C

>Спасибо за помощь,
>Игорь.



"практическое использование CVS для большого проекта - два во..."
Отправлено Ingvar , 10-Июн-04 17:17 
>Прежде всего, теряются ли файлы при импорте или при чекауте (т.е. попали
>ли "пропавшие файлы" в репозиторий)? Какие на них permissions?

Пардон, я, может, неправильно выразился. Имеется в виду, что включать вообще все файлы не хочется - хочется включать только некоторые (исходники и настроечные файлы + некоторые скрипты). Если позапрещать все остальные файлы, то методика вноса проекта в CVS такова (по инструкции):
1. делаем import нужных файлов
2. удаляем директорию, из которой делался import
3. делаем checkout

После этого в этой директории (которая находится теперь под контролем CVS), находятся только исходники, настроечные файлы + некоторые скрипты. Для компиляции и работы ядра нужна еще целая туча файлов в целой туче директорий, которые генерируются автоматически (всякие depend, и т.д.). Как их теперь вернуть на свои места, вот в чем вопрос? Сохранить предварительно старую директорию и возвращать файлы на места вручную? Мне просто непонятна методика - как правильно действовать? Как с этим надо работать для больших проектов с большим количеством и вложенностью директорий?
Спасибо,
Игорь


"практическое использование CVS для большого проекта - два во..."
Отправлено ACCA , 10-Июн-04 20:38 
[...]
>После этого в этой директории (которая находится теперь под контролем CVS), находятся
>только исходники, настроечные файлы + некоторые скрипты. Для компиляции и работы
>ядра нужна еще целая туча файлов в целой туче директорий, которые
>генерируются автоматически (всякие depend, и т.д.). Как их теперь вернуть на
>свои места, вот в чем вопрос? Сохранить предварительно старую директорию

Теперь это забота make. То, что отдал CVS, должно быть достаточно, чтобы сгенерировать весь этот зоопарк с нуля.

Рекомендуемая методика должна выглядеть вот как:

Какой-нибудь make distclean должен оставлять только то, что идёт в CVS,  готовый для import каталог, в котором не нужно шарить руками.

make all должен сам себе все приготовить и собрать что полагается.

checkout вернёт в состояние после make distclean.


"практическое использование CVS для большого проекта - два во..."
Отправлено Ingvar , 15-Июн-04 21:44 
Спасибо! Поковырялся немного, если можно, ответьте, пожалуйста, на более конкретные вопросы.
1. В дистрибутиве версии Linux, который мне предоставил производитель, в каждой директории есть файл .cvsignore, который CVS принимает во внимание, когда импортирует эту директорию. Это стандартная практика при выдаче исходников, или это редкое исключение из правил?
2. Я сделал импорт этого проекта, а потом попытался сделать checkout прям на старое место (в ту же директорию, откуда делал импорт). Оно в принципе сработало, но нерекурсивно - то есть, выдало мне только верхнюю директорию, и создало в ней каталог CVS. Для всех остальных поддиректорий работает, но только если сделать ее checkout в явном виде. Если делать checkout в другое место, или удалить старую директорию, работает нормально. Странное поведение, вроде написано, что опция -R включена по умолчанию ... впрочем, указывать -R бесполезно - никакого эффекта, все равно работает нерекурсивно.  Этому есть какое-либо объяснение? Может, в старой директории что-то мешает или ее останавливает?

PS. несмотря на то, что при созданиии сообщения в форум я указываю "!" перед своим почтовым адресом, сообщения и ответы на него на почту не дублируются ... это нормально, у всех так работает?

Спасибо, с уважением,
Игорь.


"сегодня продублировалось на почту. Видать, починили ....(-)"
Отправлено Ingvar , 17-Июн-04 19:26 
subj