title | author | presentation | ||
---|---|---|---|---|
Программа обучающего курса по Git |
Valeriy Osipov |
|
- По Git, как и по другим IT-технологиям, есть море различных ресурсов.
- Особенностью данного курса является то, что выделены основные варианты использования Git'а. И показано как все эти варианты использования реализуются в основных инструментах:
- Shell
- текстовый редактор VSCode
- IDE PHPStorm и
- GUI для Git'а Sourcetree
- Это позволит выполнять все действия с Git в вашем основном инструменте, что будет препятствовать потере фокуса и будет способствовать повышению продуктивности
- Git - это распределённая система управления версиями
- Git - это некий аналог блокчейн
- Альтернативой Git может выступать, например, Mercurial
- Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. На сегодняшний день его поддерживает Джунио Хамано.
- Программа является свободной и выпущена под лицензией GNU GPL версии 2. По умолчанию используется TCP порт 9418.
- Хранение исходного кода
- Развертывание
- Shell:
- Cmder: PowerShell: Posh-Git: Установка: запустить PowerShell с правами администратора и выполнить: "Install-Module posh-git"
- VSCode:
- Cmder & VS Code Integration
Git Extension Pack
by Don Jayamanne:- Минусы: Отсутствует
gitflow
,Git Merger
- Минусы: Отсутствует
- PHPStorm:
- Settings | Tools | Terminal |
"cmd.exe" /k "<path_to_cmder>\vendor\init.bat"
- Settings | Tools | Terminal |
- GitLab, SourceTree:
- ничего настраивать не нужно
- Страница загрузки на официальном сайте
- SourceTree:
- Sourcetree при установке может устанавливать git и hg
- Windows Server:
- Web Platform Installer (WebPI): Git for Windows присутствует в WebPI
- Shell:
git init
- VSCode:
Git: Initialize Repository
- PHPStorm: VCS | Import into Version Control | Create Git Repository...
- Sourcetree: New tab | Create
- VSCode:
gitignore
extension:- Простое расширение для Visual Studio Code, которое позволяет pull'ить
.gitignore
файлы из репозитоия. Добавляется командаAdd gitignore
с поддержкой шаблонов - как в плагине.ignore
в PHPStorm - Минусы:
- При добавлении какого-либо шаблона в
.gitignore
несколько раз он добавляет несколько копий, хотя дублировать не нужно - в отличие от PyCharm - Это расширение позволяет добавлять в
.gitignore
только файлы, но не позволяет добавлять в.gitignore
директории - в отличие от.ignore
плагина для PHPStorm
- При добавлении какого-либо шаблона в
- Плюсы:
- включен в
Git Extension Pack
- включен в
- Простое расширение для Visual Studio Code, которое позволяет pull'ить
- PHPStorm: плагин
.ignore
:- Плюсы: подчеркивает entries defined more than one - в отличие от
gitignore
расширение в VSCode
- Плюсы: подчеркивает entries defined more than one - в отличие от
- Sourcetree:
- In Sourcetree you should be able to right click on one of the files/folders and select
ignore
. This will auto create a.gitignore
file for you with that particular file/folder in it - Options | Git | Global Ignore List
- Минусы: нет шаблонов - в отличие от расширения
gitignore
в VSCode,.ignore
плагин в PHPStorm
- In Sourcetree you should be able to right click on one of the files/folders and select
Ветка в Git - это метка для коммита. The label moves to new commits as they are created. Когда вы содаете новую ветку вы ничего не изменяете в структуре репозитория. Вы просто создаете новую метку
В Git есть два типа веток:
- Локальные ветки - хранятся в директории .git/refs/heads/
- Удаленные (Remote-tracking) ветки
- Shell:
- Local branches:
git branch
- Remote branches:
git branch -r
- Local branches:
- VSCode: кликнуть на текущей ветке в левом нижнем углу. Появится меню со списком веток
- PHPStorm: кликнуть на текущей ветке в правом нижнем углу. Появится меню со списком веток
- Sourcetree: список веток отобажается в левом sidebar'е в узле "BRANCHES"
- Shell:
git branch <branch_name>
- VSCode:
- кликнуть на текущей ветке в левом нижнем углу. Появится меню с пунктами
Create new branch...
иCreate new branch from...
. При выборе пунктаCreate new branch...
после создания ветки происходит checkout в эту ветку Git: Create Branch From...
,Git: Create Branch
Git Lens
: Branch Context menu |Create Branch (via Terminal)...
- кликнуть на текущей ветке в левом нижнем углу. Появится меню с пунктами
- PHPStorm:
- кликнуть на текущей ветке в правом нижнем углу. Появится меню с пунктом "New Branch"
- При подключении JIRA в качестве Issue Tracker'а при открытии задачи есть галка
Create branch
- Sourcetree: Repository | Branch | New Branch
- Shell:
- В Cmder & Posh-Git текущая ветка отображается в приглашении консоли. Но следует помнить, что это значение не изменяется при изменении текущей ветки иными способами
git status
- VSCode: текущая ветка отображается в левом нижнем углу
- PHPStorm: текущая ветка отображается в правом нижнем углу
- Sourcetree: текущая ветка выделена жирным шрифтом
- Shell:
git checkout -b feature
- Создаёт новую ветку, названнуюfeature
и делает её активной - VSCode:
Git: Create Branch
: после создания ветки происходит checkout в эту ветку- кликнуть на текущей ветке в левом нижнем углу. Появится меню с пунктами
Create new branch...
иCreate new branch from...
. При выборе пунктаCreate new branch...
после создания ветки происходит checkout в эту ветку
- PHPStorm: кликнуть на текущей ветке в правом нижнем углу. Появится меню с пунктом "New Branch". В окне "Create New Branch" есть галка "Checkout branch"
- Sourcetree: Repository | Branch | New Branch. Есть галка "Checkout New Branch"
- Shell:
git checkout <branch_name>
- VS Code:
- Можно кликнуть на названии ветки в левом нижнем углу и выбрать из меню новую ветку
Git: Checkout to...
commandGit Lens
:- Branch Context menu |
Checkout
- справа от названия ветки есть конка "Checkout"
- Branch Context menu |
- Минусы: При переключении ветки в VS Code текущая ветка в Cmder не изменяется
- PHPStorm:
- переключатель веток находится в правом нижнем углу, в строке состояния
- Минусы: При переключении ветки в VS Code текущая ветка в Cmder не изменяется
- SourceTree:
- двойной клик на ветке
- Main menu | Repository | Checkout...
- SourceTree при переключении веток переключает их со всеми изменениями, не перенося изменения в stash
- Shell:
git branch -d <branch_name>
git branch -D <branch_name>
- VS Code:
Git: Delete Branch...
. Эта команда удаляет только локальные ветки. Удалить с помощью этой команды удаленные (remote) ветки нельзяGit Lens
: Branch Context menu |Delete Branch (via Terminal)
. Этот способ для remote branches не работает
- PHPStorm:
- кликнуть на текущей ветке в правом нижнем углу. Появится меню со списком веток. Кликнуть на стрелочку справа от ветки. В открывшемся меню выбрать "Delete"
- Sourcetree:
- from context menu: "Delete <branch_name>..."
- Main menu | Repository | Branch | Delete Branches
- Sourcetree: при выполнении
Git-flow | Finish Feature (Finish Release)
в окнеFinish Feature
(Finish Release
) есть галкиDelete branch
иForce deletion
- GitLab: в MR есть галка
Delete source branch
- Shell:
git branch -m old_branch new_branch
- VSCode:
Git: Rename Branch...
- переименовывает текущую ветку - PHPStorm: кликнуть по стрелочке справа от имени branch'а и появится "Rename..."
- Sourcetree: Branch context menu: "Rename <branch_name>..."
- GitLab: Cannot rename branches
- Shell:
git diff branch1 branch2
- VSCode:
- Git Lens:
COMPARE
node GitLab Workflow
:GitLab: Compare current branch with master
- открывает сравнение веток в GitLab'е
- Git Lens:
- PHPStorm:
- Git | Compare with branch - сравнивает один файл
- Выбрать ветку (либо Context menu | Git | Repository | Branches | <choose branch>, либо кликнуть на текущей ветке в правом нижнем углу), кликнуть по стрелочке справа от ветки и выбрать "Compare with Current" - сравнивает все файлы в ветке
- Sourcetree:
- щелкнуть правой кнопкой мыши на ветке и выберать из контекстного меню пункт "Diff against current" (current refers to the branch you are currently working on). This will give you the diff between the head commits of the two branches
- Shell:
git pull
git pull origin <branch>
- VSCode:
Git: Pull
Git: Pull from...
- PHPStorm:
Update Project (update project)
кнопка на панели инструментов- Main menu | VCS | Update Project...
- Main menu | VCS | Git | Pull...
- Sourcetree:
Pull
кнопка на панели инструментов- Branch Context menu | Pull (tracked)
- Shell:
git push
git pull origin <branch>
- VSCode:
Git: Push
Git: Push to...
- PHPStorm:
- Main menu | VCS | Git | Push...
- в окне "Commit Changes" если нажать на стрелочку справа от кнопки "Commit", то появится кнопка "Commit and Push..."
- Sourcetree:
Push
кнопка на панели инструментов- Branch Context menu |
Push to
,Push to (tracked)
- при выполнении
Git-flow | Finish Feature (Finish Release)
в окнеFinish Feature
(Finish Release
) есть галкаPush changes to remote
- Плюсы: Sourcetree позволяет пушить сразу несколько веток - в отличие от PHPStrom
- Shell:
git merge
- VS Code:
Git: Merge Branch...
- расширение
Git Merger
:- Минусы: missed in the
Git Extension Pack
- Минусы: missed in the
- PHPStorm:
- кликнуть на текущей ветке в правом нижнем углу), кликнуть по стрелочке справа от ветки и выбрать
Merge into Current
- кликнуть на текущей ветке в правом нижнем углу), кликнуть по стрелочке справа от ветки и выбрать
- Sourcetree:
- Branch context menu | Merge <branch_name> into current branch
-
Shell: Merge conflicts occur when the same part of the code has been modified in both branches. For example, if the same line of
README.md
is edited infix
andmaster
. The file impacted will have conflict-resolution markers (<<<<<<<
and>>>>>>>
) added to it by git, showing the conflicting lines (separated by=======
)$ git merge fix # conflict with README.md # merge failed $ cat README.md To contact us email: <<<<<<< HEAD hello@enki.com ======= help@enki.com >>>>>>> fix
You have to manually choose the option you want or combine them. Then run
git add
to mark the file as resolved. When you're done resolving conflicts finalize the merge withgit commit
- VSCode:
- Нажать на кнопку "Source Control" слева
- See MERGE CHANGES in sidebar.
- Those files have merge conflicts.
- PHPStorm: "Resolve Conflicts"
- Sourcetree: Main menu | Actions | Resolve Conflicts
- Shell:
git commit -m <commit_message>
- VSCode:
Git: Commit
,Git: Commit All
- нажать на кнопку "Source Control". В открывшемся sidebar'е есть сверху кнопка "Commit"
- PHPStorm:
- кнопка Commit на панели инструментов
- Main menu| VCS | Commit
- Sourcetree:
- Нажать на кнопку "Commit" на панели инструментов
- В окне "Unstaged files" содержатся все непроиндексированные изменения. Выберать файлы для индексации перед коммитом
- В окне "Staged files" содержатся все проиндексированные файлы. Для удаления файла из индекса нажать на "минус" справа от файла
- Ввести комментарий к коммиту
- Нажать кнопку "Commit" для фиксации всех проиндексированных изменений в репозитории
- VS Code:
Git: Stage Selected Ranges
- PHPStorm: в окне "Commit Changes" можно галочками выбирать изменения
- Sourcetree: WORKSPACE | File Status: you can select lines to stage in the diff view of each uncommitted file. Then you commit what is in staging
-
Shell:
$ git checkout master $ git cherry-pick a456bd7 # merge commit a456bd7 (from another branch) # with branch master
-
VSCode:
Git History
:Cherrypick into current branch
: Сначала необходимо выбрать коммит вGit History
- Context menu | Git: View File History. В открывшемся окне "File History" справа от каждого коммита есть кнопка "Cherry pick, Compare, etc"
-
PHPStorm: Version Control window | Log tab | commit context menu | Cherry-Pick
-
SourceTree: In the log view (Cmd-2), just select one or more commit lines (Cmd-click or Shift-click multi-selects), then right-click and select 'Cherry pick'
-
Shell:
To make changes to your most recent commit use:
$ git commit --amend
For example, you might want to edit the name of the commit:$ git commit -m 'my first comit' $ git commit --amend # editor opens 'my first commit'
-
VSCode:
Git: Commit All (Amend)
,Git: Commit Staged (Amend)
-
PHPStorm: в окне "Commit Changes" есть галка "Amend commit"
-
Sourcetree: In SourceTree, the “Commit options…” dropdown list to the right of the commit dialog has an option to “Amend latest commit.” You’ll be asked if you want to replace the commit text in your current dialog with the message of the previous commit. Say yes, since you’re adding a file to the previous commit that you had meant to include all along
This generates a new commit with all the changes introduced in <commit> afterwards applying it to the current branch
- Shell:
git revert <commit>
.
- VSCode:
Git History
:- Context menu | Git: View File History. В открывшемся окне "File History" справа от каждого коммита есть кнопка "Cherry pick, Compare, etc". В открывшемся меню есть пункт "Revert this (...) commit"
- PHPStorm:
- VCS | Git | Revert...
- кнопка "Revert" на панели инструментов
- Sourcetree:
- Commit context menu | Reverse commit...
HEAD – это указатель на текущую ветку, которая, в свою очередь, является указателем на последний коммит, сделанный в этой ветке. Это значит, что HEAD будет родителем следующего созданного коммита. Как правило, самое простое считать HEAD снимком вашего последнего коммита.
Перемещатm HEAD можно, например, двойным щелчком кнопкой мыши по коммиту в Sourcetree
- Shell:
git flow feature start <feature_name>
git flow feature finish <feature_name>
- VSCode: расширение
gitflow
- PHPStorm:
- плагин
Git Flow Integration
- При подключении JIRA в качестве Issue Tracker'а при открытии задачи есть галка
Create branch
- плагин
- Sourcetree:
- Main menu | Repository | Git-flow
Git-flow
button:- Не создает автоматически бранчи - в отличие от
GitFlow: Initialize repository for gitflow
в VSCode
- Не создает автоматически бранчи - в отличие от
- Использовать Git Flow
- Не сохранять большие бинарные файлы в Git
- Коммиты удалять "нельзя". Для "удаления" коммитов используется Revert commit
Merge Request предназначен для Code Review
Аналогом MR в GitLab является Pull Request в GitHub
- VSCode:
GitLab Workflow
- PHPStorm:
- плагин
GitLab Projects
:- Settings | Version Control | GitLab
- В меню Git добавляется меню "Git Lab" с пунктами "Create Merge Request..." и "List Merge Requests..."
- плагин
GitLab Quick Merge Request
:- Добавляется Settings | Version Control | GitLab Quick Merge Request
- плагин
- Название MR лучше копировать из названия задачи в JIRA
- Заполнить поле Assignee
- Установить галку
Delete source branch
git init
- Добавить в репозиторий файл
- Склонировать учебный репозиторий из GitLab
- Проверить состояние репозитория (
git status
), определить какие есть ветки и какая ветка текущая - Создать новый файл и закоммитить его
- Создать feature-ветку от
develop
- Внести изменения в определенную строчку определенного файла
- Закоммитить изменения
- Сравнить текущую ветку с
develop
- Переключиться на ветку
develop
- Внести другие изменения в ту же строчку того же файла. Закоммитить изменения
- Попробовать смерджить feature-ветку
- Разрешить конфликт
git log
в GitLab