I use Git for managing my source code. I usually have 3 Git repositories, Local repository, Server repository and Production repository.

Local repository:

This is a development version of your project. Here you develop new feature and tests things.

Server repository:

This is a server repository. Any developer push to this repository and the production pulls from it.

Production repository:

This repository holds the production repository. You should not develop to this repository just pull the changes from Server repository.

Github is very great for hosting public projects and sharing codes. But what if you want to host it and don’t want to share codes publicly. Then you need to host your codes.

Hosting git repository is very easy. Here are the steps:

First you need to create bare repository “my_project.git”

git clone --bare my_project my_project.git

Put the bare repository to the server.

scp -r my_project.git user@git.example.com:location/for/my_project.git

Add group write permissions

ssh user@git.example.com
cd location/for/my_project.git
git init --bare --shared

If you want to make the bare repository writable by specific group: Fix the folder permission and assign user to that group

chgrp -R group_name folder_name

To get a local repository to work with:

git clone user@git.example.com:location/for/my_project.git

If you have a production code running on the server and a local code for development.

You will have 3 repositories:

  • development repository
  • production repository
  • bare repository

The scenario for deployment would be:

  1. write your codes in the development repository
  2. push your code from development repository to bare repository
  3. pull codes from bare repository to production repository

The steps for the scenario:

  • So on the development system run
  git commit
    git push origin
  • Then on the production system run:
  git pull origin

Reference: Git on the Server