реклама на сайте
подробности

 
 
> Система контроля версий для FPGA проектов., Какие на данный момент существуют системы контроля версий для FPGA ?
Flip-fl0p
сообщение Apr 26 2018, 18:15
Сообщение #1


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Приветствую Уважаемые посетители форума !
У начальства возникла идея внедрить на предприятии систему контроля версий для программистов и FPGA разработчиков.

На данный момент я работаю так:
1. В шапке каждого HDL файла указаны все изменения файла с описанием изменения, и датой внесения изменения.
2. Каждый день по выключению компьютера на сервер делается backup всех HDL файлов, констрейнов, настроек quartus (.QSF) и пр. файлов, отвечающих за создание проекта.
3. В отдельной папке с проектом храню все фотографии блок схем алгоритмов, диаграмм переходов автоматов, структурных схем(я их фотографирую, поскольку предпочитаю сначала все нарисовать на бумаге ручкой, а бумагу я быстро теряю).

Хотелось бы уточнить у знающих людей - а как правильно организовать такую систему применительно к проектам на ПЛИС ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение May 3 2018, 08:38
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Добавлю свои 5 коп. на тему svn vs. git. На svn сидел довольно долго - порядка 12 лет. Перешёл в своё время на svn с cvs. По сравнению с cvs svn - это был, конечно, прорыв! Ушли в небытие геморрои с неатомарными комитами, липкими метками и прочими анахронизмами, процесс фиксации стал предсказуемым и стабильным.

Но на протяжении всего этого времени не покидало чувство, что чего-то не хватает, что нет какой-то свободы, что-ли, что каждый комит - это как штамп, высечка в граните... В итоге года 4 назад начал пошупать git/mercurial. Остановился на git. Не скажу, что сразу всё стало хорошо - потребовалось некоторое время (где-то с полгода), чтобы прочувствовать, понять его концепцию - достаточно сильно мешали стереотипы, выращенные на svn.

На основании личного опыта могу сказать, что svn по сравнению с git - это не система управления версиями, это скорее система автоматизированного архивирования. svn позволяет делать фиксации с комментариями, хранит это инкрементально в централизованном хранилище (репозитории). Она хорошо подходит для линейного процесса фиксации изменений - сделали что-то, зафиксировали. Но она очень плохо подходит для работы в стиле "а ну-ка попробую-ка я это или это". Для такого стиля очень нужна возможность легко создавать и сливать ветки. И она в git есть, а в svn нет. В svn все комиты летят в центральный реп и нет никакой возможности ими пилотировать - ни откатить, ни изменить.

Типовой пример. Всякий разработчик сталкивается с ситуацией, когда его проект достиг какого-то промежуточного итога: код стабильно собирается, предсказуемо работает. Можно двигаться дальше - добавлять новые фичи, но очень не хочется сломать то, что уже есть. Самый простой способ - делать архивы таких промежуточных точек, но это есть ни что иное, как попытка вести контроль версий вручную. Архивы плодятся, комментарии к ним теряются, сравнить две зафиксированные точки является довольно обременительной задачей... Собственно, с этого и начались системы управления версиями - та же древняя cvs поначалу представляла собой набор скриптов, который автоматизировал эти операции. svn довела реализацию этой модели до совершенства - фиксировать промежуточные состояния проекта стало удобно, безопасно и эффективно (благодаря дельтам).

К сожалению, модель с центральным репозиторием не очень хорошо подходит именно для версионирования кода, т.е. когда хочется легко и быстро создавать альтернативные ветки развития, не ломая и не теряя уже полученного. И с этой задачей хорошо справляется git. Например, вот достиг я такого вот промежуточного результата, теперь мне надо двигаться дальше - добавить какую-то фичу. Я не пилю код в стабильной ветке - в ней все комиты всегда рабочие (да, в них могут быть баги, как и везде, но они ненамеренные), код всегда собирается и фичи все допиленные, никаких полуразобранных состояний там не бывает - они только в фичебранчах (feature-branch). Фичебранчи, когда требуемый функционал достигнут, сливаются в стабильную ветку и удаляются. Стабильная ветка у нас называется develop.

Так вот, для новой фичи я завожу фичебранч:

Код
git co -b fb-newfeature


(fb- означает feature branch)

и спокойно кромсаю код "по живому", не боясь ничего сломать или потерять. Если вдруг срочно понадобился стабильный вариант, просто откатываюсь на него:

Код
git co develop


