camp-git-shallow-dive/presentation.md

30 KiB
Raw Permalink Blame History

class: impact

git

the stupid content tracker


layout: true title: Задачи class: animation-fade

{{title}}


Контроль версий

-- Я работаю над сложным проектом с изменяющимися требованиями и далёким горизонтом развития.

--

Я хочу иметь возможность версионировать мою работу.


Откат к предыдущим состояниям

--

  • Почему бы просто не взять флешку и скопировать в Новая папка (2)?
    😔

--

  • Ну хорошо, что если я буду записывать в Новая папка {Текущее время}?
    😔
 git checkout OTP-21.0.3
Checking out files: 100% (3448/3448), done.
Note: checking out 'OTP-21.0.3'.

Быстрое восстановление работоспособности

--

  • Ведь я могу просто скинуть с флешки последнюю Новую папку, что не так?
    😔
 git reset --hard HEAD
HEAD is now at a3a900e382 Updated OTP version

Внесение осмысленных изменений

--

  • Я могу просто положить рядом файл с названием Зачем.txt, почему нет?
    😔
 git commit -a
Outline installation flow

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch v0
# Your branch is up to date with 'origin/v0'.
#
# Changes to be committed:
#       modified:   README.md    

Отслеживание изменений

--

  • Важен не процесс, а результат.
    🤔
