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 configure a local git server, then we will create our first git repository for our project, and finally access it from a remote client.
Table of Contents:
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:
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 |
Install git Server:
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:
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: ahmerDate: Sun Dec 9 01:04:16 2018 -0500 My First Commit
We have successfully configured our git server and client in the Red Hat Enterprise Linux (RHEL) 7 environment.