Если допилил код в фичебранче, то сливаю его в стабильную (символ # - это типа комментарий, в реальной работе этого нет):

Код
git co develop   # переключаемся на требуемую ветку
git merge --no-ff -e fb-newfeature # --no-ff - создать комит слияния, -e - открыть редактор для ввода комментария

После этого имеем красивую историю - чётко видна этапность: все комиты в ветке develop обозначают добавление той или иной фичи (или багфикс), а процесс разработки фичи хорошо виден как "отросток" слитый в стабильную ветку (по комментариям в комитах слияния видно, из какой ветки и какую фичу слили):
Прикрепленное изображение


Отчётливо видно, что делалось (правую часть я для экономии обрезал, там даты и авторы комитов, т.ч. видно кто и когда внёс изменения).

Самое главное - это ощущение лёгкости процесса. Абсолютное отсутствие страха что-то сломать или потерять. Например, искромсал код на экспериментах до невосстановимого состояния - не беда:

Код
git co <branch-name>/<commit-hash>


Если эксперимент затягивается и хочется в его процессе тоже фиксировать - то создаём просто ещё ветку прямо на текущей:

Код
git co -b fb-mad-experiment


и продолжаем хулиганить. Если результат оказался неудовлетворительным, просто откатываемся на предыдущую ветку:

Код
git co fb-<branch-name>

не заботясь о мусорном коде - гит всё вернёт в нужное состояние.

Именно на гите я впервые прочувствовал совет делать т.н. "атомарные" комиты - т.е. такие, которые содержат набор изменений, касающихся только чего-то одного. Если в коде в результате правок появилось два и более логически развязанных изменения, то лучше фиксировать их разными комитами. В этом есть большой смысл. Например, возвращаясь к предыдущему примеру с экспериментальной веткой - вот наворотили там кода, поняли, что в общем-то тупик, но кое-что оказалось полезным и это кое-что неплохо бы взять с собой. Поскольку мы делали все комиты атомарными, то это кое-что оказалось зафиксированным отдельно от остальных правок. Теперь нам достаточно, откатившись на базовую ветку, выдернуть нужный комит в эту ветку:

Код
git cherry-pick <commit-hash>


Кстати, этот же подход неоднократно проявлял себя и полезной стороны и при коллективной работе. Реальный случай: мы с товарищем работали над прибором, я отвечал за железку, а он за хостовую часть. Доведя дивайс до рабочей кондиции, я передал его товарищу и продолжил работать над очередной фичей, а товарищ писал протокол управления прибором. В какой-то момент, он обнаружил баг со стороны дивайса - что-то там с таймаутом не срасталось. Потребовалось моё участие, а я уже в разгаре работы над новой фичей. Но ведь ему-то ведь меня ждать, когда я закончу с этой фичей, не с руки, приходится переключаться. Действия такие:

Код
git stash  # прячем незафиксированные изменения во временный комит, чтобы не плодить мусорных комитов
git co develop # переключаемся на ветку, в которой обнаружен баг
git co -b bfix-timeout # создаём ветку для работы над багфиксом

Работаем над багом, попутно находится ещё кое-что, что нуждается в правке, итого несколько комитов в этой багфиксной ветке. Закончили, потестировали - работает. Сливаем

Код
git co develop # переключаемся на основную рабочую ветку
git merge --no-ff -e bfix-timeout # сливаем правки бага

После этого товарищ продолжает работать, я возвращаюсь к своей прерванной работе:

Код
git co fb-<new-feature> # переключаемся на ветку, с которой ушли на правку бага
git stash pop # вытаскиваем спрятанные незафиксированные правки

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

Код
git cherry-pick <commit-hash> # <commit-hash> - хэш того комита, где зафиксированы нужные мне изменения

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

Вот всего этого нет в системах с центральным репозиторием. Там даже откатить комит уже проблема. Вести такую вольную работу с кодом тоже не получается. Любая фиксация оставляет неизгладимый след в репозитории. В гите очень просто можно поддерживать красивую историю развития проекта, когда видно, когда, что и кем делалось, видна этапность. Для этого помимо описанного выше есть другие способы влиять на вид - например git rebase (хотя тут надо пользоваться осторожнее). Красивая история - не фетиш, это один из способов поддерживать сопровождаемость проекта, когда сразу видны этапы работы.

Гит по духу напоминает язык программирования С. И в том, и в другом при неправильном использовании можно наворотить безобразий, но при правильном использовании это мощный инструмент.

Есть ещё немало очень "вкусных" возможностей гита - как, например, возможность поправить сделанный по ошибке комит или возможности по формированию данных комита - это когда, к примеру, текущее состояние проекта содержит несколько логически развязанных изменений, и можно их добавлять, отделяя друг от друга, создавая логически законченные целостные "атомарные" комиты. На svn комит нередко содержал в себе целый набор разнообразных правок и некоторые комментарии к комитам напоминали приличный по размеру changelog. Но там и смысла делать атомарные комиты немного, там вообще лёгкое версионирование практически нереально.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
nice_vladi
сообщение May 3 2018, 09:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 7-09-16
Из: Томск
Пользователь №: 93 239



Цитата(dxp @ May 3 2018, 08:38) *
Добавлю свои 5 коп. на тему svn vs. git
....

bb-offtopic.gif
Реально впечатлился. Чувствую, в ближайшие дни, начну очередную попытку перехода с svn на git/mercurial biggrin.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Flip-fl0p   Система контроля версий для FPGA проектов.   Apr 26 2018, 18:15
- - aaarrr   Цитата(Flip-fl0p @ Apr 26 2018, 21:1...   Apr 26 2018, 19:33
|- - dxp   Цитата(aaarrr @ Apr 27 2018, 02:33) git? ...   Apr 27 2018, 05:10
- - ViKo   И снова пишу - TortoiseHg.   Apr 26 2018, 20:01
- - Alex77   Цитата(Flip-fl0p @ Apr 26 2018, 21:1...   Apr 27 2018, 05:59
- - _Ivan_33   http://www.fpgadeveloper.com/2014/08/versi...o-pro...   Apr 27 2018, 06:11
- - Vascom   Используй git.   Apr 27 2018, 06:24
- - Amurak   Про Гит уже писали?   Apr 27 2018, 06:47
- - warrior-2001   TortoiseSVN. Всем устраивает.   Apr 27 2018, 08:07
- - one_eight_seven   Ребята, а вы в курсе, что tortoise - это клиент? ...   Apr 27 2018, 09:28
|- - Vascom   Цитата(one_eight_seven @ Apr 27 2018, 12...   Apr 27 2018, 09:31
|- - Alex77   Цитата(Vascom @ Apr 27 2018, 12:31) Други...   Apr 27 2018, 09:45
- - alexadmin   Проблема-то в том, что софт очень своевольно обращ...   Apr 27 2018, 09:36
- - AVR   Цитата(Flip-fl0p @ Apr 26 2018, 21:1...   Apr 27 2018, 10:58
|- - Flip-fl0p   Цитата(AVR @ Apr 27 2018, 13:58) P.S. Но ...   Apr 27 2018, 11:04
|- - Koluchiy   Цитата(AVR @ Apr 27 2018, 14:58) P.S. Но ...   Apr 27 2018, 11:31
|- - dxp   Цитата(Koluchiy @ Apr 27 2018, 18:31) Ино...   Apr 28 2018, 04:34
||- - spectr   Цитата(dxp @ Apr 28 2018, 07:34) Это одна...   Apr 28 2018, 06:10
||- - dxp   Цитата(spectr @ Apr 28 2018, 13:10) Итого...   Apr 28 2018, 09:09
||- - AnatolySh   Спрошу коротко: читать здесь (ну и все содержатель...   Apr 29 2018, 13:22
|- - AVR   Цитата(Koluchiy @ Apr 27 2018, 14:31) Ино...   Apr 29 2018, 17:52
- - x736C   Использую git и два файла. Файл исключений .git...   Apr 27 2018, 11:16
- - one_eight_seven   ЦитатаИногда лучше без них, чем с ними. У нас вон ...   Apr 27 2018, 11:45
- - one_eight_seven   Вас страшно читать. Вы специально используете инст...   Apr 28 2018, 05:29
- - one_eight_seven   Цитатаставить отсюда? Не обязательно. Иногда доста...   Apr 29 2018, 14:23
- - one_eight_seven   ЦитатаСтоп, а не работаете ли Вы случайно с убожес...   Apr 29 2018, 18:10
|- - AVR   Цитата(one_eight_seven @ Apr 29 2018, 21...   Apr 30 2018, 07:14
- - one_eight_seven   ЦитатаНо "удел недалеких людей" под пред...   Apr 30 2018, 08:08
- - dvladim   Не сочтите за наброс, но: А если все файлы бинарны...   Apr 30 2018, 13:43
|- - AVR   Цитата(dvladim @ Apr 30 2018, 16:43) А ес...   May 11 2018, 08:08
|- - dxp   Цитата(AVR @ May 11 2018, 15:08) Нет, тут...   May 11 2018, 10:42
- - one_eight_seven   ЦитатаВозможность поднять файл от нужной даты. Что...   Apr 30 2018, 13:56
|- - baumanets   Теме самое место в разделе управления проектами. Л...   Apr 30 2018, 21:29
- - Flip-fl0p   Господа, спасибо большое за ответы ! Скорее вс...   May 3 2018, 09:26
|- - Tpeck   Цитата(Flip-fl0p @ May 3 2018, 12:26...   May 11 2018, 07:20
|- - Flip-fl0p   Цитата(Tpeck @ May 11 2018, 10:20) Может ...   May 11 2018, 07:23
- - Doka   https://github.com/barbedo/vivado-git как работае...   May 3 2018, 10:03
- - one_eight_seven   ЦитатаНет, тут конечно git не очень хорош. И это т...   May 11 2018, 09:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 00:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016