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
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:
Command | Description |
---|---|
git init | Initialize 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 status | Show the status of working directory and staging area. |
git log | Display commit history. |
git branch | List, 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 pull | Fetch and integrate changes from a remote repository. |
git push | Upload local repository content to a remote repository. |
git fetch | Download changes from a remote repository but do not merge. |
git diff | Show changes between commits, branches, or working directory. |
git reset | Reset the current HEAD to a specified state. |
Feature | Git | SVN (Subversion) | Mercurial |
---|---|---|---|
Version Control | Distributed | Centralized | Distributed |
Branching | Lightweight and fast | More cumbersome and slower | Lightweight and fast |
History Management | Full history locally available | History is centralized | Full history locally available |
Performance | High performance for both large and small projects | Performance can vary, especially with large projects | High performance, similar to Git |
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
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.com | git-client.itlab.com |
IP Address: | 192.168.116.129/24 | 192.168.116.128/24 |
Operating System: | RHEL 7.6 | RHEL 7.6 |
Read Also: How to install Git on Rocky Linux 9
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.
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.
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.
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!
Puppy Linux is a fast, lightweight OS designed for speed and simplicity, perfect for old…
Learn how to change Apache document root in Linux by following this step-by-step guide. Adjust…
Discover how to change Apache port in Linux easily. Follow our simple guide to modify…
Learn how to create a virtual host in Apache Server with this comprehensive guide. Set…
Discover 10 practical tasks for the RHCSA exam with step-by-step solutions. Boost your Linux skills…
Discover the ultimate Fail2ban configuration guide. Learn how to set up, customize, and optimize Fail2ban…
This website uses cookies.
View Comments
Very well explained thank you :!
Pleasure is mine.
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
Hi, "git log" by default shows commit log of current branch. You should try using "git log --all" to see all commit logs.
Hi, what are the best practice for securing git server.
Hi, this article was already written by considering the best practices and security considerations.