Version control with
Git and GitHub
Szymon Grabia
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Version Control System
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
System that records changes to a set of files over time
- restoration of files back to a previous state
- comparison of changes over time
- transparent cooperation
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7575585/pasted-from-clipboard.png)
What is Git?
Distributed Version Control System
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Main features:
- branching system for non-linear development
- primarily local repositories
- preservation and integrity of change history
- 3 stages of files
Centralized VCS
shared
repository
developer
developer
developer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Distributed VCS
shared
repository
developer
developer
developer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
The Three Stages
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Working
directory
Staging area
Repository
Local
Remote
Repository
git add
git commit
git push
git pull
git checkout
Git commits
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589183/Screenshot_from_2020-07-27_20-26-11.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7604901/Screenshot_from_2020-08-02_18-18-27.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Git identity
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589702/Screenshot_from_2020-07-28_00-19-45.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Initialize git repository
git init
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7575544/Screenshot_from_2020-07-21_23-31-00.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Show the working tree status
git status
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7605136/Screenshot_from_2020-08-02_22-34-31.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7605137/Screenshot_from_2020-08-02_22-34-42.png)
Add files to staging area
git add FILE
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7605141/Screenshot_from_2020-08-02_22-46-59.png)
Commit files
git commit -m "MESSAGE"
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7605144/Screenshot_from_2020-08-02_22-51-55.png)
Commit messages
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7575709/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
The seven rules of a great Git commit message
- Separate subject from body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Show changes in tracked files
git diff
Exit with "q"
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7605158/Screenshot_from_2020-08-02_23-12-56.png)
Git Branching
Branching
C1
C2
master
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Branching
C1
C2
master
test
git branch test
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Branching
C1
test
C2
master
git checkout test
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Branching
C1
test
C2
C3
master
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Branching
C1
test
C2
C3
C4
master
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Branching
C1
test
C2
C3
C4
C5
master
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Branching
C1
test
C2
C3
C4
C5
C6
master
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Branching
C1
master
test
C2
C3
C4
C5
C7
C6
git checkout master
git merge test
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Show commit history
git log [--graph]
Exit with "q"
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7604839/Screenshot_from_2020-08-02_17-39-57.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7604840/Screenshot_from_2020-08-02_17-40-15.png)
Branching
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7603608/Screenshot_from_2020-08-01_15-43-20.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7603616/Screenshot_from_2020-08-01_15-45-15.png)
GitFlow
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7571977/pasted-from-clipboard.png)
Merge conflicts
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589600/txXrz6I.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Merge conflicts
git merge test
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7616568/Screenshot_from_2020-08-06_12-36-05.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7616570/Screenshot_from_2020-08-06_12-36-51.png)
Ignore files
# .gitignore
# ignore all files ending with ".log"
*.log
# BUT don't ignore "important.log"
!important.log
# ignore all directories named "data"
data/
# ignore directories named "data" in the project root
/data/
A collection of useful .gitignore templates:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Don't store data in repositories!
Git stash
git stash
git stash apply
OR
git stash pop
git stash list
git stash show -a
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Much more...
git tag
git rebase
git rm
git reset
git blame
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
The Three Stages
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Working
directory
Staging area
Repository
Local
Remote
Repository
git add
git commit
git push
git pull
git checkout
Repository hosting
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7616791/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7616795/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7575497/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7575587/GitHub_Logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7575497/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7575587/GitHub_Logo.png)
GitHub flow
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589542/Screenshot_from_2020-07-27_22-39-39.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
SSH keys
ssh-keygen -t rsa -b 4096 -C "szymon.grabia@gmail.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Clone remote repository
git clone https://github.com/LaVestima/ngseminar-git-github.git
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7616710/Screenshot_from_2020-08-06_13-36-28.png)
Clone remote repository
git remote -v
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7616711/Screenshot_from_2020-08-06_13-38-24.png)
Push changes to remote
git push [<repository> [<refspec>...]]
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
git push origin master
Pull changes from remote
git pull [<repository> [<refspec>...]]
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
git pull origin master
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7603566/Screenshot_from_2020-08-01_14-08-38.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7589557/ngseminars-logo1.png)
Awesome lists about all kinds of interesting topics
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1361300/images/7616603/pasted-from-clipboard.png)
NGSeminar: Version control with git and github
By Szymon Grabia
NGSeminar: Version control with git and github
https://www.youtube.com/watch?v=XYnHWGPnvNM&ab_channel=NGSchool
- 985