Системы управления версиями
Я удивляюсь, сколько электронщиков не использует системы управления версиями в своих разработках. Я сам был таким, пока не попробовал. Теперь каждый проект я начинаю с создания репозитория.
К примеру, недавно у меня начали падать ограничения по скорости в проекте на FPGA. Я буквально за 5 минут нашел версию, в которой они еще не падали и нашел в чем причина
Если над проектом работает несколько человек, без СУВ работать вообще практически невозможно — начинается хаос, каждый делает что-то свое и не понятно, кто и что наделал. С СУВ можно удобно посмотреть кто и что сделал, изменения внесенные другими становятся намного менее неожиданными.
Кроме того, есть более экзотические применения. К примеру, изменения этого сайта я передаю на сервер с помощью системы контроля версий.
Кроме Mercurial, сейчас довольно распространены git и svn. Git больше распространен в около linux'овской тусовке, svn — в корпоративной среде. Я их попробовал использовать (правда, очень не долго), но ничего такого, из-за чего стоило бы бросать mercurial я не увидел.

Когда я начинал с ним работать, сайт поддерживал только Mercurial (отчасти из-за этого, я и выбрал mercurial), но сейчас там можно создавать и git-репозитории. Кроме того, к bitbucket можно привязать свой домен. Вот, к примеру, мой вариант: hg.bsvi.ru

После установки, неплохо бы задать имя пользователя по умолчанию. Для этого, нужно отредактировать файл С:/Users/BSVi/mercurial.ini туда нужно добавить строчку
Естественно, bsvi нужно заменить на ваше имя.
Теперь мы готовы создать проект и начать что-то делать. Для этого на bitbucket.org жмем «Create repository»:

Там заполняем название, описание, выбираем язык. Можно добавить wiki и багтрекер.

Теперь жмем на кнопку «clone» и копируем то, что там появилось:

Дальнейшие операции зависят от того, какой файловый менеджер вы используете. Лично я использую far. Я просто вставляю скопированную строчку в коммандную строку:

Если вы испольуете проводник (эм), total commander или что-то в таком духе, то нужно щелкнуть правой кнопкой мышки и выбрать:

Там, в поле source нужно вставлять путь, естественно, без hg clone:

Вас спросят о вашем пароле, и появится директория test-repo, в которой, собственно и будет находиться проект.
Теперь сделаем коммит. Коммит — это внесение изменений в проект. Для этого запускаем hg workbench. Я просто пишу в командной строке thg, для эксплорерообразных файловых менеджеров нужно нажать ПКМ->Hg Workbench.
Напротив нашего файла будет знак вопроса (это значит, он не добавлен в проект). Поставим около него галочку и напишем описание того, что было сделано:

Естественно, после этого, жмем кнопку «commit».
Все, изменения в проект внесены. Тут нужно обратить внимание, что изменения внечены только на локальном компьютере (тоесть, их еще нету на сервере). Для того, чтобы перенести изменения на сервер, нужно нажать кнопку «push», вот она:

Естественно, для проталкивания изменений на сервер, потребуется пароль.
Перейдем в hg workbench. Я когда работаю над проектом его даже не закрываю (об этом-дальше), нажимаем f5 чтобы обновить список файлов. Теперь видно, что изменилось со времени последнего коммита:

И это — очень сильный инструмент. Обычно, во время отладки в файлах появляется куча разного мусора. Дак вот, просматривая то, что вы собираетесь закоммитить очень неплохо очищает от мусора проект.
Добавим мусорный файл к проекту. Я, к примеру, создал main.obj:

Если сейчас обновить список файлов, то, естественно, hg workbench предложит добавить этот файл в проект:

Теперь, создадим файл .hgigonre и напишем там, что мы хотим игнорировать все файлы с расширением obj:
Если обновить список файлов, то obj файлы пропадут, зато появится файл .hgignore, который можно закоммитить:


