![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Введение в CVS Конспект первого дня двухдневного курса по CVS |
Jim Bla dy Для чего нужен CVS? CVS поддерживает историю дерева каталогов с исходным кодом, работая с последовательностью изменений. CVS маркирует каждое изменение моментом времени, когда оно было сделано, и именем пользователя, совершившим изменение. Обычно человек, совершивший изменение, также предоставляет текстовое описание причины, по которой произошло изменение. Вооружившись всей этой информацией, CVS может отвечать на такие вопросы, как Кто совершил данное изменение? Когда они его совершили? Зачем они это сделали? Какие еще изменения произошли в то же самое время? Как использовать CVS -- первый набросок Перед обсуждением множества разнобразных терминов и идей, давайте взглянем на основные команды CVS. Настройка вашего репозитория CVS хранит все изменения в данном проекте в дереве каталогов, называемом "репозиторием" (reposi ory). Перед тем, как начать использовать CVS, вам необходимо настроить переменную среды CVSROO так, чтобы она указывала на каталог репозитория. Тот, кто ответственен за управление конфигурацией вашего проекта, вероятно, знает, что именно должна содержать в себе эта переменная; возможно даже, что переменная CVSROO уже установлена глобально. В любом случае, на нашей системе репозиторий находится в `/usr/src/mas er'. В этом случае вам следует ввести команды ` se e v CVSROO /usr/src/mas er ' если ваш командный интерпретатор -- csh или порожден от него, или ` CVSROO =/usr/src/mas er expor CVSROO если это Bash или какой-либой другой вариант Bour e shell. Если вы забудете сделать это, CVS пожалуется, если вы попытаетесь запустить его: $ cvs checkou h pc cvs checkou : o CVSROO specified! Please use he `-d' op io cvs : or se he CVSROO e viro me variable. $ Извлечение рабочего каталога CVS не может работать в обычном дереве каталогов; наоборот, вы должны работать в каталоге, который CVS создаст для вас. Точно так же, как вы выписываете книгу из библиотеки перед тем, как забрать ее с собой, вам следует использовать команду `cvs checkou ', чтобы получить от CVS рабочее дерево каталогов. Предположим, например, что вы работаете над проектом, называемым `h pc', тривиальным H P клиентом: $ cd $ cvs checkou h pc U h pc/.cvsig ore U h pc/Makefile U h pc/h pc.c U h pc/poll-server $ Команда `cvs checkou h pc' означает "Извлечь дерево исходных текстов с именем `h pc' из репозитория, указанного в переменной окружения `CVSROO '." CVS помещает дерево в подкаталог `h pc': $ cd h pc $ ls -l o al 8 drwxr-xr-x 2 jimb 512 Oc 31 11:04 CVS -rw-r--r-- 1 jimb 89 Oc 31 10:42 Makefile -rw-r--r-- 1 jimb 4432 Oc 31 10:45 h pc.c -rwxr-xr-x 1 jimb 460 Oc 30 10:21 poll-server Большинство этих файлов -- рабочие копии исходных текстов `h pc'. Однако, подкаталог с именем `CVS' (самый первый) имеет другое назначение. CVS использует его для хранения дополнительной информации о каждом файле в этом каталоге, чтобы определять, какие изменения вы внесли в них с тех пор, как извлекли их из репозитория. Редактирование файлов После того, как CVS создал рабочее дерево каталогов, вы можете обычным образом редактировать, компилировать и проверять находящиеся в нем файлы -- это просто файлы.
Например, предположим, что мы хотим скомпилировать проект, который мы только что извлекли: $ make gcc -g -Wall -l sl -lsocke h pc.c -o h pc h pc.c: I fu c io ` cp co ec io ': h pc.c:48: war i g: passi g arg 2 of `co ec ' from i compa ible poi er ype $ Кажется, `h pc.c' еще не был перенесен на эту операционную систему. Нам нужно сделать приведение типов для одного из аргументов функции co ec . Чтобы сделать это, надо изменить строку 48, заменив if (co ec (sock, & ame, sizeof ( ame)) >= 0) на if (co ec (sock, (s ruc sockaddr ) & ame, sizeof ( ame)) >= 0) $ make gcc -g -Wall -l sl -lsocke h pc.c -o h pc $ h pc GE .здесь находится текст H ML с домашней страницы Cyclic Sof ware . $ Объединение изменений Так как каждый разработчик использует свой собственный рабочий каталог, изменения, которые вы делаете в своем каталоги, не становятся автоматически видимыми всем остальным в вашей команде. CVS не публикует изменений, пока они не закончены. Когда вы протестируете изменения, вы должны "зафиксировать" (commi ) их в репозитории и сделать их доступными остальным. Мы опишем команду cvs commi далее. Однако, что если другой разработчик изменил тот же файл, что и вы, и, может быть, даже изменил те же самые строки? Чьи изменения будет использованы? Обычно ответить на этот вопрос автоматически невозможно, и CVS совершенно точно некомпетентен, чтобы принимать такие решения. Поэтому перед тем, как фиксировать ваши изменения, CVS требует, чтобы исходные тексты были синхронизированы со всеми изменениями, которые сделали остальные члены группы. Команда cvs upda e позаботится об этом: $ cvs upda e cvs upda e: Upda i g . U Makefile RCS file: /u/src/mas er/h pc/h pc.c,v re rievi g revisio 1.6 re rievi g revisio 1.7 Mergi g differe ces be wee 1.6 a d 1.7 i o h pc.c M h pc.c $ Рассмотрим пример строка за строкой: `U Makefile' Строка вида `U файл' означает, что файл просто был обновлен; кто-то еще внес в этот файл изменения, и CVS скопировал измененный файл в ваш рабочий каталог. `RCS file:. re rievi g revisio 1.6 re rievi g revisio 1.7 Mergi g differe ces be wee 1.6 a d 1.7 i o h pc.c' Это сообщение означает, что кто-то еще изменил `h pc.c'; CVS объединила их изменения с вашими и не обнаружила текстуальных конфликтов. Цифры `1.6' и `1.7' -- это номера редакции (revisio umbers), используемые для обозначения определенных точек истории файла. Заметьте, что CVS объединяет изменения только в вашей рабочей копии; репозиторий и рабочие каталоги других разработчиков остаются нетронутыми. От вас требуется протестировать объединенный текст и убедиться, что он верен. `M h pc.c' Строка вида `M файл' означает, что файл был модифицирован вами и содержит изменения, которые еще не стали видны другим разработчикам. Это -- изменения, которые вам следует зафиксировать. Так как CVS объединила чьи-то еще изменения с вашими исходными текстами, следует убедиться, что они все еще работают: $ make gcc -g -Wall -l sl -lsocke h pc.c -o h pc $ h pc GE .H ML ex for Cyclic Sof ware's home page follows. $ Фиксирование изменений Теперь, когда вы синхронизировали свои исходники с коллегами и протестировали их, вы готовы поместить свои изменения в репозиторий и сделать их видимыми остальным разработчикам.
Единственный файл, который вы изменили -- это `h pc.c', но в любом случае можно без опаски запустить cvs upda e, чтобы получить от CVS список модифицированных файлов: $ cvs upda e cvs upda e: Upda i g . M h pc.c $ Как и ожидалось, единственный файл, который упоминает CVS -- это `h pc.c'; CVS говорит, что этот файл содержит изменения, которые еще не были зафиксированы. Вы можете зафиксировать их так: $cvs commi h pc.c В этом месте CVS запустит ваш любимый текстовый редактори попросит вас ввести описание изменений. После того, как вы выйдете из редактора, CVS зафиксирует ваши изменения: Checki g i h pc.c; /u/src/mas er/h pc/h pc.c,v &l ;-- h pc.c ew revisio : 1.8; previous revisio : 1.7 $ Заметьте, что теперь вы зафиксировали ваши изменения и они видны всем остальным членам группы. Когда другой разработчик исполняет cvs upda e, CVS внесет ваши изменения в файлы в его рабочем каталоге. Отслеживание изменений Теперь вы, возможно, захотите узнать, какие именно изменения внес другой разработчик в файл `h pc.c'. Чтобы увидеть журнальные записи для данного файла, можно использовать команду cvs log: $ cvs log h pc.c RCS file: /usr/src/mas er/h pc/h pc.c,v Worki g file: h pc.c head: 1.8 bra ch: locks: s ric access lis : symbolic ames: keyword subs i u io : kv o al revisio s: 8; selec ed revisio s: 8 descrip io : he o e a d o ly source file for rivial H P clie ---------------------------- revisio 1.8 da e: 1996/10/31 20:11:14; au hor: jimb; s a e: Exp; li es: 1 -1 ( cp co ec io ): Cas address s uc ure whe calli g co ec . ---------------------------- revisio 1.7 da e: 1996/10/31 19:18:45; au hor: fred; s a e: Exp; li es: 6 -2 (ma ch header): Make his es case-i se si ive. ---------------------------- revisio 1.6 da e: 1996/10/31 19:15:23; au hor: jimb; s a e: Exp; li es: 2 -6 . $ Большую часть текста здесь вы можете игнорировать; следует только обратить внимание на серию журнальных записей после первой строки черточек. Журнальные записи выводятся на экран в обратном хронологическом порядке, исходя из предположения, что недавние изменения обычно более интересны. Каждая запись описывает одно изменение в файле, и может быть разобрано на составные части так: `revisio 1.8' Каждая версия файла имеет уникальный "номер редакции". Номера ревизии выглядят как `1.1', `1.2', `1.3.2.2' или даже `1.3.2.2.4.5'. По умолчанию номер 1.1 -- это первая редакция файла. Каждое следующее редактирование увеличивает последнюю цифру на единицу. `da e: 1996/10/31 20:11:14; au hor: jimb; .' В этой строке находится дата изменения и имя пользователя, зафиксировавшего это изменение; остаток строки не очень интересен. `( cp co ec io : Cas .' Это, очевидно, описание изменения. Команда cvs log может выбирать журнальные записи по дате или по номеру редакции; за описанием деталей обращайтесь к руководству. Если вы хотите взглянуть на соответствующее изменение, то можете использовать команду cvs diff. Например, если вы хотите увидеть, какие изменения Фред зафиксировал в качестве редакции 1.7, используйте такую команду: $ cvs diff -c -r 1.6 -r 1.7 h pc.c
Корабли идут к Тулоксе Все готово к предстоящим действиям. Боевой приказ доведен до исполнителей. Задачу знает каждый боец Коммунисты и комсомольцы (а их в бригаде около 2 тысяч) провели свои собрания. Повестка дня почти у всех одинакова: о предстоящих действиях в составе десанта. И решения близки по духу: место коммуниста и комсомольца впереди. 22 июня в 15 часов 25 минут корабли первого эшелона легли курсом на север. В небе непрерывно барражировали наши истребители. Корабли и транспорты со скоростью пять узлов в час (чуть более девяти километров в час) двигались двумя кильватерными колоннами. Вели их опытные моряки: командующий десантной операцией контр-адмирал В. С. Чероков, начальник походного штаба десантной операции капитан 1-го ранга К. М. Кузнецов, командир отряда высадки капитан 1-го ранга Н. И. Мещерский, командир отряда кораблей артиллерийской поддержки капитан 1-го ранга В Н. Лежава, флагманский штурман флотилии капитан 2-го ранга В. Г. Паршин, флагманский штурман кораблей артиллерийской поддержки Г. Ф
1. Опорные конспекты по курсу "Основы Политологии"
2. Ведение в курс "Основы экономической теории" (Введення в курс "Основи економiчної теорiї)
3. Изобретатель первого в мире радиоприемника (к 100-летию со дня изобретения А. С. Попова)
4. Конспект лекций по курсу Страхование
5. Конспект лекций по курсу "Защита населения"
10. Билеты по биологии за курс 10-11 классов
11. Экзаменационные билеты по курсу "Биология" (9 класс сш)
12. Бактериальная система секреции белков первого типа
13. Безопасность жизнедеятельности (конспект лекций)
14. Витус Беринг. Первая Камчатская Экспедиция
15. Отчёт по летней геодезической практике за 1 курс
16. Бухгалтерский учёт и аудит в банках (курс лекций)
17. Определения суда первой инстанции
18. Тамбовский край в первой русской революции
19. Россия в эпоху правления Петра Первого
20. Детство и первая молодость Иоанна IV
21. Оценка реформ Петра первого славянофилами и западниками
25. Южный Урал в период первой русской революции 1905 – 1907гг.
26. Введение «Временного положения» 1867-1868 гг. и политико-правовые последствия для казахов
27. Первые шаги к перестройке – развалу страны
28. Н.Ф.Катанов - первый хакасский учёный
29. Краткий курс лекций по праву социального обеспечения
30. Конспект учебника Новицкого И.Б., "Римское право", 1993
31. Решение задач по курсу "семейное право"
32. Контрольная работа по курсу экологического права
33. Лингвистика - влияние первого языка на изучении второго
34. Темы для экзамена в Финансовой академии, 1 курс
35. Культурология (Шпоры - Экзамен. вопросы 4-курс)
36. Ответы на вопросы к зачету по курсу культурологии
37. Психологизм в русской литературе. Лекция из курса проф. В.Гудонене
41. Литература русского зарубежья первой половины XX века (По произведениям В. В. Набокова)
42. Темы сочинений за курс средней школы 2002-2003 уч. года (11 класс)
43. Петербург в творчестве поэтов-эмигрантов первой волны
44. Первые годы У. Шекспира в театре. Начальное творчество У. Шекспира
45. Билеты по литературе (2 курс 2 семестр, 2004г.)
46. Анализ финала Первой сонаты Л. Бетховена
47. Петр Первый. Исторический портрет
48. Александр Грехам Белл - создатель первого телефона
50. Иван IV – первый царь Всея Руси
51. Англо-германские противоречия накануне первой мировой войны
52. Ужесточение конфронтации между СССР и США в первой половине 80-х годов
53. Развитие науки и техники в России в первой половине XVIII века
57. Древневосточные цивилизации (по курсу "Россия в мировой истории")
58. Исторический опыт реформаторской деятельности самодержавия в первой половине XIX в.
59. Курс лекций и семинаров "История России: 1861-1995 гг."
60. Наука и культура первой половины XIX в.
61. Основные формы операций по прорыву позиционного фронта в годы первой мировой войны
62. Подготовительный курс по Истории России для поступающих в Академию МВД РФ
63. Рождение Российской Империи и реформы Петра Первого
64. Россия и первая мировая Война
66. Военные действия в ходе первой мировой войны
68. Медицинское обеспечение российской армии в период Первой Мировой Войны
69. Лекции по курсу "Периферийные устройства компьютеров"
73. Разработка курса по OS (2 Warp (WinWord)
75. Расчет дифференциального уравнения первого, второго и третьего порядка методом Эйлера
76. Методические указания по курсу "Математика" для студентов I курса исторического факультета
77. Шпаргалки по высшей математике (1 курс)
78. Изучение функций в школьном курсе математики VII-VIII классов
79. Оказание первой медицинской помощи при автомобильных катастрофах
83. Описание экзам препаратов, конспекты тем, + экзам тест по пат анатомии
85. Основной курс биологии 8 класс
89. Изучение функций в школьном курсе математики VII-VIII классов
90. История Всесоюзной Коммунистической Партии /Большевиков/: Краткий курс
92. Постиндустриальное общество. Советский Союз во второй половине 60-Х - первой половине 80-Х гг.
93. Кризис системы. Смена политического курса
94. Строительные материалы (лекции за 2-й курс)
95. Конспект лекций и ответы на экзаменационные вопросы по предмету Термическая Обработка
96. Патентный поиск на тему: "Современная оснастка станка" по курсу "Основы научной деятельности"
97. Расчет первой ступени паровой турбины ПТУ К-500-65 (3000 (Курсовой)
98. Отчет по первой производственной (строительной) практике на муниципальном предприятии «Зеленхоз»