Лекция	
  4.	
  Системы	
  контроля	
  
версий	
  
www.compscicenter.ru	
   1	
  
Толстиков	
  Никита	
  
tolsFkov.n.s@gma...
Системы	
  контроля	
  версий	
  
www.compscicenter.ru	
   2	
  12.03.2014	
  
•  Системы	
  управления	
  версиями	
  (Ve...
Классификация	
  :	
  
www.compscicenter.ru	
   3	
  12.03.2014	
  
•  Централизованные/распределённые	
  —	
  в	
  центра...
Классификация	
  :	
  
www.compscicenter.ru	
   4	
  12.03.2014	
  
•  Централизованные/распределённые	
  —	
  в	
  центра...
Ежедневный	
  цикл	
  работы	
  	
  
www.compscicenter.ru	
   5	
  12.03.2014	
  
Обычный	
  цикл	
  работы	
  разработчик...
Централизованные	
  VCS	
  
www.compscicenter.ru	
   6	
  12.03.2014	
  
Распределенные	
  VCS	
  
www.compscicenter.ru	
   7	
  12.03.2014	
  
Основные	
  термины	
  
www.compscicenter.ru	
   8	
  12.03.2014	
  
working	
  copy	
  —	
  рабочая	
  (локальная)	
  коп...
Ветвление	
  
www.compscicenter.ru	
   9	
  12.03.2014	
  
Ветвь	
  (branch)	
  —	
  направление	
  разработки	
  проекта,...
Пример	
  ветвления	
  в	
  проекте	
  
www.compscicenter.ru	
   10	
  12.03.2014	
  
CVS	
  
www.compscicenter.ru	
   11	
  12.03.2014	
  
Одна	
  из	
  наиболее	
  старых	
  систем	
  контроля	
  версий.	
 ...
Subversion,	
  SVN	
  
www.compscicenter.ru	
   12	
  12.03.2014	
  
Subversion,	
  SVN	
  —	
  свободная	
  централизован...
Subversion,	
  SVN	
  
www.compscicenter.ru	
   13	
  12.03.2014	
  
Пример	
  работы	
  SVN	
  
www.compscicenter.ru	
   14	
  12.03.2014	
  
$	
  svn	
  co	
  http://projects.com/svn/myproj...
GIT	
  
www.compscicenter.ru	
   15	
  12.03.2014	
  
Помните	
  этого	
  парня?	
  	
  
	
  
GIT	
  
www.compscicenter.ru	
   16	
  12.03.2014	
  
В	
  2005	
  году	
  он	
  решил	
  запилить	
  свою	
  VCS	
  с	
  ...
GIT	
  
www.compscicenter.ru	
   17	
  12.03.2014	
  
Работа	
  с	
  GIT	
  
www.compscicenter.ru	
   18	
  12.03.2014	
  
0.	
  Настройка	
  Git	
  
Задать	
  конфигурации	
  ...
Рабоат	
  с	
  GIT	
  
www.compscicenter.ru	
   19	
  12.03.2014	
  
2.	
  Сделать	
  изменения	
  
$	
  git	
  status	
  ...
Работа	
  с	
  GIT	
  
www.compscicenter.ru	
   20	
  12.03.2014	
  
3.	
  Сделать	
  изменения	
  и	
  добавить	
  их	
  ...
Merge	
  and	
  GIT	
  
www.compscicenter.ru	
   21	
  12.03.2014	
  
$	
  git	
  checkout	
  -­‐b	
  iss53	
  	
  
Switch...
Merge	
  and	
  GIT	
  
www.compscicenter.ru	
   22	
  12.03.2014	
  
$	
  git	
  checkout	
  master	
  	
  
Switched	
  t...
Merge	
  and	
  GIT	
  
www.compscicenter.ru	
   23	
  12.03.2014	
  
$	
  git	
  commit	
  –m	
  “Fix”	
  	
  
Switched	
...
Merge	
  and	
  GIT	
  
www.compscicenter.ru	
   24	
  12.03.2014	
  
$	
  git	
  checkout	
  master	
  	
  
$	
  git	
  m...
Разрешение	
  конфликтов	
  
www.compscicenter.ru	
   25	
  12.03.2014	
  
$	
  git	
  merge	
  iss53	
  	
  
Auto-­‐mergi...
Разрешение	
  конфликтов	
  
www.compscicenter.ru	
   26	
  12.03.2014	
  
Не	
  разрешенный	
  конфликт	
  в	
  файле	
  ...
Разрешение	
  конфликтов	
  
www.compscicenter.ru	
   27	
  12.03.2014	
  
$	
  git	
  status	
  
#	
  On	
  branch	
  mas...
Бесплатные	
  VCS	
  серверы	
  
www.compscicenter.ru	
   28	
  12.03.2014	
  
Есть	
  много	
  сервисов,	
  которые	
  пр...
Полезные	
  ссылки	
  
www.compscicenter.ru	
   29	
  12.03.2014	
  
Книга	
  про	
  Git	
  с	
  картинками:	
  
h•p://git...
Спасибо	
  за	
  внимание	
  
www.compscicenter.ru	
   30	
  12.03.2014	
  
Upcoming SlideShare
Loading in …5
×

Технологический семинар: Системы контроля версий

880 views

Published on

* История систем контроля версий
* Основные понятия
* Централизованные системы контроля версий (CVS, SVN)
* Распределенные системы контроля версий (Git, Mercurial)
* Основы работы в Git

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
880
On SlideShare
0
From Embeds
0
Number of Embeds
240
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Технологический семинар: Системы контроля версий

  1. 1. Лекция  4.  Системы  контроля   версий   www.compscicenter.ru   1   Толстиков  Никита   tolsFkov.n.s@gmail.com   СS  центр     12.03.2014  
  2. 2. Системы  контроля  версий   www.compscicenter.ru   2  12.03.2014   •  Системы  управления  версиями  (Version  Control  Systems,  VCS)  или   Системы  управления  исходным  кодом  (Source  Management  Systems,   SMS)  —  важный  аспект  разработки  современного  ПО.   •  VCS  предоставляет  следующие  возможности:   o   Поддержка  хранения  файлов  в  репозитории.   o   Поддержка  истории  версий  файлов  в  репозитории.   o Нахождение  конфликтов  при  изменении  исходного  кода  и       обеспечение  синхронизации  при  работе  в  многопользовательской   среде  разработки.   o   Отслеживание  авторов  изменений.      
  3. 3. Классификация  :   www.compscicenter.ru   3  12.03.2014   •  Централизованные/распределённые  —  в  централизованных  системах   контроля  версий  вся  работа  производится  с  центральным   репозиторием,  в  распределённых  —  у  каждого  разработчика  есть   локальная  копия  репозитория.   •  Блокирующие/не  блокирующие  —  блокирующие  системы  контроля   версий  позволяют  наложить  запрет  на  изменение  файла,  пока  один  из   разработчиков  работает  над  ним,  в  неблокирующих  один  файл  может   одновременно  изменяться  несколькими  разработчиками.   •  Для  текстовых  данных/для  бинарных  данных  —  для  VCS  для  текстовых   данных  очень  важна  поддержка  слияния  изменений,  для  VCS  с   инарными  данными  важна  возможность  блокировки.  
  4. 4. Классификация  :   www.compscicenter.ru   4  12.03.2014   •  Централизованные/распределённые  —  в  централизованных  системах   контроля  версий  вся  работа  производится  с  центральным   репозиторием,  в  распределённых  —  у  каждого  разработчика  есть   локальная  копия  репозитория.   •  Блокирующие/не  блокирующие  —  блокирующие  системы  контроля   версий  позволяют  наложить  запрет  на  изменение  файла,  пока  один  из   разработчиков  работает  над  ним,  в  неблокирующих  один  файл  может   одновременно  изменяться  несколькими  разработчиками.   •  Для  текстовых  данных/для  бинарных  данных  —  для  VCS  для  текстовых   данных  очень  важна  поддержка  слияния  изменений,  для  VCS  с   инарными  данными  важна  возможность  блокировки.  
  5. 5. Ежедневный  цикл  работы     www.compscicenter.ru   5  12.03.2014   Обычный  цикл  работы  разработчика  выглядит  следующим  образом:     1.   Обновление  рабочей  копии.     Разработчик  выполняет  операцию  обновления  рабочей  копии  (update)   насколько  возможно     2.  Модификация  проекта.   Разработчик  локально  модифицирует  проект,  изменяя  входящие  в  него   файлы  в  рабочей  копии.     3.  Фиксация  изменений.    Завершив  очередной  этап  работы  над  заданием,  разработчик  фиксирует   (commit)  свои  изменения,  передавая  их  на  сервер.  VCS  может  требовать   от  разработчика  перед  фиксацией  выполнить  обновление.  
  6. 6. Централизованные  VCS   www.compscicenter.ru   6  12.03.2014  
  7. 7. Распределенные  VCS   www.compscicenter.ru   7  12.03.2014  
  8. 8. Основные  термины   www.compscicenter.ru   8  12.03.2014   working  copy  —  рабочая  (локальная)  копия  документов.   repository,  depot  —  хранилище.   revision  —  версия  документа.  Новые  изменения  (changeset)  создают   новую  ревизию  репозитория.   check-­‐in,  commit,  submit  —  фиксация  изменений.     check-­‐out,  clone  —  извлечение  документа  из  хранилища  и  создание   рабочей  копии.   update,  sync  —  синхронизация  рабочей  копии  до  некоторого  заданного   состояния  хранилища  (в  т.ч.  и  к  более  старому  состоянию,  чем  текущее).   merge,  integra9on  —  слияние  независимых  изменений.   conflict  —  ситуация,  когда  несколько  пользователей  сделали  изменения   одного  и  того  же  участка  документа.   head  —  самая  свежая  версия  (revision)  в  хранилище.   origin  —  имя  главного  сервера  
  9. 9. Ветвление   www.compscicenter.ru   9  12.03.2014   Ветвь  (branch)  —  направление  разработки  проекта,   независимое  от  других.       Ветвь  представляет  собой  копию  части  (как  правило,   одного  каталога)  хранилища,  в  которую  можно  вносить   свои  изменения,  не  влияющие  на  другие  ветви.     Документы  в  разных  ветвях  имеют  одинаковую  историю   до  точки  ветвления  и  разные  —  после  неё.     Изменения  из  одной  ветви  можно  переносить  в  другую.     Ствол  (trunk,  mainline,  master)  —  основная  ветвь   разработки  проекта.  
  10. 10. Пример  ветвления  в  проекте   www.compscicenter.ru   10  12.03.2014  
  11. 11. CVS   www.compscicenter.ru   11  12.03.2014   Одна  из  наиболее  старых  систем  контроля  версий.  Создана  в   1984  году  как  развитие  RCS  (Revision  Control  System),  которая   не  поддерживала  совместную  работу.     Недостатки:   •  Невозможно  переименовать  файл  или  директорию  так,   чтобы  это  изменение  было  отражено  в  истории.   •  Ограниченная  поддержка  юникода  и  не-­‐ASCII  имен.   •  Публикации  изменений  не  атомарны.   •  Наборы  изменений  не  поддерживаются.   •  Неэффективное  хранение  бинарных  файлов.   •  Оригинальный  GNU  CVS  не  поддерживает  разграничения   прав  между  пользователями  репозитория.  
  12. 12. Subversion,  SVN   www.compscicenter.ru   12  12.03.2014   Subversion,  SVN  —  свободная  централизованная  система   управления  версиями,  официально  выпущенная  в  2004  году   компанией  CollabNet  Inc.     •  Копирование  объектов  с  разветвлением  истории.   •  Поддержка  ветвления:  создания  ветвей  (копированием   директорий)  и  слияние  ветвей  (переносом  изменений)   •  Поддержка  меток  (копированием  директорий).   •  Поддержка  разделение  прав  пользователей.   •  История  изменений  и  копии  объектов  (в  том  числе  ветви  и   метки)  хранятся  в  виде  связанных  разностных  копий.   •  Атомарная  фиксации  изменений  в  хранилище.  
  13. 13. Subversion,  SVN   www.compscicenter.ru   13  12.03.2014  
  14. 14. Пример  работы  SVN   www.compscicenter.ru   14  12.03.2014   $  svn  co  http://projects.com/svn/myproject  –username  user   $  cd  myproject     ..change  project..     $  svn  log   $  svn  st   $  svn  add  newfile.cpp   $  svn  rm  oldfile.cpp   $  svn  commit  -­‐m"Mega  enhancement"     ..next  day..     $  svn  up  
  15. 15. GIT   www.compscicenter.ru   15  12.03.2014   Помните  этого  парня?      
  16. 16. GIT   www.compscicenter.ru   16  12.03.2014   В  2005  году  он  решил  запилить  свою  VCS  с  простыми  мерджами  и   децентрализированной  структурой.       Достоинства:   •  Простая  работа  с  ветками   •  Развитые  средства  интеграции  с  другими  VCS   •  Продуманная  система  команд,  позволяющая  удобно  встраивать  git   команды  в  скрипты   •  Репозитории  git  могут  распространяться  и  обновляться   общесистемными  файловыми  утилитами,  такими  как  rsync   Недостатки:   •  Отсутствие  переносимой  на  другие  операционные  системы   поддержки  путей  в  кодировке  Unicode   •  Команды  ориентированы  на  наборы  изменений,  а  не  на  файлы.   •  Использование  для  идентификации  ревизий  хешей  SHA1   •  Проблемы  с  производительностью  
  17. 17. GIT   www.compscicenter.ru   17  12.03.2014  
  18. 18. Работа  с  GIT   www.compscicenter.ru   18  12.03.2014   0.  Настройка  Git   Задать  конфигурации   $  git  config  -­‐-­‐global  -­‐-­‐list   Изменить  имя  и  email:   $  git  config  -­‐-­‐global  user.name  “Super.User”   $  git  config  -­‐-­‐global  user.email  “suser@supermail.com”     Определить  протокол  передачи  данных:   •  FILE  —  мы  имеем  прямой  доступ  к  файлам  репозитория.   •  SSH  —  мы  имеем  доступ  к  файлам  на  сервере  через  ssh.   •  HTTP(S)  —  используем  h•p  в  качестве  приёма/передачи.            
  19. 19. Рабоат  с  GIT   www.compscicenter.ru   19  12.03.2014   2.  Сделать  изменения   $  git  status   #      On  branch  master     #      Untracked  files:     #      (use  "git  add  <file>..."  to  include  in  what  will  be  committed)     #     #      README     nothing  added  to  commit  but  untracked  files  present  (use  "git  add"  to   track)   1.  Клонировать  или  создать  новый  репозиторий  или  обновить   текущий   $  git  init   или   $  git  clone  git@github.com:user/repo.git   или   $  git  pull  
  20. 20. Работа  с  GIT   www.compscicenter.ru   20  12.03.2014   3.  Сделать  изменения  и  добавить  их   $  git  add  README   $  git  status   #  On  branch  master     #  Changes  to  be  committed:     #  (use  "git  reset  HEAD  <file>..."  to  unstage)     #     #  new  file:  README     #     3.  Commit  changes:   $  git  commit  –m  “Add  README  file”     4.  Pull  changes:     $  git  push  
  21. 21. Merge  and  GIT   www.compscicenter.ru   21  12.03.2014   $  git  checkout  -­‐b  iss53     Switched  to  a  new  branch  "iss53"  
  22. 22. Merge  and  GIT   www.compscicenter.ru   22  12.03.2014   $  git  checkout  master     Switched  to  branch  "master“     $  git  checkout  -­‐b  hotfix   Switched  to  a  new  branch  "ho“ix"  
  23. 23. Merge  and  GIT   www.compscicenter.ru   23  12.03.2014   $  git  commit  –m  “Fix”     Switched  to  branch  "master“   $  git  checkout  master   $  git  merge  hotfix   Updating  f42c576..3a0874c     Fast  forward     README  |  1  –     1  files  changed,  0  insertions(+),  1   deletions(-­‐)   $  git  branch  -­‐d  hotfix     Deleted  branch  hotfix  (3a0874c).  
  24. 24. Merge  and  GIT   www.compscicenter.ru   24  12.03.2014   $  git  checkout  master     $  git  merge  iss53     Merge  made  by  recursive.  README  |  1  +     1  files  changed,  1  insertions(+),  0  deletions(-­‐)  
  25. 25. Разрешение  конфликтов   www.compscicenter.ru   25  12.03.2014   $  git  merge  iss53     Auto-­‐merging  index.html  CONFLICT  (content):  Merge  conflict  in  index.html   Automatic  merge  failed;  fix  conflicts  and  then  commit  the  result.       $  git  status     index.html:  needs  merge     #  On  branch  master     #  Changes  not  staged  for  commit:     #  (use  "git  add  <file>..."  to  update  what  will  be  committed)     #  (use  "git  checkout  -­‐-­‐  <file>..."  to  discard  changes  in  working   directory)     #     #  unmerged:  index.html     #  
  26. 26. Разрешение  конфликтов   www.compscicenter.ru   26  12.03.2014   Не  разрешенный  конфликт  в  файле  будет  иметь  вид:   <<<<<<<  HEAD:index.html  <div  id="footer">contact  :   email.support@github.com</div>     =======     <div  id="footer">  please  contact  us  at  support@github.com  </div>     >>>>>>>  iss53:index.html     В  верхней  части  блока  (всё  что  выше  =======)  это  версия  из  HEAD   После  того,  как  вы  разобрались  со  всеми  конфликтами  выполните:   $  git  add      для  каждого  конфликтного  файла.  Индексирование  будет  означать   для  Git'а,  что  все  конфликты  в  файле  теперь  разрешены.   Если  вы  хотите  использовать  графические  инструменты  для   разрешения  конфликтов,  можете  выполнить  команду     $  git  mergetool    
  27. 27. Разрешение  конфликтов   www.compscicenter.ru   27  12.03.2014   $  git  status   #  On  branch  master     #  Changes  to  be  committed:     #  (use  "git  reset  HEAD  <file>..."  to  unstage)     #     #  modified:  index.html     #     $  git  commit   Сообщение  по  умолчанию:   Merge  branch  'iss53'     Conflicts:        index.html     #     #  It  looks  like  you  may  be  committing  a  MERGE.     #  If  this  is  not  correct,  please  remove  the  file     #  .git/MERGE_HEAD     #  and  try  again.     #    
  28. 28. Бесплатные  VCS  серверы   www.compscicenter.ru   28  12.03.2014   Есть  много  сервисов,  которые  предоставляют  открытые   репозитории  для  совместной  работы:     •  sourceforge.net  —  SVN,  Git,  Mercurial,  Bazaar,  CVS  репозитории.   •  code.google.com  —  SVN,  Git,  Mercurial  репозитории.   •  github.com  —  Git  репозитории.   •  bitbucket.org  —  Git  и  Mercurial  репозитории.   •   .  .  .    
  29. 29. Полезные  ссылки   www.compscicenter.ru   29  12.03.2014   Книга  про  Git  с  картинками:   h•p://git-­‐scm.com/book/ru/     Подробная  работа  с  Git:   h•p://habrahabr.ru/post/174467/     Хорошая  модель  ветвления  в  Git:   h•p://habrahabr.ru/post/106912/     Настоятельно  рекомендую  пройти  курсы:   h•p://try.github.io/levels/1/challenges/1   h•ps://www.codeschool.com/courses/git-­‐real  
  30. 30. Спасибо  за  внимание   www.compscicenter.ru   30  12.03.2014  

×