Точно практически так-же можно откатить отдельный файл.

Wikipedia о mercurial
Русская страница mercurial-wiki
Многие думают, что системы контроля версий нужно использовать только если разрабатываешь что-то большой толпой, но это — не так :) Даже когда работаешь над проектом в одиночку, системы контроля версий сильно выручают.
Для примера, вот скриншот моего UTC (который я разрабатываю сам) в самом сложном месте в hg workbench:

Что это такое?
Итак, системы управления версиями (СУВ) — это такая программка, которая позволяет сохранять всю историю разработки проекта.Зачем это нужно?
Это — очень, прямо мега-удобный инструмент для разработки. Бывает так, что вы писали-писали программу и, наконец, что-то сломали. Если программа находилась в системе управления версиями, можно легко откатиться к прошлой версии проекта и посмотреть, что изменялось, меня это много раз спасало.К примеру, недавно у меня начали падать ограничения по скорости в проекте на FPGA. Я буквально за 5 минут нашел версию, в которой они еще не падали и нашел в чем причина
Если над проектом работает несколько человек, без СУВ работать вообще практически невозможно — начинается хаос, каждый делает что-то свое и не понятно, кто и что наделал. С СУВ можно удобно посмотреть кто и что сделал, изменения внесенные другими становятся намного менее неожиданными.
Кроме того, есть более экзотические применения. К примеру, изменения этого сайта я передаю на сервер с помощью системы контроля версий.
Какую выбрать?
Систем контроля версий существует огромное множество. Лично я для себя выбрал Mercurial. Отличная система, которую всем рекомендую — быстрая, кросплатформеная, с отличным графическим клиентом. Очень весомым аргументом в ее пользу оказалось существование сайта bitbucket. Я ни разу не пожалел о выборе.Кроме Mercurial, сейчас довольно распространены git и svn. Git больше распространен в около linux'овской тусовке, svn — в корпоративной среде. Я их попробовал использовать (правда, очень не долго), но ничего такого, из-за чего стоило бы бросать mercurial я не увидел.
Bitbucket
Есть такой сайт bitbucket.org, на нем можно хранить ваши проекты. Он примечателен тем, что там, в отличии от github можно бесплатно создавать закрытые репозитории (репозиторий — место, где хранится проекты). Платить нужно только за те проекты, которые закрыты и над которыми работает больше, чем 5 человек. При этом, лимит можно расширить до 8ми, рассылая приглашения. Я, пока, не превышал этого лимита. Кроме этого, есть wiki и багтрекер, вообщем, все, что нужно для разработки проектов.
Когда я начинал с ним работать, сайт поддерживал только Mercurial (отчасти из-за этого, я и выбрал mercurial), но сейчас там можно создавать и git-репозитории. Кроме того, к bitbucket можно привязать свой домен. Вот, к примеру, мой вариант: hg.bsvi.ru
Как начать?
Сначала нужно скачать клиент. Я использую tortoiseHg. Думаю, с установкой проблем не возникнет.
После установки, неплохо бы задать имя пользователя по умолчанию. Для этого, нужно отредактировать файл С:/Users/BSVi/mercurial.ini туда нужно добавить строчку
[ui]
username = bsvi
Естественно, bsvi нужно заменить на ваше имя.
Теперь мы готовы создать проект и начать что-то делать. Для этого на bitbucket.org жмем «Create repository»:

Там заполняем название, описание, выбираем язык. Можно добавить wiki и багтрекер.

Теперь жмем на кнопку «clone» и копируем то, что там появилось:

Дальнейшие операции зависят от того, какой файловый менеджер вы используете. Лично я использую far. Я просто вставляю скопированную строчку в коммандную строку:

Если вы испольуете проводник (эм), total commander или что-то в таком духе, то нужно щелкнуть правой кнопкой мышки и выбрать:

Там, в поле source нужно вставлять путь, естественно, без hg clone:

Вас спросят о вашем пароле, и появится директория test-repo, в которой, собственно и будет находиться проект.
Добавим немного файлов
Если у вас уже есть наработки по проекту, их можно просто скопировать в директорию. Мы-же, для учебных целей, создадим файл main.c с вот таким содержимым:#include <stdio.h>
int main()
{
return 0;
}
Теперь сделаем коммит. Коммит — это внесение изменений в проект. Для этого запускаем hg workbench. Я просто пишу в командной строке thg, для эксплорерообразных файловых менеджеров нужно нажать ПКМ->Hg Workbench.
Напротив нашего файла будет знак вопроса (это значит, он не добавлен в проект). Поставим около него галочку и напишем описание того, что было сделано:

Естественно, после этого, жмем кнопку «commit».
Все, изменения в проект внесены. Тут нужно обратить внимание, что изменения внечены только на локальном компьютере (тоесть, их еще нету на сервере). Для того, чтобы перенести изменения на сервер, нужно нажать кнопку «push», вот она:

Естественно, для проталкивания изменений на сервер, потребуется пароль.
Изменим файл
Теперь давайте посмотрим, одну из очень важных фишек систем контроля версий — отслеживание версий файлов. Добавим к нашей программе вывод на экран:#include <stdio.h>
int main()
{
printf("mercurial rules!");
return 0;
}
Перейдем в hg workbench. Я когда работаю над проектом его даже не закрываю (об этом-дальше), нажимаем f5 чтобы обновить список файлов. Теперь видно, что изменилось со времени последнего коммита:

И это — очень сильный инструмент. Обычно, во время отладки в файлах появляется куча разного мусора. Дак вот, просматривая то, что вы собираетесь закоммитить очень неплохо очищает от мусора проект.
А что делать с мусором?
При работе над проектом появляется очень много мусора — к примеру, объектные файлы, файлы, которые генерирует IDE, какие-то временные файлы, итп. Все, то, что не относится к самому проекту, неплохо бы убрать из репозитория. Для этого существует файл .hgignore (да, с точкой в начале названия).Добавим мусорный файл к проекту. Я, к примеру, создал main.obj:

Если сейчас обновить список файлов, то, естественно, hg workbench предложит добавить этот файл в проект:

Теперь, создадим файл .hgigonre и напишем там, что мы хотим игнорировать все файлы с расширением obj:
syntax:glob
*.obj
Если обновить список файлов, то obj файлы пропадут, зато появится файл .hgignore, который можно закоммитить:

А как откатить изменения?
Восстановим нашу программу до того состояния, которое было до вывода на экран. Для этого достаточно выбрать коммит, до которого хочется откатиться и нажать вот эту кнопку:
Точно практически так-же можно откатить отдельный файл.

Ссылки
Книга «Mercurial: Полное руководство»Wikipedia о mercurial
Русская страница mercurial-wiki
Заключение
Вот и все, это — минимум знаний о системах контроля версий, который позволит вам сохранять историю разработки проекта. Естественно, есть очень много других возможностей, про которые я расскажу попозже.Многие думают, что системы контроля версий нужно использовать только если разрабатываешь что-то большой толпой, но это — не так :) Даже когда работаешь над проектом в одиночку, системы контроля версий сильно выручают.
Для примера, вот скриншот моего UTC (который я разрабатываю сам) в самом сложном месте в hg workbench:

9 комментариев
Git клиент мне не очень понравился. Что-то базовое можно через него, чуть сложнее — привет консоль. Лично мне удобнее, когда есть клиент с удобным гуём.
SVN уже не стоит использовать, старый он и неудобный(в сравнении с Mercurial и git).
Теперь, создадим файл .hgignore и напишем там, что мы хотим игнорировать все файлы с расширением obj:
Я долго не мог понять, почему hg не игнорит «мусор»… Оказалось, тупо скопировал имя файла именно из этой строчки :/