Share on Social Media

In this configuration guide, you will learn, how to setup Local Git Server on CentOS 7 or other Redhat based Linux distributions. #centlinux #linux #git

What is Git? :

git is a famous version control system. git is used to track changes in computer files and to coordinate work on those files among multiple people. git is primarily used for source-code management by software development teams, however, it can be used to keep track of changes in any set of files. git is freeware and open source. It is packaged with almost every distribution of Linux operating systems.

In this article, we will setup local git server, then we will create our first git repository for our project, and finally access it from a remote client.

System Specification:

In this article, we have two virtual machines, one as the git server, and the other as the git client. Their specifications are:
IP Address:
Operating System:RHEL 7.6RHEL 7.6

Read Also: How to install Git on Rocky Linux 9 

Setup Local Git Server:

git rpm is provided in RHEL/CentOS ISO, therefore we can easily install git from a local yum repository.

Connect to using ssh, and install git by using yum command.

# yum install -y git

We need a user to own our git repository. Therefore, we add git user and set the password as follows:

# useradd git
# passwd git
Changing password for user git.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

Create Your First git Repository:

Now, login with git user and create a local git Repository.

# su - git
$ mkdir ~/repo
$ cd ~/repo
$ git init --bare --shared project1
Initialized empty shared Git repository in /home/git/repo/project1/

Here, we have created a directory repo to keep all of our projects’ repositories in a single place. Then, we have created a bare repository for our project1 project.

Note: A bare repository has no working area, therefore, it is not possible to add files to it locally. While a shared repository is used to allow project members to push changes to the git server.

Enable post-update hook by copying the sample file as follows:

$ cd ~/repo/project1/hooks/
$ cp post-update.sample post-update

git access remote repositories via ssh service, therefore, no explicit Linux firewall configuration is required.

Our git server has been successfully configured and we have created an empty repository for our first git project.

Configure a git Client:

Connect to using ssh with root user.

Configure name resolution by adding following line in /etc/hosts.

# echo " git-server" >> /etc/hosts

Install git rpm by using yum command.

# yum install -y git

git is already installed on, therefore, yum didn’t perform any installation.

Connect as ahmer user and configure keybased-authentication between and

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ahmer/.ssh/id_rsa):
Created directory '/home/ahmer/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ahmer/.ssh/id_rsa.
Your public key has been saved in /home/ahmer/.ssh/
The key fingerprint is:
The key's randomart image is:
+---[RSA 2048]----+
| o.o=  o.        |
|. +o.=o. o       |
| . +o.= =        |
|.E ... *         |
|=.o   o S        |
|+B.o .           |
|*o*oo            |
|+*.*oo           |
|o.+=O.           |
$ ssh-copy-id
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ahmer/.ssh/"
The authenticity of host ' (' can't be established.
ECDSA key fingerprint is SHA256:PhsrMh10ZgS3G8P/upEd5bIbjTbUW0Asbbgtsq9y3Xs.
ECDSA key fingerprint is MD5:24:af:0c:3a:33:39:2b:2a:d5:3d:64:05:a2:b6:a1:b8.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ''"
and check to make sure that only the key(s) you wanted were added.

$ ssh

Set following git variables for the ahmer user.

$ git config --global "ahmer"
$ git config --global ""

Create a directory for keeping local git repositories.

$ mkdir ~/repo
$ cd ~/repo

Create a clone of project1 git repository.

$ git clone project1
Cloning into 'project1'...
warning: You appear to have cloned an empty repository.
$ ls
$ cd project1
$ ls

We have created a clone of project1 repository on our local machine. You can see that currently there isn’t any file in the repository. Let’s create some files therein.

$ echo "my first file" > file1.txt
$ cp /etc/hosts .
$ ls
file1.txt  hosts

Add these two files to our git repository.

$ git add .
$ git commit -am "My First Commit"
[master (root-commit) 10394a7] My First Commit
 2 files changed, 4 insertions(+)
 create mode 100644 file1.txt
 create mode 100644 hosts

Push these changes to the remote git repository at

$ git push origin master
Counting objects: 4, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 362 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
 * [new branch]      master -> master

To verify the changes, connect to via ssh and check the log.

$ git log
commit 10394a774797bc5c5313b9aae086aa1ab71c69b5
Author: ahmer 
Date:   Sun Dec 9 01:04:16 2018 -0500

    My First Commit


In this configuration guide, you have learned, how to setup local Git server on CentOS 7 and create and use a git repository from client.

6 thoughts on “How to setup Local Git Server on CentOS 7”
  1. Hello,
    I'm a systems engineer and am trying to set up a git server. so far the tests went great thanks to your guide, when i run git log on the client i see he's committed a few changes. however i can't seem to find them on the git server.
    How doest it work practically? should the client be the web app server and i push the changed from the git server ?
    explanation would be wonderful thanks again

Leave a Reply

Your email address will not be published. Required fields are marked *