Overview of GIT
what is Version control system ? why Version control system ?
Traditional way of storing the code.
Types of Version control system(VCS)
Architecture of Git
Installation of Git
Basic Commands
- git init
- git --version
- git add
- git status
- git commit
- git config
- git log
- git show
===================================================================================
==
Branches
===================================================================================
===
Tags
Merge & Rebase
===================================================================================
==
Revert
cherry-pick
===================================================================================
======
Github Account Creation
===================================================================================
======
Advanced commands
- git pull
- git push
- git clone
- git remote
Github Administration
- GUI -> Branch, tags, commit files
- Branch & Tag protection rules
- SSH and HTTPS Clone
- Collabrators
- General Settings
PullRequest
Fork mechansim
==================================================================================
GIT - Global Interaction Tool / Global Tracking Tool/System.
Git is Distributed version control system/source code management which provides
proper tracking and benefit of storage optimization for storing the
code/scripts/file/directories etc
==============================================================================
What is Version control system ?
==============================================================================
Version control system provides an unique version for tracking and optimizing the
storage cost via SHA 125/256 with help of commit id's.
==============================================================================
Why Version Control system ?
==============================================================================
1. Tracking : username - name
email - email-id
Each and every person who modifies the file - space/change
word/change line/add/delete - everything is tracked.
VCS - will track who modified/added/deleted - which
line/word/sentence
Proper Timestamp - date, time, seconds etc
2. Storage cost:
Feature : login page
DAY 1 : [Link] -> 1 GB data -> execution & testing -> stable/working file
Record the changes via commit id -> dnon93b9f2bibnad02nr20osdf
commit-id -> unique random id -> SHA-125/256 (secure hashing alogirthm) -
16 digit octect - alpha-numberic
DAY 2: [Link] -> 4 GB data -> execution & testing -> stable/working file
Record the changes via commit id -> mxjdhdjh983bfb9bb9bbfd
commit-id -> unique random id -> SHA-125/256 (secure hashing alogirthm) -
16 digit octect - alpha-numberic
DAY 3 :[Link] -> 10 GB data -> execution & testing -> stable/working file
Record the changes via commit id -> lsdmdjho0h0h9ddud00d
commit-id -> unique random id -> SHA-125/256 (secure hashing alogirthm) -
16 digit octect - alpha-numberic
=============================================
Traditional way of storing the code:
=============================================
Windows/Linux :
1. Tracking : last modified person name
last modified time & date
size - change in size
problem: Tracking the people name - who modified
- what time & date
which line/word/statement - delete/add/modify/append
2. Storage cost :
Feature : login page
DAY 1 : [Link] -> 1 GB data -> execution & testing -> stable file -> 10 lines
- Day -2 - 3 lines
backup_login.java_27062023 - 1 GB data
DAY-2 : [Link] -> 1 GB + 3 GB = 4 GB -> execution & testing -> stable file -
20 lines
backup_login.java_28062023 - 4 GB data
DAY -3: [Link] -> 4 GB + 10 GB -> -> execution & testing -> stable file
===================================================================================
=====================
Types of Version control system(VCS):
===================================================================================
=====================
1. Centrailized VCS - clearcase, SVN
2. Distributed VCS - Git/Github , bitbucket
===================================================================================
================================
Architecture of GIT :
===================================================================================
================================
GIT - CLI
GITHUB - GUI
Working directory
Staging Area
Local Repo
Remote Repo
===================================================================================
================================
Installation of Git :
===================================================================================
=============================
Method 1 : Package Manager
yum install git -y
Method 2 : Download and Install via tar bundle. Refer Page 6
===================================================================================
==============================
Basic commands:
===================================================================================
==============================
1. How to check git version
command: git --version
[root@ip-172-31-17-229 ~]# git --version
git version 2.39.3
[root@ip-172-31-17-229 ~]#
===================================================================================
============================
2. How to create a repository in git ?
command: git init Repository_name
(OR)
mkdir - /opt/project
cd project
git init
Repository is nothing but an folder/directory with some additional mechanism of git
for performing git operations.
[root@ip-172-31-17-229 git-operations]# git init
Initialized empty Git repository in /opt/git-operations/.git/
[root@ip-172-31-17-229 git-operations]#
===================================================================================
============================
3. How to update the git configuration?
command: git config --list
git config [Link] "GoudSagar"
git config [Link] "[Link].t@[Link]"
[root@ip-172-31-17-229 git-operations]# git config --list
[Link]=0
[Link]=true
[Link]=false
[Link]=true
[Link]=GoudSagar
[Link]=[Link].t@[Link]
[root@ip-172-31-17-229 git-operations]#
===================================================================================
===========================
vi [Link]
add contents -> save file
[root@ip-172-31-17-229 git-operations]# git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
[Link]
nothing added to commit but untracked files present (use "git add" to track)
[root@ip-172-31-17-229 git-operations]#
===================================================================================
===========================
4. How to add file to git control for tracking the file?
command : git add file_name
git add file1 file2
git add .
[root@ip-172-31-17-229 git-operations]# git add .
[root@ip-172-31-17-229 git-operations]#
[root@ip-172-31-17-229 git-operations]# git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: [Link]
[root@ip-172-31-17-229 git-operations]#
===================================================================================
===========================
5. How to check where is my file located currently?
command: git status
===================================================================================
===========================
6. How to record the file changes?
command: git commit -m "Ticket - Messages"
[root@ip-172-31-17-229 git-operations]# git commit -m "Adding new file"
[master (root-commit) c267b4f] Adding new file
1 file changed, 1 insertion(+)
create mode 100644 [Link]
[root@ip-172-31-17-229 git-operations]#
===================================================================================
===========================
7. How to check the commits created ?
command: git log // list all the commits with detailed info
git log -n1 // last commit
git log -n2 // last 2 commits
git log --oneline // short commit and messages
[root@ip-172-31-17-229 git-operations]# git log
commit c267b4fde5e37e23354d7b1f8f1c2d8b3a4c5eb4 (HEAD -> master)
Author: GoudSagar <[Link].t@[Link]>
Date: Fri Jun 30 [Link] 2023 +0000
Adding new file
[root@ip-172-31-17-229 git-operations]#
[root@ip-172-31-17-229 git-operations]# git log --oneline
c267b4f (HEAD -> master) Adding new file
[root@ip-172-31-17-229 git-operations]#
===================================================================================
==============================
8. How to check detailed information on the commit ?
command: git show commit_id
[root@ip-172-31-17-229 git-operations]# git show
c267b4fde5e37e23354d7b1f8f1c2d8b3a4c5eb4
commit c267b4fde5e37e23354d7b1f8f1c2d8b3a4c5eb4 (HEAD -> master)
Author: GoudSagar <[Link].t@[Link]>
Date: Fri Jun 30 [Link] 2023 +0000
Adding new file
diff --git a/[Link] b/[Link]
new file mode 100644
index 0000000..78513c1
--- /dev/null
+++ b/[Link]
@@ -0,0 +1 @@
+THis is first git operation
[root@ip-172-31-17-229 git-operations]#
===================================================================================
================================
Note :
(use "git rm --cached <file>..." to unstage
===================================================================================
================================
Branches :
===================================================================================
==============================
Branches are nothing but logical folders/directories who stores all the
files,directories and unqiue commits.
Branch segregates the work keeping the files/directories and commits uniquely.
With branches, we can re-use the code for other applications.4
Branches are very cheap thats means we can create and delete a branch easly and
branches doesnt occupy more spaces.
eg : TREE(GIT)
|
BRANCH(short) BRANCH(tall)
BRANCH(big)
|
Sub branch(folders) flowers(files) fruits(commits) flowers fruits
Sub branch fruits
eg : Ecommerce website
* login page
* logout oage
* product catalog
* payment pages
* add to cart
Single Branch :
Developer -> Branch(master) -> [Link] - 1000 lines -> 15 commits
[Link] - 500 lines -> 10 commits
product catalog - 2000 lines - 30 commits
payment pages - 1000 lines -> 20 commits
add to cart - 200 lines - 10 commit
Feature wise branches : login-feature branch -> [Link] - 1000 lines -> 15
commits
[Link]
logout-feature branch -> [Link] - 1000 lines -> 15
commits
[Link]
product-feature branch ->[Link] - 2000 lines -> 15
commits
[Link]
Final Branch - ecommerce-website branch or (master) -> combine all the above
branches into single -> build and generate aritfact.
===================================================================================
=
Standard Branches :
===================================================================================
=
1. master/main branch : Contains always latest and updated code/scripts
2. develop branch : Development and testing code/script
3. release branch : Ready to move for production/live
- flipkart-release-1.0
- flipkart-release-2.0
4. feature branch: Feature releated branches
* login-page feature branch
* payment-page branch
5. Hotfix branch : Live issues or customer tickets are managed here
* logout-issues-ticket-number
apart from this , we can create branches with any names
===================================================================================
=
Commands:
===================================================================================
=
git branch // list all branches
git branch branch_name //create the branch
git checkout branch_name // switch a branch same as linux cd command
git checkout -b branch_name // create & switch branches
git branch -D branch_name // forcefully delete a branch
git branch -d branch_name // delete a branch
===================================================================================
=
Tags: Tag is checkpoint or bookmark for marking a commit as stable point of
release.
eg : v1.0, R1.0, Release-stable-1, flk-0.1 etc
command: git tag -l // list all the tags
git tag tag_name // create a tag and assign/mark the
tag to latest commit_id
git tag tag_name commit_id // create a tag and assign/mark the
tag to particular commit _id
git tag -f tag_name commit_id // existing tag will re-assigned to
particular commit
git tag -d tag_name // delete a tag
===================================================================================
===========================
Merge & Rebase :
===================================================================================
===========================
Merge : Merge is used for combining changes(commits/files/directories) from one
branch to another branch.
======================
Types of Merge:
======================
1. Fast forward merge :
eg : master M1 M2 M3 M4
master > git merge develop
develop M1 M2 M3 M4 M5
[root@ip-172-31-17-229 git-operations]# git merge develop
Updating 8bcf6d6..c6f6e9a
Fast-forward
f33 | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 f33
[root@ip-172-31-17-229 git-operations]#
2. Non Fast forward merge :
eg : master M1 M2 M3 M4 M5 M6 M7 MC(merge commit)
master > git merge develop
develop M1 M2 M3 M4 M5 M6
master M1 M2 M3 M4 M5 M6 M7 MC
master > git merge develop
develop M1 M2 M3 M4 M5
M6=================================================================================
==================================
Rebase : Rebase is used for re-writing the history on top of base branch. Rebase
will keep the history clean without combining any commits together.
eg : develop M1 M2 M3 M4 M5 M6 M7 M8
develop > git rebase release
release M1 M2 M3 M4 M5
eg : develop M1 M2 M3 M4 M5 M6 M7 M8
develop > git rebase release
release M1 M2 M3 M4 M5 M6 M8
===================================================================================
=========================================
Revert : Revert is mechanism used to undo/rollback the changes and revert will
create new commit for every rollback/undo operation perform.
command : git revert commit_id
===================================================================================
=========================================
cherry-pick : cherrypick is process of picking up one commit from one branch and
putting the commit in another branch.
command: master > git cherry-pick commit_id
eg : master M1 M2 M3 M4 M5 M8
master > git cherry-pick M8
develop M1 M2 M3 M4 M5 M6 M7 M8
===================================================================================
=====================================
Github Account Creation:
===================================================================================
==================================
Github Administration : PART-1
===================================================================================
==============================
1. How to create repository?
2. How to create branch ?
3. How to tag a commit ?
4. How to create/update file and record the changes via commit id ?
5. How to check commitId?
6. How to check details info about commitID?
===================================================================================
========================
Advanced commands:
===================================================================================
==============
git clone: Cloning is process of downloading the repository.
===================================================================================
=======
Types of clones :
===================================================================================
=======
1. HTTPS : URL - [Link]
command : git clone [Link]
[root@ip-172-31-17-229 http-clone]# git clone
[Link]
Cloning into 'training-devops-work'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 12 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (12/12), 28.64 KiB | 2.60 MiB/s, done.
Resolving deltas: 100% (2/2), done.
[root@ip-172-31-17-229 http-clone]#
Authentication : UserName :GoudSagar
Password : <token>
How to Generate Token for https clone/push/pull?
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
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 ---shyam
===================================================================================
===
2. SSH : URL - git@[Link]:GoudSagar/[Link]
command: git clone git@[Link]:GoudSagar/[Link]
[root@ip-172-31-17-229 ssh-clone]# git clone git@[Link]:GoudSagar/training-
[Link]
Cloning into 'training-devops-work'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 12 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (12/12), 28.64 KiB | 14.32 MiB/s, done.
Resolving deltas: 100% (2/2), done.
[root@ip-172-31-17-229 ssh-clone]#
How to generate and uplaod ssh public key to Github ?
a. generate ssh key : ssh-keygen -t rsa
b. go to profile -> settings -> SSH & GPG Keys -> add new ssh key
===================================================================================
=====================
Ticket : [Link] -> 10 lines
commit your changes in local repo
vi [Link]
git status
git add .
git status
git commit -m "Ticket - messages"
===================================================================================
=====================
git push : Push is mechanism for uploaded the changes(commits/files/directories)
from local repo to remote repository.
command: git push origin main
origin is short/alias name for github url.
verify: git remote -v
===================================================================================
===================================
git pull : Pull is mechanism used for downloading the updated changes from remote
repository to local repository.
command: git pull origin main
[root@ip-172-31-17-229 training-devops-work]# git pull origin main
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), 466 bytes | 466.00 KiB/s, done.
From [Link]:GoudSagar/training-devops-work
* branch main -> FETCH_HEAD
4fc5b22..00a8046 main -> origin/main
Updating 4fc5b22..00a8046
Fast-forward
[Link] | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 [Link]
[root@ip-172-31-17-229 training-devops-work]#
============================================================================
git pull = git fetch + git merge
Method 1: git fetch origin main
- fetch the changes to origin/main
- git log --oneline main -> matching with local branch and remote
branch
- git log --oneline origin/main
main> git merge origin/main
Method 2: git fetch origin main
git checkout -b new-feature origin/main
===================================================================================
git fetch: fetch is process to download the updated changes to intermediatory
branch called origin/branch_name.
command: git fetch origin main
[root@ip-172-31-17-229 training-devops-work]# git fetch origin main
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 669 bytes | 669.00 KiB/s, done.
From [Link]:GoudSagar/training-devops-work
* branch main -> FETCH_HEAD
00a8046..465b8de main -> origin/main
[root@ip-172-31-17-229 training-devops-work]#
[root@ip-172-31-17-229 training-devops-work]# git merge origin/main
Updating 00a8046..465b8de
Fast-forward
[Link] | 1 +
1 file changed, 1 insertion(+)
create mode 100644 [Link]
[root@ip-172-31-17-229 training-devops-work]#
===================================================================================
============================
Remotes: Git Remote is central clearing house where we are storing all the
code/scripts etc
Alais -> Short name for github url's for easily identifying the repo url and easily
pushing & pulling changes to & from
remote repos.
Commands : git remote -v -> Display all the remote repos
git remote add upstream git@[Link]:goudsagar/[Link]
git remote remove upstream git@[Link]:goudsagar/[Link]
git remote update origin git@[Link]:johnsmith/[Link]
git remote -v
origin git@[Link]:bathinisreelatha/[Link](push)
origin git@[Link]:bathinisreelatha/[Link](fetch)
upstream git@[Link]:goudsagar/[Link](push)
upstream git@[Link]:goudsagar/[Link](fetch)
syntax: git remote add <alais> < url >
command: git remote add upstream git@[Link]:goudsagar/[Link]
git push origin employee
git pull upstream company
================================================
Fork mechansim :
A fork is a copy of a repository. Forking a repository allows you to freely
experiment with changes without affecting the original project.
===================================================================================
===============================
Pull Request - Creating pull request, review mechanism
=======================================================================
Pull requests help you collaborate on code with other people. As pull requests are
created, they’ll appear here in a searchable and filterable list.
===================================================================================
============================
Github Adminsitration:
===================================================================================
===========================
1. Github Account Settings
2. GITHUB Activities : branch/tag/repository/create file/commit from GUI
3. Repository Settings :
* Collabrators : Permission
* Branch protection from deletion
* Restriction the Merge into company account - Minimum 2 review and always pull
request to be raised
4. Tag protection from deletion
5. SSH Keys upload
6. HTTPS Token Generation
7 . Webhooks - Covered in Jenkins
8. Fork Mechanism
===================================================================================
====================