ВведениеВDarcs
##masterpage GettingStarted #language ru #format wiki #pragma section-numbers off
= Введение в Darcs =
Среди немалого числа систем управления версиями (Subversion, Arch, Monotone и другие), Darcs выделяется своей простотой и продуманным дизайном.
С darcs вы можете начать управление версиями своего проекта в считанные секунды. Попробуйте: {{{ $ mkdir ~/myproject $ cd ~/myproject $ darcs init }}} Всё, репозиторий готов к работе. Поместите в эту директорию свои рабочие файлы и сообщите Darcs, что вы хотите отслеживать их версии: {{{ $ darcs add -r * $ darcs record -am "Initial import." Finished recording patch 'Initial import.' }}} Теперь репозиторий содержит все файлы вашего проекта. Посмотрим список изменений: {{{ $ darcs changes Thu Nov 25 06:26:19 CET 2004 * Initial import. }}} Отметим, что Darcs автоматически генерирует список изменений в формате, принятом в проектах GNU.
Вас может заинтересовать, где же номера ревизий? Очень просто - их нет, поскольку в них нет нужды. Darcs является системой ориентированной на работу с наборами изменений (changesets), а не с файлами. Вы можете ссылаться на набор изменений (changeset) по имени, дате или специальной метке хеша.
Итак, а где же сервер? Ведь требуется сервер, чтобы другие люди могли получить доступ к репозиторию? Кратко тут можно ответить: ''каждый'' репозиторий потенциально может быть сервером, если он доступен через файловую систему, SSH/SFTP, HTTP или эл.почту.
Давайте попробуем получить небольшой удалённый репозиторий для экспериментов:
- {{{
$ darcs get http://www.ScannedInAvian.org/repos/wikiwiki Copying patch 47 of 47... done! Applying patches to the "working" directory... .......................................................................... Finished getting.
}}}
Итак, мы получили полную копию удалённого репозитория. Попробуем внести изменения: {{{ $ cd wikiwiki $ echo 'adding new line to file' >>scribble $ darcs whatsnew --summary M ./scribble +1 $ darcs whatsnew { hunk ./scribble 2 +adding new line to file } }}} Вывод последней команды - это формат патчей Darcs. Фрагмент ("hunk") это построчная разница ("diff"). Другие виды изменений могут включать переименования, перемещения или изменения бинарных данных. Можно также получить вывод совместимый с GNU diff (как в "cvs diff") посредством вызова `darcs diff --unified` (т.называемый "унифицированный diff").
Теперь давайте подтвердим изменения и отправим их обратно в репозиторий: {{{ $ darcs record -am "Added critical new line." Finished recording patch 'Added critical new line.' $ darcs send -a Creating patch to http://www.ScannedInAvian.org/repos/wikiwiki... Sending by email to Successfully sent patch bundle to . }}}
[http://www.scannedinavian.org/cgi-bin/darcs.cgi/wikiwiki/?c=patches См. свои изменения здесь]
Пока всё просто? Так, сложно и не будет!
== Несколько ключевых возможностей ==
Наборы изменений Darcs не просто патчи в стиле GNU, они имеют дополнительные взаимосвязи, которые позволяют к примеру такие вещи: кто-нибудь перемещает в репозитории файл "пример.c" в директорию "директория1" и подтверждает изменения, в это же время другой человек, работавший со старой копией того же репозитория, редактирует файл "пример.c" (остающийся для него на старом месте) и также подтверждает изменения. Darcs самостоятельно определяет что "пример.c" нужно поместить в новое место, в папку "директория1" -- в отличие от CVS, которая потребует сначала сделать "cvs update" для синхронизации с репозиторием, когда вы помещаете файлы уже изменённые кем-то на сервере. Другими словами, можно беспрепятственно помещать изменения и конфликты требующие вмешательства человека будут случаться, только когда разные люди изменили одни и те же строки общего файла.
В противоположность CVS и Subversion, но подобно Arch и Monotone, Darcs является "распределённой" системой управления версиями. Репозитории - это острова несинхронизированные друг с другом и система патчей Darcs управляет потоками изменений между ними.
Данная система имеет несколько весьма полезных особенностей:
[http://sourcefrog.net/weblog/software/vc/arch/server-offline.html Офлайн-режим]. Вы можете подтверждать изменения, даже если вы не имеете доступа к серверу (например решили поработать на ноутбуке где-нибудь на природе, где даже GPRS не ловит). Это работает, поскольку директория вашего проекта, управляемая Darcs является полноценным репозиторием, все изменения сохраняются в нём. Вы приезжаете домой или на работу, подключаете ноутбук к сети и просто переносите все ранее сделанные изменения с помощью "darcs push" на публично доступный сервер.
'''Простота ветвления'''. В Dars каждый репозиторий фактически является отдельной веткой. Работаете над новой функцией, но потребовалось срочно исправить ошибку? Тогда публикуете изменения относящиеся к багфиксу, подтверждаете изменения и продолжаете работу над своей новой функцией - ваш репозиторий будет веткой основной разработки.
'''Режим Линуса'''. Например, вы хотите добавить новую функцию или исправить ошибку в open-source проекте. Вы делаете локальную копию репозитория в Darcs, производите нужные изменения и отправляете патчи по эл. почте (команда "darcs send"). Майнтейнер проекта решает принять или отклонить изменения. Таким образом, вам не требуется непосредственного доступа на запись в репозиторий проекта. Таким образом поддерживается сам проект Darcs, подобным же путём Линусом Торвальдсом ведётся (велась ранее?) разработка ядра Linux.
'''Параллельная разработка'''. К примеру, в участвуете в разработке open-source проекта и сделали ряд важных, на ваш взгляд, изменений, но официальные майнтейнеры проекта не приняли их. Нет проблем -- вы публикуете свой репозиторий с изменениями, делая релиз своего дистрибутива проекта. Да, это то что зовётся "форк" (и то что часто ставят в упрёк проектам свободного п/о), но этот "форк" по-прежнему связан с основной разработкой. Ведь когда основной проект вносит новые правки в код, вы просто делаете "darcs pull", чтобы принять их и разрешаете возможные конфликты. Новая ветка разработки ведётся параллельно с основной и при необходимости может быть объединена с ней в любое время. Таким образом, легко разделить разработку, но в то же время легко объединять параллельно ведомые разработки, интегрируя наработки независимых разработчиков - "форк" перестаёт быть тем злом, которым его пытаются представить представители проприетарного п/о.
'''Простота ведения версий файлов конфигурации'''. CVS/RCS популярна для ведения версий файлов и конфигов в домашних директориях, /etc, и т.д. С Darcs вы получаете простоту RCS наряду с мощью ...с мощью Darcs, короче. Централизованное ведение общего конфига на любом числе машин становится простым делом, не только потому, что Darcs поддерживает перенос изменений, вы можете настроить Darcs, чтобы он делал этот перенос на все машины сразу одной командой.
'''Cherry-picking (? "Сбор вишен", ? "Собираем сливки")'''. Даже работая в команде, может сложиться ситуация, когда кто-то имеет полезные изменения, которые вам нужны, но пока не имеет возможности их опубликовать в основную ветку. С Darcs вы можете забрать к себе только те изменения в репозитории, которые вам нужны в данный момент.
== Ссылки по теме ==
- [http://www.carpetcode.org/work-with-darcs.html Краткое введение в Darcs] от Carpetcode.org
- [http://zwiki.org/ZwikiDarcs Другое короткое how-to] от zwiki.org
- [http://lapougnou.dyndns.org/showPage.yaws?node=Darcs короткое руководство на французском]
Оригинальная страница на английском: GettingStarted
