Dealing with Production and Development Git Repositories

Oct 19, 2013, updated Aug 11, 2019 Development Deployment

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:

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:

Reference: Git on the Server