commit f918ca5f58f52d028b7ea140b874f8a79395ae65
Author: Andrew Mayorov <encube.ul@gmail.com>
Date:   Wed Jul 18 17:49:27 2018 +0300

    Downgrade to rbkmoney/hellgate@79e70142 (#981)

diff --git a/pillar/wetkitty/macroservice.sls b/pillar/wetkitty/macroservice.sls
index 7234ee0..04e2ad2 100644
--- a/pillar/wetkitty/macroservice.sls
+++ b/pillar/wetkitty/macroservice.sls
@@ -49,7 +49,7 @@ wetkitty:
 
     hellgate:
       image-name: "dr.rbkmoney.com/rbkmoney/hellgate"
-      image-tag:  "1ae0c4b1f3e1e4325eed5618c56bedcb823cf0e8"
+      image-tag:  "79e70142161cc5a9a995dc77601fc72514cb19f9"
       memory-limit: 256M
       service-name: "hellgate"

layout: true title: Задачи class: animation-fade

{{title}}


Совместная работа

-- Я больше не работаю над этим проектом один, нас много.

--

У каждого из нас есть имя, и я знаю кто есть кто.

--

Я должен уметь работать и вносить изменения, не мешая без необходимости моим коллегам.

--

Мы должны иметь возможность обмениваться результатами работы друг с другом.


Авторство

--

  • Моя файловая система проследит за этим. Или нет?
    😔
 git config --global user.name Keynfawkes
 git config --global user.email a.mayorov@rbkmoney.com

Независимая разработка

--

  • Это просто, нужно всего лишь давать уникальный префикс папкам на флешке.
    😫
 git checkout -b ft/proper-transfers
 git status
On branch ft/proper-transfers
Your branch is up to date with 'rbkmoney/ft/proper-transfers'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    THOUGHTS.md

nothing added to commit but untracked files present (use "git add" to track)

Разрешение конфликтов

--

  • Я просто перезапишу чужие изменения.
    😡
diff --cc pillar/wetkitty/macroservice.sls
index a13392b,432a332..0000000
--- a/pillar/wetkitty/macroservice.sls
+++ b/pillar/wetkitty/macroservice.sls
@@@ -281,23 -191,15 +291,31 @@@
  
      proxy-mocketbank:
        image-name: "dr.rbkmoney.com/rbkmoney/proxy-mocketbank"
++<<<<<<< HEAD
 +      image-tag:  "fbd79a2a9a100adef9b5c4e67842e2e86d914249"
++=======
+       image-tag:  "5e5646e90d4eec15c8bae36af9281230a33cce20"
++>>>>>>> origin/ft/PROX-90/woody
        memory-limit: 512M
        service-name: "proxy-mocketbank"
        java:
          xmx: 256m
      

Аудит изменений

--

  • Я просто спрошу своих коллег, каждого по очереди.
    😡
 git blame --date=relative -L100,112 pillar/wetkitty/macroservice.sls
d8485b5e (niku64      1 year 7 months ago  101)  capi:
8899c7ab (A. Belyaev  9 months ago         102)    v1:
8899c7ab (A. Belyaev  9 months ago         103)      image-name: "dr.rbkmoney.com/rbkmoney/capi-v1"
b985f601 (E. Levenets 2 weeks ago          104)      image-tag:  "3302c4abc25e4805122d119ebd7b2f6fc1f706a3"
8899c7ab (A. Belyaev  9 months ago         105)      memory-limit: 512M
8899c7ab (A. Belyaev  9 months ago         106)      service-name: "capi-v1"
8899c7ab (A. Belyaev  9 months ago         107)    v2:
8899c7ab (A. Belyaev  9 months ago         108)      image-name: "dr.rbkmoney.com/rbkmoney/capi-v2"
b985f601 (E. Levenets 2 weeks ago          109)      image-tag:  "29d1418564405f6789356a0929c33668e4fdf23a"
8899c7ab (A. Belyaev  9 months ago         110)      memory-limit: 512M
8899c7ab (A. Belyaev  9 months ago         111)      service-name: "capi-v2"

layout: true title: Модель class: animation-fade

{{title}}


Приоритеты

--

  • Скорость работы

--

  • Простота внутреннего устройства

--

  • Поддержка разработки с сотнями одновременно изменяемых веток

--

  • Распределёность

--

  • Умение управляться с проектами огромных размеров

Технические решения

--

  • Состояние вместо набора изменений

--

  • Локальная копия всех внесённых в процессе разработки изменений

--

  • Контрольные хэши в качестве идентификаторов любых изменений

--

  • История изменений не подлежит удалению или манипуляции

Репозиторий

--

 ls -la .git
drwxr-xr-x   14 keynslug  staff    448 Jul 23 19:44 .
drwxr-xr-x   25 keynslug  staff    800 Jun 20 14:25 ..
-rw-r--r--    1 keynslug  staff   2769 Jul 23 19:44 COMMIT_EDITMSG
-rw-r--r--    1 keynslug  staff   1167 Jul 16 17:37 FETCH_HEAD
-rw-r--r--    1 keynslug  staff     19 Jul 16 17:37 HEAD
-rw-r--r--    1 keynslug  staff     41 Jul 16 17:37 ORIG_HEAD
-rw-r--r--    1 keynslug  staff   1614 Jul 15 19:07 config
-rw-r--r--    1 keynslug  staff     73 Apr  5 15:24 description
drwxr-xr-x   13 keynslug  staff    416 Apr  5 15:24 hooks
-rw-r--r--    1 keynslug  staff  13103 Jul 16 17:37 index
drwxr-xr-x    3 keynslug  staff     96 Apr  5 15:24 info
drwxr-xr-x    4 keynslug  staff    128 Apr 10 19:47 logs
drwxr-xr-x  254 keynslug  staff   8128 Jul 12 15:30 objects
drwxr-xr-x    6 keynslug  staff    192 Jun 13 11:22 refs

Коммиты

--

  • Фрагмент истории проекта
commit 879046011d1dbb845537628cc61eaae98dcf8c9c
Parent: 0a8b2bf3a13593bdd70e46cc0b4cce5e714cb285
Author: Andrew Mayorov <encube.ul@gmail.com>
Date:   Sun Jul 15 19:10:33 2018 +0300

    CAPI-262: Make `bin` example look in line w/ definition (#26)

 api/payres/spec/definitions/SecuredBankCard.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--

  • Осмысленная единица изменения

-- - Зачем? Сообщение

- **Кто?** Автор

-- - Когда? Время

- **Что?** Набор изменённых файлов

-- - Где? Хэш, хэш родительского коммита


Ветки

--

  • Пространство для манёвров

--

  • Название для определённой осмысленной истории изменений

--

  • Набор коммитов, наложенных на базовую ветку

Ветки

--

 git checkout -b fix/spelling
Switched to a new branch 'fix/spelling'

--

 git log --oneline HEAD~3..
8790460 (HEAD -> fix/spelling, origin/master, master) CAPI-262: Make `bin` example look in line w/ definition (#26)
0a8b2bf CAPI-262: Stash deposits for later (#21)
04db123 CAPI-262: Stash identity challenge cancellation (#23)

--

 cat .git/refs/heads/fix/spelling .git/refs/heads/master                                                                                     fix/spelling
879046011d1dbb845537628cc61eaae98dcf8c9c
879046011d1dbb845537628cc61eaae98dcf8c9c

Состояния файлов

--

.col-6[

  • Находящиеся в стейджинге, попадающие в грядущий коммит ]

.col-6[

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README.md

]

--

.col-6[

  • Изменённые в рабочей копии репозитория, но ещё не попавшие в стейджинг ]

.col-6[

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)

    modified:   SCENARIOS.md

]

--

.col-6[

  • Новые, ещё не влючённые в репозиторий ]

.col-6[

Untracked files:
  (use "git add <file>..." to include in 
  what will be committed)

    package-lock.json
    withdrawal.svg
    withdrawal.wsd

]


Объекты

  • Практически каждый элемент репозитория объект

--

- файл

--

- директория

--

- коммит

--

  • Исключения

    • ветки ссылки на коммиты

Объекты

  • Сделаем новый коммит на ветку v0
 git commit -m 'Add more TODOs'
[v0 6b6061d] Add more TODOs
 1 file changed, 12 insertions(+), 4 deletions(-)

Объекты

  • Посмотрим, что получилось
 git show --stat v0
commit 6b6061d9dadd271f9c68d11df90f3c63711dbf8b
Author: Andrey Mayorov <a.mayorov@rbkmoney.com>
Date:   Mon Jul 23 20:32:25 2018 +0300

    Add more TODOs

 README.md | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

Объекты

  • Посмотрим, какое теперь состояние ветки v0
 cat .git/refs/heads/v0
6b6061d9dadd271f9c68d11df90f3c63711dbf8b

Объекты

  • Прочитаем, что записано в commit object
 git cat-file -p 6b6061d9dadd271f9c68d11df90f3c63711dbf8b
tree 6fda390e9a9b9a6c92a89fdfa49ffa21d7aede64
parent 879046011d1dbb845537628cc61eaae98dcf8c9c
author Andrey Mayorov  1532367145 +0300
committer Andrey Mayorov  1532367145 +0300

Add more TODOs

--

  • Абсолютно у каждого коммита есть родительский коммит

Объекты

  • Посмотрим на состояние tree object
 git cat-file -p 6fda390e9a9b9a6c92a89fdfa49ffa21d7aede64
100644 blob cddabd62522ad78c23e476a2610eccb048799d83    .gitignore
100644 blob 007daaf6d80329761f298635dfc8178cd6454ed5    Makefile
100644 blob cd87e33b43be29610317197890c0d2b4b607c2f1    README.md
040000 tree 661a6471b416f080efa1d3e51bef0c95028e2ab7    api
100644 blob 133f3456a4e424d1c625786fc746b7b48ee1f496    gulpfile.js
100644 blob 226cd9fdceff689a97af269634065e6ce655a8d1    package.json
040000 tree 857588a242ee82881aa19736b02e14c178ac4435    scripts
040000 tree af474cb37b5668fd23f8590aac3bd9b569dc8b2f    spec
040000 tree a6dcc3e3db0213af966837d671f077128dedba30    web
100644 blob 2ab2153d2eb0261252c21ed65e8186974917a2a7    wercker.yml

--

  • На самом деле изменился только хэш blob object, соответствующего README.md

Объекты

  • Посмотрим, как теперь выглядит blob object, соответствующий README.md
 git cat-file -p cd87e33b43be29610317197890c0d2b4b607c2f1                                                                                                   v0
# Wallet API Specification

## TODO

* Надо бы ввести identity service terms.
...

Слияния

  • Процесс внесения изменений разных авторов в основную ветку

Слияния

 git merge stash/deposits

--

Merge branch 'stash/deposits' into v0

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

--

Merge made by the 'recursive' strategy.
 api/wallet/spec/definitions/BankCardPaymentResource.yaml         |  4 ++++
 api/wallet/spec/definitions/BankWirePaymentResource.yaml         |  3 +++
 api/wallet/spec/definitions/Deposit.yaml                         | 34 ++++++++++++++++++++++++++++++++++
 api/wallet/spec/definitions/DepositEvent.yaml                    | 21 +++++++++++++++++++++
 api/wallet/spec/definitions/DepositEventChange.yaml              | 12 ++++++++++++
 api/wallet/spec/paths/deposits.yaml                              | 29 +++++++++++++++++++++++++++++
 api/wallet/spec/paths/deposits@{depositID}.yaml                  | 17 +++++++++++++++++
 api/wallet/spec/paths/deposits@{depositID}@events.yaml           | 21 +++++++++++++++++++++
 api/wallet/spec/swagger.yaml                                     | 13 +++++++++++++
 15 files changed, 227 insertions(+)

Слияния

  • Посмотрим, как выглядит commit object
 git cat-file -p 9453ded6dfa17c21d2e10c9c2a2464d3ea24e1f3                                                                                                   v0
tree 1baafb778c172fc3d2b3481ccd968dd93452d61f
parent 6b6061d9dadd271f9c68d11df90f3c63711dbf8b
parent 1b232523c7a6714ca8b624d79107987947c1c985
author Andrey Mayorov <a.mayorov@rbkmoney.com> 1532369793 +0300
committer Andrey Mayorov <a.mayorov@rbkmoney.com> 1532369793 +0300

Merge branch 'stash/deposits' into v0

--

  • Commit object с двумя родительскими коммитами

Слияния

  • Посмотрим, как выглядит история
git log --oneline --graph HEAD~8..
*   a183297 Merge branch 'stash/deposits' into v0
|\  
| * 1b23252 Revert "CAPI-262: Stash deposits for later (#21)"
* | 6b6061d Add more TODOs
* | 8790460 CAPI-262: Make `bin` example look in line w/ definition (#26)
|/  
* 0a8b2bf CAPI-262: Stash deposits for later (#21)
* 04db123 CAPI-262: Stash identity challenge cancellation (#23)
* e004ee2 CAPI-262: Fix a couple of unusedness warnings (#22)
* d3d07cc CAPI-262: Fix residence param length (#20)
* cdfe496 CAPI-262: Fix case sensitivity in query params too (#18)

--

  • Две независимо разрабатываемые ветки успешно слились в одну

Удалённые репозитории

--

  • Для синхронизации с коллегами необходимо доставлять свои изменения в удалённый репозиторий

--

  • Чтобы прогрессировать в работе над единым проектом, нужно выбрать схему работы (workflow)

-- - Централизованный репозиторий, свободно принимающий любые изменения

-- - Интеграционный репозиторий, принимающий запросы на включение изменений (pull requests) из форков (forks)

👍


Удалённые репозитории

  • Склонируем интеграционный репозиторий с проектом
 git clone https://github.com/rbkmoney/camp-git-shallow-dive
Cloning into 'swag-wallets'...
remote: Counting objects: 426, done.
remote: Compressing objects: 100% (78/78), done.
remote: Total 426 (delta 58), reused 110 (delta 40), pack-reused 288
Receiving objects: 100% (426/426), 126.16 KiB | 942.00 KiB/s, done.
Resolving deltas: 100% (170/170), done.

--

  • Узнаем, на какие удалённые репозитории он ссылается
 git remote -v
origin  https://github.com/rbkmoney/camp-git-shallow-dive (fetch)
origin  https://github.com/rbkmoney/camp-git-shallow-dive (push)

Удалённые репозитории

  • Сделаем свой личный форк
 hub fork keynslug
Updating keynslug
From ssh://github.com/rbkmoney/camp-git-shallow-dive
 * [new branch]      master     -> keynslug/master
new remote: keynslug

--

  • Узнаем, на какие удалённые репозитории он теперь ссылается
 git remote -v
keynslug    git@github.com:keynslug/camp-git-shallow-dive.git (fetch)
keynslug    git@github.com:keynslug/camp-git-shallow-dive.git (push)
origin  https://github.com/rbkmoney/camp-git-shallow-dive (fetch)
origin  https://github.com/rbkmoney/camp-git-shallow-dive (push)

Удалённые репозитории

  • Основное состояние проекта находится в ветке master

--

  • Пора создать ветку для новых изменений
 git checkout -b ft/last-slides
Switched to a new branch 'ft/last-slides'

--

  • И создать на ней коммит с необходимыми изменениями
 git add presentation.md
 git commit -m 'Add most presentation slides'
[ft/last-slides 268c683] Add most presentation slides
 1 file changed, 701 insertions(+)
 create mode 100644 presentation.md

Удалённые репозитории

  • Часто бывает так, что пока мы занимались этими изменениями, кто-то внёс изменения в основную ветку

--

  • Нужно стараться синхронизировать удалённые изменения

--

В этот раз нам повезло

<pre class="terminal">
 git fetch origin
 git merge origin/master
</pre>
<pre class="terminal">
Already up to date.
</pre>

Удалённые репозитории

  • Пора синхронизировать наши изменения с нашим удалённым репозиторием

--

<pre class="terminal">
 git push -u keynslug ft/last-slides
</pre>
<pre class="terminal">
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 6.68 KiB | 6.68 MiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:keynslug/camp-git-shallow-dive.git
 * [new branch]      ft/last-slides -> ft/last-slides
Branch 'ft/last-slides' set up to track remote branch 'ft/last-slides' from 'keynslug'.
</pre>

--

  • Мы отправили 3 объекта, несложно понять, что это: сам commit, tree object и blob object с файлом presentation.md

--

  • Теперь мы отслеживаем изменения в удалённой ветке ft/last-slides

Удалённые репозитории

  • Пора интегрировать внесённые изменения в интеграционный репозиторий

--

  • Создадим запрос на включение наших изменений

       hub pull-request
      
      Add the most of presentation slides
    
      # Requesting a pull to rbkmoney:master from keynslug:ft/last-slides
      #
      # Write a message for this pull request. The first block
      # of text is the title and the rest is the description.
      
      https://github.com/rbkmoney/camp-git-shallow-dive/pull/1
      

--

  • Мы запросили включение в основную ветку интеграционного репозитория (rbkmoney:master)

Удалённые репозитории

  • Дождёмся одобрения нашего запроса

--

  • После чего интегратор произведёт включение, в результате которого произойдёт слияние наших изменений с основной веткой

--

  • Теперь нам необходимо синхронизировать состояние основной ветки с нашим локальным репозиторием
       git checkout master
      
      Switched to branch 'master'
      Your branch is up to date with 'origin/master'.
      
  • Синхронизация ещё не проведена, локальный репозиторий не знает о произошедших изменениях


Удалённые репозитории

  • Получаем изменения с удалённого репозитория

       git pull origin master
      
      remote: Counting objects: 1, done.
      remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
      Unpacking objects: 100% (1/1), done.
      From github.com:rbkmoney/camp-git-shallow-dive
         d4da560..43fe41a  master     -> origin/master
      

--

  • Наблюдаем в истории появления коммита, фиксирующего слияние наших изменений

       git log --oneline keynslug/master..
      
      43fe41a (origin/master, master) Merge pull request #1 from keynslug/ft/last-slides
      268c683 (keynslug/ft/last-slides) Add most presentation slides
      

class: impact animation-fade layout: true


Конец

Надеюсь, хоть кто-то узнал что-то новое