GIT 101

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Based on this article I am using GITHUB http://www.github.com for hosting my repositories securely online. Code is hosted on GITHUB makes the code easy to browse, download, fork, etc.

Clone a project

Cloning a project is creating a local copy on your host of a remote repository.

System Message: WARNING/2 (<string>, line 9)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git clone https://github.com/vision1983/nfw.git

Joining / Fork a project

On GITHUB you can create a fork which is a copy of repository hosted on GITHUB within your own GITHUB space.

Once you pushed your changes to own copy on GITHUB you can do a pull request on GITHUB which will inform the maintainers of the original project that you wish to merge your changes upstream.

Creating your own GITHUB project

Create a repository on GITHUB without initializing.

  • Enter your source code directory
  • Create a new repository with empty README.md or README.rst.

System Message: WARNING/2 (<string>, line 26)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git init
 $ git add README.md
 $ git commit -m "first commit"
 $ git remote add origin https://github.com/vision1983/test.git
 $ git push -u origin master

or push exisiting repository to GITHUB

System Message: WARNING/2 (<string>, line 36)

Cannot analyze code. Pygments package not found.

.. code:: bash

 git remote add origin https://github.com/vision1983/test.git
 git push -u origin master

Working with local repository

To commit changes you need to stage the changes using the following commands:

Add file to repository

System Message: WARNING/2 (<string>, line 47)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git add file

Remove file from repository

System Message: WARNING/2 (<string>, line 53)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git del file

Before committing you can undo or checkout original file

System Message: WARNING/2 (<string>, line 59)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git checkout file

Commit changes locally

System Message: WARNING/2 (<string>, line 65)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git commit -a

Finally upload or push to GITHUB

System Message: WARNING/2 (<string>, line 71)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git push

Syncing a fork

Sync a fork of a repository to keep it up-to-date with the upstream repository.

Before you can sync your fork with an upstream repository, you must configure a remote that points to the upstream repository in GITHUB.

List current configured remote repository for your fork

System Message: WARNING/2 (<string>, line 83)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git remote -v
 origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
 origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

Specify a new remote upstream repository that will be synced with the fork

System Message: WARNING/2 (<string>, line 91)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.

Verify the new upstream repository you've specified for your fork

System Message: WARNING/2 (<string>, line 97)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git remote -v
 origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
 origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
 upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
 upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

Fetch the branches and their respective commits from the upstream repository. Commits to master will be stored in a local branch, upstream/master

System Message: WARNING/2 (<string>, line 107)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git fetch upstream
 remote: Counting objects: 75, done.
 remote: Compressing objects: 100% (53/53), done.
 remote: Total 62 (delta 27), reused 44 (delta 9)
 Unpacking objects: 100% (62/62), done.
 From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
 * [new branch]      master     -> upstream/master

Check out your fork's local master branch

System Message: WARNING/2 (<string>, line 119)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git checkout master
 Switched to branch 'master'

Merge the changes from upstream/master into your local master branch. This brings your fork's master branch into sync with the upstream repository, without losing your local changes

System Message: WARNING/2 (<string>, line 126)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git merge upstream/master

GIT Tags

Git has the ability to tag specific points in history as being important. Typically people use this functionality to mark release points (1.0.0, and so on)

List your tags

System Message: WARNING/2 (<string>, line 137)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git tag
 0.0.1
 0.0.2

Git uses two main types of tags

  • lightweight
  • and annotated.

Annotated Tags

Annotated as per GIT Documentation

Annotated tags, however, are stored as full objects in the Git database. They’re checksummed; contain the tagger name, email, and date; have a tagging message; and can be signed and verified with GNU Privacy Guard (GPG). It’s generally recommended that you create annotated tags so you can have all this information; but if you want a temporary tag or for some reason don’t want to keep the other information, lightweight tags are available too.

Creating an annotated tag

The easiest way is to specify -a when you run the tag command.

System Message: WARNING/2 (<string>, line 158)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git tag -a 0.0.2 -m "my version 0.0.2"
 $ git tag
 0.0.0
 0.0.1
 0.0.2

The -m specifies a tagging message, which is stored with the tag.

You can see the tag data along with the commit that was tagged by using the git show command

System Message: WARNING/2 (<string>, line 170)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git show 0.0.2

Lightweight Tags

Lightweight as per GIT Documentation

A lightweight tag is very much like a branch that doesn’t change. It just points to a specific commit.

To create a lightweight tag, don’t supply the -a, -s, or -m option

System Message: WARNING/2 (<string>, line 182)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git tag 0.0.3
 $ git tag
 0.0.0
 0.0.1
 0.0.2
 0.0.3

When you run git show on the tag, you don’t see the extra tag information as per with annotated tag.

Tagging Later

You can also tag commits after you’ve moved past them.

Retrieve commit history looks like this

System Message: WARNING/2 (<string>, line 200)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git log --pretty=oneline

Tag based on checksum from history

System Message: WARNING/2 (<string>, line 206)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git tag -a 0.0.6 [checksum]

Sharing Tags

By default, the git push command doesn’t transfer tags to remote servers. You will have to explicitly push tags to a shared server after you have created them.

System Message: WARNING/2 (<string>, line 215)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git push origin [tagname]

If you have a lot of tags that you want to push up at once, you can

System Message: WARNING/2 (<string>, line 221)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git push origin --tags

Delete Tags

Delete tag locally

System Message: WARNING/2 (<string>, line 230)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git tag -d 0.0.1

Delete tag from upstream

System Message: WARNING/2 (<string>, line 236)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git push origin :refs/tags/1.0.5

Now, when someone else clones or pulls from your repository, they will get all your tags as well.

Managing Branches

In your GITHUB project, you need to keep your master branch clean, by clean I mean without any changes, like that you can create at any time a branch from your master. Each time, that you want to commit a bug or a feature, you need to create a branch for it, which will be a copy of your master branch.

When you do a pull request on a branch, you can continue to work on another branch and make another pull request on this other branch.

Before creating a new branch, pull the changes from upstream. Your master needs to be up to date.

Create the branch on your local machine and switch in this branch

System Message: WARNING/2 (<string>, line 252)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git checkout -b [name_of_your_new_branch]

Push the branch on github

System Message: WARNING/2 (<string>, line 258)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git push origin [name_of_your_new_branch]

When you want to commit something in your branch, be sure to be in your branch.

You can see all branches created by using

System Message: WARNING/2 (<string>, line 266)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git branch

See details on branches for origin/GITHUB

System Message: WARNING/2 (<string>, line 272)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git remote show origin

Switch to a branch

System Message: WARNING/2 (<string>, line 278)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git checkout [name_of_your_new_branch]

Pull updates from branch on GITHUB

System Message: WARNING/2 (<string>, line 284)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git pull origin [name_of_your_new_branch]

Push updates to your branch on GITHUB

System Message: WARNING/2 (<string>, line 290)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git push origin [name_of_your_new_branch]

Delete a branch on your local filesystem

System Message: WARNING/2 (<string>, line 296)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git branch -d [name_of_your_new_branch]

Force the deletion of local branch on your filesystem

System Message: WARNING/2 (<string>, line 302)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git branch -D [name_of_your_new_branch]

Delete the branch on github

System Message: WARNING/2 (<string>, line 308)

Cannot analyze code. Pygments package not found.

.. code:: bash

 $ git push origin :[name_of_your_new_branch]