Share on Social Media

Learn how to set up a local Git server on CentOS 7 with our step-by-step guide. Configure and manage your own Git server to efficiently handle version control for your projects. #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.

Git is a distributed version control system designed to handle everything from small to very large projects with speed and efficiency. It tracks changes in source code during software development and is widely used for version control in programming and collaborative projects.

Here’s a detailed overview of Git and its features:

Key Features of Git

  1. Distributed Version Control:
    • Local Repositories: Each developer has a complete copy of the project history on their local machine.
    • Collaboration: Developers can work offline, commit changes, and synchronize with others when they are back online.
  2. Branching and Merging:
    • Branch Creation: Create branches to work on new features or fixes without affecting the main codebase.
    • Merging: Combine changes from different branches into the main branch.
  3. Data Integrity:
    • SHA-1 Hashing: Git uses SHA-1 hashing to ensure the integrity of the data. Every commit is identified by a unique hash, which helps in detecting changes and potential data corruption.
  4. Commit History:
    • Version History: Git maintains a detailed history of changes, allowing users to review, revert, or roll back changes.
  5. Efficient Performance:
    • Speed: Git is designed for high performance, handling large projects and repositories efficiently.
    • Performance: Common operations like committing changes, creating branches, and merging are fast.
  6. Staging Area:
    • Indexing: Changes can be staged before committing, allowing users to review and organize changes.
  7. Collaboration Workflows:
    • Pull Requests/Merge Requests: Tools and services like GitHub, GitLab, and Bitbucket offer additional features for code reviews and pull requests.
  8. Support for Multiple Workflows:
    • Centralized Workflow: A single central repository with multiple contributors.
    • Feature Branch Workflow: Creating separate branches for new features.
    • Git Flow Workflow: A standardized branching model for managing releases and hotfixes.

Common Git Commands

CommandDescription
git initInitialize a new Git repository.
git clone [url]Clone a remote repository to your local machine.
git add [file]Stage changes for the next commit.
git commit -m "message"Commit staged changes with a message.
git statusShow the status of working directory and staging area.
git logDisplay commit history.
git branchList, create, or delete branches.
git checkout [branch]Switch branches or restore working directory files.
git merge [branch]Merge changes from one branch into another.
git pullFetch and integrate changes from a remote repository.
git pushUpload local repository content to a remote repository.
git fetchDownload changes from a remote repository but do not merge.
git diffShow changes between commits, branches, or working directory.
git resetReset the current HEAD to a specified state.
Git Common Commands

How Git Works

  1. Repository Structure:
    • Working Directory: Where you make changes to your files.
    • Staging Area (Index): A place to prepare changes before committing.
    • Local Repository: Stores committed changes and history.
    • Remote Repository: A version of the repository on a server used for collaboration.
  2. Basic Workflow:
    • Make Changes: Edit files in the working directory.
    • Stage Changes: Add changes to the staging area.
    • Commit Changes: Save changes to the local repository.
    • Push Changes: Upload changes to a remote repository.
    • Pull Changes: Fetch and merge changes from a remote repository.

Benefits of Using Git

  • Collaboration: Facilitates team collaboration with features for branching, merging, and pull requests.
  • Flexibility: Supports various workflows and branching strategies.
  • Control: Offers tools for code review, version tracking, and change management.
  • Security: Ensures data integrity and provides a detailed history of changes.

Git vs. Other Version Control Systems

FeatureGitSVN (Subversion)Mercurial
Version ControlDistributedCentralizedDistributed
BranchingLightweight and fastMore cumbersome and slowerLightweight and fast
History ManagementFull history locally availableHistory is centralizedFull history locally available
PerformanceHigh performance for both large and small projectsPerformance can vary, especially with large projectsHigh performance, similar to Git
Git Alternatives

Summary

Git is a powerful and flexible version control system that supports both individual and collaborative development workflows. Its distributed nature, combined with features like branching, merging, and staging, makes it an essential tool for modern software development.

Recommended Training for You: GitHub Ultimate: Master Git and GitHub – Beginner to Expert

752950 b773show?id=oLRJ54lcVEg&offerid=1628165.752950&bids=1628165

Linux Server Specification

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.

We have two virtual machines, one as the git server, and the other as the git client. Their specifications are:

Hostname:git-server.itlab.comgit-client.itlab.com
IP Address:192.168.116.129/24192.168.116.128/24
Operating System:RHEL 7.6RHEL 7.6

Read Also: How to install Git on Rocky Linux 9 

Setup Local Git Server on CentOS 7

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

Connect to git-server.itlab.com 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 on CentOS 7

Connect to git-client.itlab.com using ssh with root user.

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

# echo "192.168.116.129 git-server.itlab.com git-server" >> /etc/hosts

Install git rpm by using yum command.

# yum install -y git

git is already installed on git-client.itlab.com, therefore, yum didn’t perform any installation.

Connect as ahmer user and configure keybased-authentication between ahmer@git-client.itlab.com and git@git-server.itlab.com.

$ 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/id_rsa.pub.
The key fingerprint is:
SHA256:qJKo3QumkS/Rz/LOqR3gCEOdYH9lLaeGgS1B/QkqrkE ahmer@git-client.itlab.com
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.           |
+----[SHA256]-----+
$ ssh-copy-id git@git-server.itlab.com
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ahmer/.ssh/id_rsa.pub"
The authenticity of host 'git-server.itlab.com (192.168.116.129)' 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
git@git-server.itlab.com's password:

Number of key(s) added: 1

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

$ ssh git@git-server.itlab.com

Set following git variables for the ahmer user.

$ git config --global user.name "ahmer"
$ git config --global user.email "ahmer@git-client.itlab.com"

Create a directory for keeping local git repositories.

$ mkdir ~/repo
$ cd ~/repo

Create a clone of project1 git repository.

$ git clone git@git-server.itlab.com:~/repo/project1 project1
Cloning into 'project1'...
warning: You appear to have cloned an empty repository.
$ ls
project1
$ 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-server.itlab.com.

$ 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)
To git@git-server.itlab.com:~/repo/project1
 * [new branch]      master -> master

To verify the changes, connect to git-server.itlab.com via ssh and check the log.

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

    My First Commit

If you are new to Linux and facing difficulty in working at Linux Bash prompt. We recommend that, you should read The Linux Command Line, 2nd Edition: A Complete Introduction by William Shotts.

Final Thoughts

Setting up a local Git server on CentOS 7 is a great way to manage version control for your projects, offering you complete control over your repositories and collaboration workflows. By following the steps outlined in this guide, you can create a reliable and secure Git environment tailored to your needs.

If you found this guide useful and need further assistance with your Git server setup or other related tasks, visit my Fiverr profile to explore my range of services. I offer personalized support for setting up and managing Git servers, as well as other Linux and software development tasks.

Thank you for reading, and happy coding!

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