Version control with
Git and GitHub
Szymon Grabia

Version Control System

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

What is Git?
Distributed Version Control System

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

Distributed VCS
shared
repository
developer
developer
developer

The Three Stages

Working
directory
Staging area
Repository
Local
Remote
Repository
git add
git commit
git push
git pull
git checkout
Git commits



Git identity
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"


Initialize git repository
git init


Show the working tree status
git status



Add files to staging area
git add FILE


Commit files
git commit -m "MESSAGE"


Commit messages


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

Show changes in tracked files
git diff
Exit with "q"


Git Branching
Branching
C1
C2
master

Branching
C1
C2
master
test
git branch test

Branching
C1
test
C2
master
git checkout test

Branching
C1
test
C2
C3
master

Branching
C1
test
C2
C3
C4
master

Branching
C1
test
C2
C3
C4
C5
master

Branching
C1
test
C2
C3
C4
C5
C6
master

Branching
C1
master
test
C2
C3
C4
C5
C7
C6
git checkout master
git merge test

Show commit history
git log [--graph]
Exit with "q"



Branching


GitFlow

Merge conflicts


Merge conflicts
git merge test



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:

Don't store data in repositories!
Git stash
git stash
git stash apply
OR
git stash pop
git stash list
git stash show -a

Much more...
git tag
git rebase
git rm
git reset
git blame

The Three Stages

Working
directory
Staging area
Repository
Local
Remote
Repository
git add
git commit
git push
git pull
git checkout
Repository hosting







GitHub flow


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

Clone remote repository
git clone https://github.com/LaVestima/ngseminar-git-github.git


Clone remote repository
git remote -v


Push changes to remote
git push [<repository> [<refspec>...]]

git push origin master
Pull changes from remote
git pull [<repository> [<refspec>...]]

git pull origin master


Awesome lists about all kinds of interesting topics

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
- 1,204