3. Without Version Control
Systems
• Copy files into another directory
• Store or Share files backups by email
• Store or Share files by pendrive
4. Local Version Control
Systems
• Just a local
Database
• Systems:
– RCS - Revision
Control System
(Today is centralized)
http://git-scm.com
5.
6.
7.
8.
9. Centralized Version Control
Systems
• A Central Server
• The most used for
the companies
• Systems:
– CVS
– Subversion
– TFS
http://git-scm.com
10. Centralized Version Control
Systems
Advantages
• Everyone knows to a certain degree what everyone else on the project is
doing
• Administrators have more control over what everyone can do
Disadvantages
• If Server goes down, this means nobody can save changes
• If HD Server breaks, this means good bye all control version history
11. Distributed Version Control
Systems
• Distributed: each client
has fully mirror of the
repository
• Systems:
– Git
– Mercurial
– Bazaar
http://git-scm.com
12. Distributed Version Control
Systems
Advantages
• Everytime someone pulls from the central repository, Git gets a full
history of the changes
• Most of the functionalities doesn’t need access to some network. So we
can work even not connected to the internet
• A project can be associated to a more than one remote repository
• You can do anything just using the console
Disadvantages
• Git requires some learning curve to understand its concept
• The administrators don’t have control over what happens on each client
local repository
13.
14. A Short History of Git
• (1991-2002) – The Linux kernel changes to the
software were passed around as patches and
archived files.
• (2002) – The Linux kernel project began using a
proprietary DVCS system called BitKeeper.
• (2005) – The relationship between Linux kernel
and the BitKeeper broke down. After that Linux
development community create their own tool
named Git, based on what they learned using the
BitKeeper.
15. Some Git Goals
• Speed
• Simple design
• Strong support for non-linear development
(thousands of parallel branches)
• Fully distributed
• Able to handle large projects like the Linux
kernel efficiently (speed and data size)
16. Git Basics
• Snapshots, Not Differences
• Nearly Every Operation Is Local
• Git Has Integrity
• Git Generally Only Adds Data
• The Three States
19. Nearly Every Operation Is
Local
• You can work offline as look the history,
commit some changes or create branchs
20.
21.
22. Git Has Integrity
• Git generate a SHA-1 hash for each commit
associated a file
• Git realize a checksum everytime is tried to
store some change. So Git knows when
something was changed or the file is
corrupted
24b9da6552252987aa493b52f8696cd6d3b00373
23. Git Generally Only Adds Data
• Doing commits regularly it is very difficult to
get the system to do anything that is not
undoable or lose some change
• Let us more comfortable to experiment
changes, because is easy to recover a previous
version
24. The Three States
http://git-scm.com
Modified/Untracked Staged Committed
26. So, what are we going to do?
• Configure • Alias
• Create a Repository • Diff
• Passing through the 3 • Tag
States • Ignoring Files and
• Branch Folders
• Merge • Getting a Remote
• Log Repository
• Basic Workflow
28. Username
git config --global user.name "Your Name Here"
# Sets the default name for git to use when you commit
Email
git config --global user.email "your_email@example.com"
# Sets the default email for git to use when you commit
29. Create a Repository
Access your project directory
cd your_folder_name
Create the repository
git init
Check the repository current status
git status
All your repository data and configuration is stored on a hidden folder named .git on your repository’s root
30. Passing through the 3 States
How is the status now?
Create or Change a file/folder From Nowhere/Repository Working Directory
touch file_name/folder
How is the status now?
Add objects to staging area Working Directory Staging Area
git add (general_comand/file_name/folder_name/…)
How is the status now?
Staging Area Repository
Save objects on local repository
git commit –m ‘This is my awesome comment’
How is the status now?
31. Adding, Removing and Renaming
Stages All
git add -A
Stages new and modified, without deleted
git add .
Stages modified and deleted, without new
git add -u
Stages a removed file
git rm file_name/
Stages a removed folder
git rm -r folder_name/
Stages a renamed file
git mv old_file_name new_file_name
32. .gitignore
Is a hidden file named .gitignore on your root’s repository that contains a list
of all ignored files and folders, like:
*.tmp
x64/
33. Diff
Compare the working directory with local repository
git diff HEAD file_name
Compare the working directory with staging area
git diff file_name
Compare the index with local repository
git diff --cached file_name
Compare the branchs showing just the status and file name
git diff --name-status branch_1 branch_2
34. Custom Alias
Create a new alias to show a log with graph
git config --global --add alias.lol "log --graph --
decorate --pretty=oneline --abbrev-commit --all"
Using the new alias
git lol
List all the local configurations
git config –-local -l
35. Branchs
Create and Switch for a new branch
git checkout –b branch_name
List all local branchs
git branch
Switch for a existing branch
git checkout branch_name
Working with Remote Repositories
Add a local branch for a remote repository
git push remote_name branch_name
Update local branch from a remote branch
git pull remote_name branch_name
36. Merges
Merge on the current branch changes made on another branch
git merge branch_name
Before merge
After merge
37. Merge Conflicts
Master Development
Merge conflict
Resolving the conflict
Commit the file after resolve the conflict
git commit –a -m ‘Resolving merge conflicts’
38. Tags
List all tags
git tag
Creating an annotated tag
git tag -a tag_name -m 'message description'
git tag -a v1.0 -m 'my version 1.0'
Working with Remote Repositories
Sharing tags
git push origin v1.0
All tags
git push origin --tags
40. Add and Pull a Remote
Repository
Cloning a or repository
git clone git@github.com:owner_repo/repo_name.git
Actually what the clone command does is: remote add + pull
git remote add origin
git@github.com:owner_repo/repo_name.git
git pull origin master
And actually what the default pull command does is: fetch + merge
Update local repository avoiding the amount of merges (fetch+rebase)
git pull --rebase repo_name branch_name
41. Pushing to the Remote
Repository
Pushing for the remote repository
git push remote_name branch_name
git push origin master
43. Others helpful (or not) commands
List of Git Contributors
git shortlog -s -n
Show the SHA1 of a file staged
git ls-files -s file_name
Show the SHA1 of a file modified
git hash-object file_name
Discard changes of a file
git checkout --file_name
44. Others helpful (or not) commands
Undo git add before commit
git reset HEAD file_name
One line logs
git log --pretty=oneline
Short status
git status -s
Delete the last commit before Push
git reset --hard HEAD~1