Основы Git

2,203 views

Published on

Презентация в Тензор. Основы Git.
In Russian.

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total views
2,203
On SlideShare
0
From Embeds
0
Number of Embeds
678
Actions
Shares
0
Downloads
66
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Основы Git

  1. 1. Основы Git 1 пятница, 18 октября 13 г.
  2. 2. Что такое Git? 2 пятница, 18 октября 13 г.
  3. 3. Что такое Git? 3 пятница, 18 октября 13 г.
  4. 4. Что такое Git? • Git это связанный, ориентированный граф без циклов • Вершины графа могут иметь метки 4 пятница, 18 октября 13 г.
  5. 5. Комиты = Вершины Каждая вершина - один комит. Каждый комит имеет ссылку на родителя. Родителей может быть несколько Каждый комит хранит полное состояние всего репозитория (а не дельту как в SVN)* * http://git-scm.com/book/ru/Git-%D0%B8%D0%B7%D0%BD%D1%83%D1%82%D1%80%D0%B8-%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA %D1%82%D1%8B-%D0%B2-Git 5 пятница, 18 октября 13 г.
  6. 6. Комиты = Вершины Каждый комит идентифицируется хэшфункцией SHA1 $ git log -1 commit 8d7e037995616c3be2032287030e04b2ef11df25 Author: Oleg Elifantiev <oleg@elifantiev.ru> Date: Mon Oct 14 23:54:21 2013 +0400 Fixed method docblock 6 пятница, 18 октября 13 г.
  7. 7. Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ] Бранч это всего лишь «метка», указывающая на один конкретный комит 7 пятница, 18 октября 13 г.
  8. 8. Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ] Бранч в Git - не отдельное поддерево репозитория, как в SVN. 8 пятница, 18 октября 13 г.
  9. 9. Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ] С каждым комитом «метка» перемещается на новое место. 9 пятница, 18 октября 13 г.
  10. 10. Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o----------------о [ master ] С каждым комитом «метка» перемещается на новое место. 10 пятница, 18 октября 13 г.
  11. 11. Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o----------------о [ master ] С каждым комитом «метка» перемещается на новое место. 11 пятница, 18 октября 13 г.
  12. 12. Извлечение кода $ git checkout COMMIT_SHA Аналог SVN Checkout Извлекается всегда какой-то комит. $ git checkout 762df55d $ git checkout master $ git checkout topic~4 12 пятница, 18 октября 13 г.
  13. 13. Комит изменений --------------------------------Repository (git database) -------------------------------Staging area («index») -------------------------------Working copy ---------------------------13 пятница, 18 октября 13 г.
  14. 14. Комит изменений --------------------------------Repository (git database) -------------------------------Staging area («index») / -------------------------------- || $ Working copy ---------------------------14 пятница, 18 октября 13 г. git add file.ext
  15. 15. Комит изменений --------------------------------Repository (git database) / -------------------------------- || $ git commit -m «done!» Staging area («index») / -------------------------------- || $ Working copy ---------------------------15 пятница, 18 октября 13 г. git add file.ext
  16. 16. Комит изменений --------------------------------Repository (git database) -------------------------------Staging area («index») -------------------------------Working copy ---------------------------16 пятница, 18 октября 13 г.
  17. 17. Комит изменений --------------------------------Repository (git database) / -------------------------------- || || Staging area («index») || $ || -------------------------------- || Working copy ---------------------------17 пятница, 18 октября 13 г. git commit -am «done!»
  18. 18. Комит изменений Комит в Git - не то же самое что в SVN Комит в Git НЕ меняет состояние удаленного репозиторий. Комит в Git - локальное действие которое можно откатить, изменить, сделать с ним все что угодно... пока оно не попало на сервер* *Потом тоже можно, но ваши коллеги вас за это будут нелюбить... 18 пятница, 18 октября 13 г.
  19. 19. Комит изменений $ git commit --amend В Git можно легко переписать последний комит. Например исправить опечатку в коде или поправить комментарий. Это позволяет избежать вот такого лога: 66dbaf53 01.10.13 13:00:00 Исправил ошибку 6dacfa23 01.10.13 13:00:10 Исправил ошибку 2 19 пятница, 18 октября 13 г.
  20. 20. Ветки Создание ветки и переключение на нее --o--o--o [ master ] $ git checkout -b new-branch 20 пятница, 18 октября 13 г.
  21. 21. Ветки Создание ветки и переключение на нее --o--o--o [ master, new-branch ] $ git checkout -b new-branch 21 пятница, 18 октября 13 г.
  22. 22. Ветки Создание ветки и переключение на нее --o-------o-------o [ master ] $ git checkout -b new-branch master~1 22 пятница, 18 октября 13 г.
  23. 23. Ветки Создание ветки и переключение на нее [new-branch] --o-------o-------o [ master ] $ git checkout -b new-branch master~1 23 пятница, 18 октября 13 г.
  24. 24. Слияние (Merge) [ feature ] o--o--o / --о--о--o--o--o [ master ] При слиянии образуется новый комит с несколькими родителями. 24 пятница, 18 октября 13 г.
  25. 25. Слияние (Merge) [ feature ] o--o--o / --о--о--o--o--o [ master ] $ git checkout master $ git merge feature 25 пятница, 18 октября 13 г.
  26. 26. Слияние (Merge) [ feature ] o--o--o----------------/ --о--о--o--o--o----------------o [ master ] $ git checkout master $ git merge feature 26 пятница, 18 октября 13 г.
  27. 27. Слияние (Merge) [ feature ] o--o--o----------------/ --о--о--o--o--o----------------o [ master ] $ git checkout master $ git merge feature 27 пятница, 18 октября 13 г.
  28. 28. Слияние (Merge) Fast-forward [ feature ] o--o--o / --о--о--o--o--o [ master ] Если возможно, Git линеаризует историю 28 пятница, 18 октября 13 г.
  29. 29. Слияние (Merge) Fast-forward [ feature ] o--o--o / --о--о--o--o--o [ master ] Если возможно, Git линеаризует историю $ git checkout master $ git merge feature 29 пятница, 18 октября 13 г.
  30. 30. Слияние (Merge) Fast-forward --о--о--o--o--o--о--о--о [ master, feature ] Если возможно, Git линеаризует историю $ git checkout master $ git merge feature 30 пятница, 18 октября 13 г.
  31. 31. Слияние (Merge) Fast-forward [ feature ] o--o--o / --о--о--o--o--o [ master ] Но можно отказаться $ git checkout master $ git merge feature --no-ff 31 пятница, 18 октября 13 г.
  32. 32. Слияние (Merge) Fast-forward [ feature ] o--o--o / --о--о--o--o--o---------o [ master ] Но можно отказаться... $ git checkout master $ git merge feature --no-ff 32 пятница, 18 октября 13 г.
  33. 33. Rebase Позволяет перенести кусок истории из одного места в другое --о--о--o--o--o [ master ] о--о [ server ] 33 пятница, 18 октября 13 г.
  34. 34. Rebase Позволяет перенести кусок истории из одного места в другое --о--о--o--o--o [ master ] о--о [ server ] $ git checkout server $ git rebase master 34 пятница, 18 октября 13 г.
  35. 35. Rebase Позволяет перенести кусок истории из одного места в другое --о--о--o--o--o [ master ] о--о [ server ] $ git checkout server $ git rebase master 35 пятница, 18 октября 13 г.
  36. 36. Удаленный репозиторий $ git clone https://git.sbis.ru/root/sbis3-ws.git Cloning into sbis3-ws ... $ git remote -v origin https://git.sbis.ru/root/sbis3-ws.git Клонирует весь репозиторий, все ветки, всю историю 36 пятница, 18 октября 13 г.
  37. 37. Удаленный репозиторий SVN: Checkout/Commit/Update Git: Clone/Commit+Push/Pull 37 пятница, 18 октября 13 г.
  38. 38. Удаленный репозиторий Обновление текущей ветки из удаленного репозитория $ git pull Могут случиться конфликты (как и в SVN при update) 38 пятница, 18 октября 13 г.
  39. 39. Удаленный репозиторий На самом деле pull это... --о--о--o--o--o--o [ master ] 39 пятница, 18 октября 13 г.
  40. 40. Удаленный репозиторий На самом деле pull это... fetch [ origin/master ] o--o--o / --о--о--o--o--o--o [ master ] 40 пятница, 18 октября 13 г.
  41. 41. Удаленный репозиторий На самом деле pull это... fetch + merge [ origin/master ] o--o--o / --о--о--o--o--o--о-----o [ master ] 41 пятница, 18 октября 13 г.
  42. 42. Удаленный репозиторий Отправка своих изменений - push [ origin/master ] o--o--o / --о--о--o--o--o--о-----o [ master ] $ git push origin master 42 пятница, 18 октября 13 г.
  43. 43. Удаленный репозиторий Отправка своих изменений - push o--o--o / --о--о--o--o--o--о-----o [ master, origin/master ] $ git push origin master 43 пятница, 18 октября 13 г.
  44. 44. Откат изменений SVN Revert - Git ??? 44 пятница, 18 октября 13 г.
  45. 45. Откат изменений SVN Revert: • • отменяет изменения в локальной копии НЕ делает новый комит 45 пятница, 18 октября 13 г.
  46. 46. Откат изменений Git Revert: • • Отменяет указанный комит ДЕЛАЕТ новый комит в локальном репозитории 46 пятница, 18 октября 13 г.
  47. 47. Откат изменений Git Revert: ---о---о---о---о [ master ] $ git revert master~1 47 пятница, 18 октября 13 г.
  48. 48. Откат изменений Git Revert: ---о---о---о---о---о [ master ] $ git revert master~1 48 пятница, 18 октября 13 г.
  49. 49. Откат изменений Если нужно сбросить состояние рабочей копии на какое-то состояние? 49 пятница, 18 октября 13 г.
  50. 50. Откат изменений Если нужно сбросить состояние рабочей копии на какое-то состояние? Если что-то в процессе.... $ git merge --abort $ git rebase --abort $ git revert --abort 50 пятница, 18 октября 13 г.
  51. 51. Откат изменений Если нужно сбросить состояние рабочей копии на какое-то состояние? Если нужно просто откатить локальные изменения (которые не закомичены) $ git reset --hard HEAD 51 пятница, 18 октября 13 г.
  52. 52. Откат изменений Если нужно сбросить состояние рабочей копии на какое-то состояние? Если нужно откатить свою локальную ветку на какое-то предыдущее состояние $ git reset --hard COMMIT_SHA 52 пятница, 18 октября 13 г.
  53. 53. Откат изменений $ git reset --hard 12345 --о--о--о--о [ master, origin/master ] 53 пятница, 18 октября 13 г.
  54. 54. Откат изменений $ git reset --hard 12345 [ master ] --о--о--о--о [ origin/master ] 54 пятница, 18 октября 13 г.
  55. 55. Откат изменений $ git reset --hard 12345 $ git commit, git commit, git push о--о [ master ] / --о--о--о--о [ origin/master ] 55 пятница, 18 октября 13 г.
  56. 56. Методологии 56 пятница, 18 октября 13 г.
  57. 57. Centralized workflow Наиболее простой вариант при переходе с SVN. Все комитят в одну ветку. При этом преимущества Git практически не используются 57 пятница, 18 октября 13 г.
  58. 58. Feature branch Каждая фича делается в отдельной ветке. Все ветки скидываются в master. о--о--о [ alice-feature ] / --о--о--о--о--о [ master] о--о--о--о--о [ bob-feature ] 58 пятница, 18 октября 13 г.
  59. 59. Feature branch Каждая фича делается в отдельной ветке. Все ветки скидываются в master. о--о--о / --о--о--о--о--о--о [ master] о--о--о--о--о [ bobs-feature ] 59 пятница, 18 октября 13 г.
  60. 60. Feature branch Каждая фича делается в отдельной ветке. Все ветки скидываются в master. о--о--о / --о--о--о--о--о--о---------о [ master] / о--о--о--о--о 60 пятница, 18 октября 13 г.
  61. 61. Gitflow Есть ветки для разработки .--о--о--о [ master ] | | о--о [ hotfix ] | о--о--о [ release-2.1 ] | / --о--о--о--о--о [ development ] о--о--о [ feature ] 61 пятница, 18 октября 13 г.
  62. 62. Gitflow Есть ветки для разработки, для фичей .--о--о--о [ master ] | | о--о [ hotfix ] | о--о--о [ release-2.1 ] | / --о--о--о--о--о [ development ] о--о--о [ feature ] 62 пятница, 18 октября 13 г.
  63. 63. Gitflow Есть ветки для разработки, для фичей для release-candidate .--о--о--о [ master ] | | о--о [ hotfix ] | о--о--о [ release-2.1 ] | / --о--о--о--о--о [ development ] о--о--о [ feature ] 63 пятница, 18 октября 13 г.
  64. 64. Gitflow Есть ветки для разработки, для фичей, для release-candidate, для релизов .--о--о--о [ master ] | | о--о [ hotfix ] | о--о--о [ release-2.1 ] | / --о--о--о--о--о [ development ] о--о--о [ feature ] 64 пятница, 18 октября 13 г.
  65. 65. Gitflow Есть ветки для разработки, для фичей для release-candidate, для релизов и хотфиксов .--о--о--о [ master ] | | о--о [ hotfix ] | о--о--о [ release-2.1 ] | / --о--о--о--о--о [ development ] о--о--о [ feature ] 65 пятница, 18 октября 13 г.
  66. 66. Gitflow Есть ветки для разработки, для фичей для release-candidate, для релизов и хотфиксов .--о--о--о [ master ] | | о--о [ hotfix ] | о--о--о [ release-2.1 ] | / --о--о--о--о--о--о [ development ] / о--о--о------66 пятница, 18 октября 13 г.
  67. 67. Gitflow Есть ветки для разработки, для фичей для release-candidate, для релизов и хотфиксов .--о--о--о--о [ master ] | / | о--о--| о--о--о [ release-2.1 ] | / --о--о--о--о--о--о [ development ] / о--о--о------67 пятница, 18 октября 13 г.
  68. 68. Gitflow Есть ветки для разработки, для фичей для release-candidate, для релизов и хотфиксов <2.1> .--о--о--о--о---о [ master ] | / / | о--о--- / | о--о--о----| / --о--о--о--о--о--о--о [ development ] / о--о--о------68 пятница, 18 октября 13 г.
  69. 69. Профиты 69 пятница, 18 октября 13 г.
  70. 70. Быстрый и умный • Быстрые ветки - удобнее работать правильно. Для мержа ветки в родителя не обязательно сливать родителя к себе. • Умнее разрешение конфликтов (даже порой решает tree-conflict в случае перемещения/переименования) 70 пятница, 18 октября 13 г.
  71. 71. Все в ветках • Никто ни с кем не пересекается во время разработки фичи • Видно, какой код попал в релиз, а какой нет 71 пятница, 18 октября 13 г.
  72. 72. Распределенность • Локально вся история. • Можно без интернет-подключения переключиться на любую ветку, на любую ревизию, вообще в любое состояние репозитория • У каждого полная резервная копия репозитория 72 пятница, 18 октября 13 г.
  73. 73. Минусы 73 пятница, 18 октября 13 г.
  74. 74. Сложный • Git сложный $ git commit --help git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend] [--dry-run] [(-c | -C | --fixup | --squash) <commit>] [-F <file> | -m <msg>] [--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify] [-e] [--author=<author>] [--date=<date>] [--cleanup=<mode>] [--[no-]status] 74 пятница, 18 октября 13 г.
  75. 75. GUI-Клиенты... $ git commit -m message 75 пятница, 18 октября 13 г.
  76. 76. GUI-Клиенты... $ git clone https://... 76 пятница, 18 октября 13 г.
  77. 77. GUI-Клиенты... $ git fetch 77 пятница, 18 октября 13 г.
  78. 78. GUI-Клиенты... $ git push origin development 78 пятница, 18 октября 13 г.
  79. 79. GUI-клиенты Я рекомендую SourceTree http://www.sourcetreeapp.com/ 79 пятница, 18 октября 13 г.
  80. 80. GUI-клиенты Из GUI для Git просто необходим визуализатор истории... 80 пятница, 18 октября 13 г.
  81. 81. Спасибо за внимание! Есть вопросы? пятница, 18 октября 13 г.

×