git basicS
HISTORY
GIT (NOUN)
British English slang roughly equivalent to
"unpleasant person"
"I'm an egotistical bastard, and I name all my projects after myself. First 'Linux', now 'git'. "
Linus Torvalds
DECENTRALIZED
FAST, Small footprint
COMPOSABLE / FLEXIBLE
LINUX INSTALLATION
sudo apt-get install git
yum install git
CREATING A GIT REPO
~ $ git init blog Initialized empty Git repository in /home/kalmario/blog/.git/
~/blog $ ls -la
total 12K
drwxrwxr-x 3 kalmario kalmario 4.0K 2013-10-26 12:45 ./
drwxr-xr-x 49 kalmario kalmario 4.0K 2013-10-26 11:40 ../
drwxrwxr-x 8 kalmario kalmario 4.0K 2013-10-26 11:40 .git/
-
.git is directory tree all information of your repository
-
to un-git, simply delete .git folder
Cloning an Existing Repository
~ $ git clone https://github.com/larkarvin/TestRepo.git blog
Cloning into blog...
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 16 (delta 3), reused 16 (delta 3)
Unpacking objects: 100% (16/16), done.
Setting UP your identity
git config --global user.name "Your Name"
git config --global user.email you@example.com
~/blog $ git config --global user.name "larkarvin" ~/blog $ git config --global user.email "arvin@almar.io"
~/blog $ git config --global -l user.name=larkarvin user.email=arvin@almar.io
REPOSITORY INFORMATION
~/blog $ git config -l
user.name=larkarvin
user.email=arvin@almar.io
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/larkarvin/TestRepo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
WORKING TREE STATUS
svn status
git status
~/blog $ vim home.php ~/blog $ git status
# On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # home.php nothing added to commit but untracked files present (use "git add" to track)
ADDING A FILE TO BE TRACKED
tells git to track a specific file
svn add
git add
~/blog $ git add home.php
~/blog $ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached ..." to unstage)
#
# new file: home.php
#
COMMITTING YOUR FIRST FILES
svn commit -m "First Commit"
git commit -m "First Commit"
~/blog $ git commit -m "First Commit"
[master (root-commit) f40d943] First Commit
git stage
Stores information that will go into your next commit or readying a file for commit
~/blog $ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
#
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: home.php
#
no changes added to commit (use "git add" and/or "git commit -a")
~/blog $ git stage home.php
~/blog $ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
#
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: home.php
~/blog $ git commit -m "Commit Message"
UN-STAGING A FILE
~/blog $ git reset home.php
Unstaged changes after reset:
M home.php
~/blog $ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
#
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: home.php
#
no changes added to commit (use "git add" and/or "git commit -a")
PUSH YOUR CHANGES FROM EXISTING REPO TO A REMOTE REPO
equivalent to your first svn import
~/blog $ git remote add origin https://github.com/larkarvin/TestRepo.git
~/blog $ git push -u origin master
Username:
Password:
Counting objects: 6, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 507 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/larkarvin/TestRepo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
Git PULL
like svn update
Updates your local working copy
from your remote server
from your remote server
~/blog $ git pull
Password:
remote: Counting objects: 2, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 41 (delta 27), reused 0 (delta 0)
Unpacking objects: 100% (41/41), done.
From https://github.com/larkarvin/TestRepo.git
1ad00c7..320bd11 master -> origin/master
Updating 1ad00c7..320bd11
Fast-forward
home.php | 8 ++
1 files changed, 20 insertions(+), 13 deletions(-)
GIT PUSH
git push lets you move a local branch to
another or remote repository.
another or remote repository.
~/blog $ git push
Username:
Password:
Counting objects: 12, done.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (10/10), 807 bytes, done.
Total 10 (delta 3), reused 0 (delta 0)
To https://github.com/larkarvin/TestRepo.git
6502f62..b8fd39d master -> master
GIT DIFF
svn diff [filename]
git diff [filename]
Show changes between the working tree or a tree
~/blog $ git diff home.php
diff --git a/home.php b/home.php
index 70c74b9..cf67afb 100644
--- a/home.php
+++ b/home.php
@@ -1,4 +1,4 @@
- <title> Hello World! </title>
+ <title> Hello Universe! </title>
BRANCHING
~/blog $ git branch -l
* master
~/blog $ git branch develop
~/blog $ git branch -l
develop
* master
BRANCH SWITCHING
~/blog $ git checkout develop
Switched to branch 'develop'
~/blog $ git branch -l
* develop
master
switch your working tree to a specified branch
BEWARE: every uncommitted changes will be lost
BEWARE: every uncommitted changes will be lost
MERGING
~/blog $ git checkout develop
Switched to branch 'develop'
~/blog $ vim home.php
~/blog $ git stage home.php
~/blog $ git commit -m "Commit Message"
~/blog $ git checkout master
Switched to branch 'master'
~/blog $ git merge develop
Merge made by recursive.
home.php | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
MOVING FILES
git mv
~/blog $ git mv home.php index.php
same as
~/blog $ mv home.php index.php
~/blog $ git rm home.php
~/blog $ git add index.php
show log
git log
~/blog $ git log
commit b8fd39d4ca134662d44c1a90c2d95c16ff97f183
Author: larkarvin
Date: Sat Oct 26 13:45:31 2013 +0800
Change Title
commit 98fed4c365e56309569cb03402e60a263b992350
Merge: a3e8b02 abf9968
Author: larkarvin
Date: Sat Oct 26 10:55:48 2013 +0800
Merge branch 'develop'
with date filter
git log --since=2.weeksREVERTING CHANGES
like svn revert
Reverts your changes
~/blog $ git checkout home.php
~/blog $ git diff home.php
.gitignore
- .gitignore file contains files
-
that will be ignored by your repo
-
resides on your working tree's root dir
~/blog $ cat .gitignore
*.jpg
*.png
/includes/local-config.php
GIT TAG
same as svn tag
~/blog $ git tag v3.0
Listing your tags
~/blog $ git tag -l 'v1.1.*'
v1.1.2 v1.1.3 v1.1.4
gitFLOW
GITFLOW
-
A strict branching model designed around the project release.
- Formulated by Vincent Driessen
- Provides a robust framework for managing larger projects
- Perfect for large development teams
HISTORICAL BRANCHES
Record the history of the projects
-
master - stores the official release history (tags)
-
develop - integration branch of features
FEATURE BRANCH
-
May branch off from: develop
-
Must merge back into: develop
-
Branch naming convention: anything except master, develop, release-*, or hotfix-*
RELEASE BRANCH
-
Bug fixes, documentation generation, and other release-oriented tasks should go in this branch.
-
Frees up development branch and ensures no new features will be added to the release
RELEASE BRANCH
-
May branch off from: develop
-
Must merge back into: develop and master
-
Branch naming convention: release-*
HOT FIX BRANCH
-
Used to quickly patch production releases.
-
Only branch that should fork directly off of master.
NEXT TOPICS:
-
DIFFERENT MERGING STRATEGIES
-
RESOLVING CONFLICTS
References:
-
https://www.atlassian.com/git/workflows
-
git man pages
THANK YOU!!
https://slid.es/larkarvin/git-basics/
http://almar.io
@larkarvin
Karl Arvin Almario
October 26, 2013
Solutions Architect at US AUTOPARTS NETWORK
Copy of Git Basics
By Michael PAMBO OGNANA
Copy of Git Basics
Git Basics Presentation Slides. This presentation assumes that the audiences knows svn and basic svn release flow. Discusses Gitflow a strict branching model designed around the project release.
- 317