A Distributed Version Controlling System BUET Systems Analysis, Design & Development Group Md. Maksud Alam Chowdhury CSE ,BUET [email protected]
Aug 06, 2015
A Distributed Version Controlling System
BUET Systems Analysis, Design & Development Group
Md. Maksud Alam ChowdhuryCSE ,[email protected]
A version controlling system
Distributed
Most popular software for managing codebases
Support for remote collaboration
Remove millions of backup folder
Smartly merge separate codes
Track day to day changes of codes
Small changes won’t destroy whole project
Disk crash or virus won’t hamper your codes ever !!!!!!!!!!!!!
Branching & Merging (to be discussed widely)
Small & Fast
Distributed
Free & Open Source
Standalone version:http://git-scm.com/downloads
Portable version:https://code.google.com/p/msysgit/downloads/list
They both have command line interface .
Navigate to your project folder
Right Click on Folder-> Git Bash
It will open a shell
Type git init to initialize a git repo on your project folder.
Having existing codes won’t cause problem
In most cases , you will create a repo where you have your codes.
Note that we are in master branch by default
We will discuss it later on branching.
Let’s add some files (not needed in case already have existing codes)
Let’s create “a.cpp” , “b.txt” , “c.cpp” in the “DemoApp” Folder.
Add some dummy texts on them
Current Working DirectoryDemoApp/
|--a.cpp|--b.txt|--c.cpp
So we think our app is stable right now.
So we need to commit the files to be preserved
Type git add .
Type git commit –am “message describing commit”
So git will have save current codes as the latest stable code on master branch
We can check the status of the current condition of codes by typing
git status
Every commit is saved uniquely with a number
You can switch back to any previous commit any time
By Default we are in the master branch which is root .
Branches are independent of each other
Enough talking !!!!!!
Let’s create another branch “dev” which is a development version.
We will experiment in the dev branch where as fully stable codes will be in master branch
Typegit checkout –b dev
It will create a new branch dev and switch to “dev“ branch
The new branch will contain exact copy from where we created it.
Any change we do now in the working directory , after commit will go for “dev” branch
Let’s change the content of “b.txt” and create “d.txt”
So we have changed “b.txt” and added “d.txt”
Now Type git status
We now commit the current working directory
So Type Again
git add .
git commit –am “commit message”
Let’s switch back to the “master” branch
Type git checkout master
It will restore the master branch codes
Note that “b.txt” is restored & d.txt is gone
So you have two separate version of codes
On Master Branch On dev branch
So we were in the master branch again
We are sure to merge the dev branch into master branch
Type git merge dev
Surprisingly there is no conflict in “b.txt”
Because until now you are the only person who changed the branch in local workstation
We need a central place to synchronize the team members repositories
Github , Bitbucket , gitorious , Assembla , repositoryhosting etc.
Github only provides public repo
If you don’t want it to be public go for Bitbucket
https://bitbucket.org/account/signup/
Similarly as previous slide
Type
git push origin dev
There are several mechanisms [try googling]
We will show an easy approach for small teams
We will maintain master for ultimate stable version .
Each team member will have their own branch
After finalizing some features team members will create a temporary branch
The temporary branch will be incrementally merged and tested by team captain
But there might be conflict in configuration files which might hamper project.
[Android menifest.xml , database settings etc ]
Do ignore such files while committing
Create a .gitignore file and list the directories or file not to be tracked
Keep a list of changelog.txt file
After merging master do manually change the configurations
Conflicts arise when You have changed your local files and committed them in your branch
But someone else have also changed the same files in his own branch
You want to merge his branch
Git will have no way to decide which one to keep and which one to abandon
So it keeps both of them in a way you can identify difference.
We change our local file b.txt again in master
Add , Commit it
We pull some previous version of the same file in dev
git pull origin dev
Pull = fetch + merge
Now this will create a conflict
Here head is local version
Lower part is the fetched version
The marker is where things actually started to be different
It would not create a conflict if appending was required or creating a new or deleting a file was required
But here a complete rewrite is required
Git tool command
Manually change the conflicting files
Add, Commit , Push
Don’t Pull directly
At first fetch (git fetch origin dev)
See Whether any difference (git diff origin/dev)
The decide to merge
If you already have a repo on bitbucket or github like the one we created
Just type
git clone <http_link_of_project>
So you don’t need to bother about backup or disk lost
git init git add . git commit –am “<your commit message>”
git status
git checkout –b <New_Branch_Name> git checkout <Branch_Name> git merge <Branch_Name>
git remote add <Name_For_Server> <Link_Of_Your_Project>
git push <Name_For_Server> <Branch_To_Push>
git pull <Name_For_Server> <Branch_To_Pull>
git fetch <Name_For_Server> <Branch_To_Fetch>
git diff <Branch_To_Compare_With_Current_Branch>
http://git-scm.com/
http://gitref.org
https://bitbucket.org
Please Email Any Question At: