| Git/Gerrit Workshop |
| =================== |
| :copyright: SAP AG |
| :backend: slidy |
| :max-width: 45em |
| :data-uri: |
| |
| Agenda Day 1 |
| ------------ |
| - Introduction |
| - Basic Git Concepts |
| - Exercises: Local Development, Branches |
| - Merge & Rebase |
| - Exercises: Merge, Rebase, History Rewriting |
| |
| Agenda Day 2 |
| ------------ |
| - Push |
| - Gerrit Concepts |
| - Exercises: Code Review with Gerrit |
| - Q & A |
| |
| include::distributed-versioning-systems-1.txt[] |
| |
| include::distributed-versioning-systems-2.txt[] |
| |
| include::git.txt[] |
| |
| Git at SAP |
| ---------- |
| Project using Git: |
| |
| - HANA, JPaaS, Avatar, ... |
| |
| Product Standards |
| |
| Committer/Contributor Model |
| |
| - SAP-UI5, Java Server |
| |
| Centrally hosted and operated |
| |
| Git/Gerrit Team |
| |
| Git/Gerrit Team |
| --------------- |
| Support |
| |
| - mailing list, bug trackers |
| |
| Training |
| |
| Hosting |
| |
| - central Gerrit server with backup |
| |
| Development of Tools |
| |
| - contribution to EGit, JGit, Gerrit |
| |
| Basic Git Concepts |
| ------------------ |
| |
| Making Changes |
| -------------- |
| Structure in the file system |
| |
| - one working tree per repository |
| - `.git` folder is the *version database* |
| - files/folders next to `.git` folder are the *working tree* |
| |
| image:../../img/git-fs-layout.png[] |
| |
| Making Changes |
| -------------- |
| Checkout |
| |
| - populate the working tree with the commit you want to start working from |
| |
| image:../../img/git-checkout.png[] |
| |
| |
| Making Changes |
| -------------- |
| Just start doing your changes |
| |
| - modify, add, delete files |
| |
| Tell Git which changes you intend to commit: |
| |
| git add <file-name> |
| |
| EGit helps by auto-detecting changed files |
| |
| Committing Changes |
| ------------------ |
| |
| git commit |
| |
| - provide a commit message |
| - commit represents a version of the complete repository |
| - each commit is identified by a globally unique ID (SHA1) |
| |
| Commit Message |
| -------------- |
| |
| - first line is header |
| - separated by a blank line follows the body |
| - last paragraph is for meta dat in the `key: value` format |
| |
| ---- |
| First line is header, shall be shorter than 70 chars |
| |
| Separate the body from the header by an empty line. The commit message |
| should describe why you are doing the change. That's what typically helps |
| best to understand what the change is all about. The details of what you |
| changed are visible from the file diffs. |
| |
| Body can be as many paragraphs as you want, shouldn't exceed width of 80 |
| chars. This helps command line tools to render it nicely. Paragraphs are |
| separated by empty lines. |
| |
| Bug: NGP-123 is rendered as a hyperlink to jtrack |
| ---- |
| |
| Making Changes |
| -------------- |
| Commit |
| |
| - create a new commit in the repository with the changes done in the working |
| tree |
| |
| image:../../img/git-commit.png[] |
| |
| Staging Changes - Git Index |
| --------------------------- |
| *Index* or *Staging Area* is where the next commit is prepared |
| |
| image:../../img/git-add-to-index.png[] |
| |
| Commits |
| ------- |
| - commit history |
| - B is successor of A |
| - C is successor of B |
| |
| image::../graph/git/bin/abc.png[align="center"] |
| |
| Branches |
| -------- |
| - branch is a named pointer to a commit, example: `master` |
| - full name is `refs/heads/master` |
| - the commit command moves the pointer |
| |
| image::../../img/git-commit-moves-branch.png[align="center"] |
| |
| Branches |
| -------- |
| |
| - branch can also be moved "manually" to any commit |
| |
| git reset |
| |
| image::../../img/git-reset-branch.png[] |
| |
| Branches |
| -------- |
| |
| - what happens on next `git commit`? |
| - `C` and `D` continue to exist but they are not in the history of the master |
| branch |
| |
| image::../../img/git-commit-after-reset.png[] |
| |
| Branches |
| -------- |
| |
| - usualy there are many branches in a Git repository |
| - branches can also be deleted |
| |
| image::../../img/git-many-branches-and-deletion.png[] |