Bsadd training-git

Post on 06-Aug-2015

144 views 0 download

Tags:

Transcript of Bsadd training-git

A Distributed Version Controlling System

BUET Systems Analysis, Design & Development Group

Md. Maksud Alam ChowdhuryCSE ,BUETmc65799@gmail.com

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:

mc65799@gmail.com