Configure Git Server with HTTP on CentOS 8

29/12/2020
Git
In this article, I am going to show you how to configure Git Smart HTTP server on CentOS 8 for hosting your Git repositories privately. So, let’s get started.

Installing Git and Apache HTTP Server:

First, update the CentOS 8 package repository cache with the following command:

$ sudo dnf makecache

Now, install Git, Apache HTTP server and Apache tools with the following command:

$ sudo dnf install git httpd httpd-tools

Now, press Y and then press <Enter> to confirm the installation.

Git, Apache and required Apache tools should be installed.

Configuring Apache HTTP Server:

In this section, I am going to show you how to configure Apache server for accessing Git repositories over HTTP protocol.

First, create a new configuration file /etc/httpd/conf.d/git.conf with the following command:

$ sudo vi /etc/httpd/conf.d/git.conf

Now, add the following lines to the configuration file /etc/httpd/conf.d/git.conf:

<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
DocumentRoot /var/www/git
ScriptAlias / /usr/libexec/git-core/git-http-backend/
 
<Directory "/usr/libexec/git-core">
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/git">
Dav On
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

The final configuration file should look as follows. Now, save the configuration file.

Now, create the GIT_PROJECT_ROOT directory /var/www/git with the following command:

$ sudo mkdir /var/www/git

Now, configure SELinux for the /var/www/git directory with the following command:

$ sudo semanage fcontext -m -t httpd_sys_rw_content_t
 "/var/www/git(/.*)?"

For the SELinux changes to take effect, run the following command:

$ sudo restorecon -Rv /var/www/git

Now, restart the Apache HTTP server service with the following command:

$ sudo systemctl restart httpd

Also, add the Apache HTTP server service to the CentOS 8 system startup with the following command:

$ sudo systemctl enable httpd

Now, allow the HTTP port (80) through the filewall with the following command:

$ sudo firewall-cmd –add-service=http –permanent

For the changes to take effect, reload the firewall as follows:

$ sudo firewall-cmd –reload

Writing a Script for Creating HTTP Accessible Git Repositories Easier:

To make creating HTTP accessible Git repositories easier, I’ve written a simple shell script which you can use to save a lot of your valuable time.

If you want to use my script, create a new file in the path /usr/sbin/git-crate-repo with the following command:

$ sudo vi /usr/sbin/git-create-repo

Then type in the following lines of codes in the newly created file /usr/sbin/git-crate-repo.

#!/bin/bash
GIT_DIR="/var/www/git"
REPO_NAME=$1
mkdir -p "${GIT_DIR}/${REPO_NAME}.git"
cd "${GIT_DIR}/${REPO_NAME}.git"
git init –bare &> /dev/null
touch git-daemon-export-ok
cp hooks/post-update.sample hooks/post-update
git config http.receivepack true
git config http.uploadpack true
git update-server-info
chown -Rf apache:apache "${GIT_DIR}/${REPO_NAME}.git"
echo "Git repository ‘${REPO_NAME}‘ created in ${GIT_DIR}/${REPO_NAME}.git"

This is what the final shell script looks like. Once you’re done, save the file.

Now, add executable permission to the shell script /usr/sbin/git-create-repo with the following command:

$ sudo chmod +x /usr/sbin/git-create-repo

Create HTTP Accessible Git Repositories:

Now, you can create a new HTTP accessible Git repository (let’s call it test) with the following command:

$ sudo git-create-repo test

A new HTTP accessible Git repository test should be crated.

Accessing the Git Repositories from the Git server:

To access the Git repositories that you’ve created on your CentOS 8 Git server, you need is that IP address of the CentOS 8 Git server and the Git repository name.

The Git server administrator can find the IP address of the Git server with the following command:

$ nmcli

In my case, the IP address is 192.168.20.129. It will be different for you. So, make sure to replace it with yours from now on.

Once the Git server administrator finds the IP address, he/she can send it to the users/developers who will be using Git repositories hosted on the Git server. Then the users/developers can access their desired Git repositories.

For example, if bob wants to clone the Git repository test from the Git server, he may do so as follows:

$ git clone http://192.168.20.129/test.git

The Git repository test should be cloned from the Git server.

A new directory test/ should be created in the current working directory of bob.

Now, bob can navigate to the test/ directory as follows:

$ cd test/

Now, bob creates a new file message.txt in the Git repository.

$ echo ‘hello from linuxhint’ >> message.txt

Bob commits the changes.

$ git add .

$ git commit -m ‘initial commit’

Bob confirms whether the changes were committed to the repository.

$ git log –oneline

Now, bob uploads the changes to the Git server.

$ git push origin

Another developer (let’s say shovon) who wants to contribute to the test Git repository can also clone the test repository from the Git server.

$ git clone http://192.168.20.129/test.git

Shovon navigates to the test/ directory.

$ cd test/

Shovon finds the commit that bob made.

Now, shovon changes the message.txt file.

$ echo ‘shovon added some new texts’ >> message.txt

Commits the changes.

$ git add .

$ git commit -m ‘added some new message’

Shovon confirms whether the changes were committed to the repository.

$ git log –oneline

Shovon uploads the changes to the Git server.

$ git push origin

Now, bob pulls the changes from the Git server.

$ git pull

Bob finds the new commit.

$ git log –oneline

Bob finds the changes that Shovon made to the message.txt file.

This is how you can use Git repositories from the Git HTTP server.

Adding User Authentication to Git Server:

If you want to add user authentication to server wide Git repositories or specific Git repositories, then check the article Configure Git Server with HTTP on Ubuntu.

So, that’s how you configure Git Smart HTTP Server on CentOS 8 and use Git repositories from the Git server. Thanks for reading this article.

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

GitKraken 2.7 Released with few Improvements and New Feature

GitKraken 2.7 the most recent update, is a free cross-platform Git client tool that integrates nicely with GitHub, hence...
28/12/2020

GitLab Runner and GitLab CI

What is Continuous Integration (CI)? Continuous Integration is the next logical step after have a version control system...
28/12/2020

GitLab Container Registry Setup

In our last post we showed you how you can set up a GitLab instance to manage your organization’s or your personal projects....
28/12/2020
Bài Viết

Bài Viết Mới Cập Nhật

Reliable IPv4 and IPv6 Subnet Rental Services: The Perfect Solution for Global Businesses
23/12/2024

Tìm Hiểu Về Thuê Proxy US – Lợi Ích và Cách Sử Dụng Hiệu Quả
11/12/2024

Mua Proxy V6 Nuôi Facebook Spam Hiệu Quả Tại Onetcomvn
03/06/2024

Hướng dẫn cách sử dụng ProxyDroid để duyệt web ẩn danh
03/06/2024

Mua proxy Onet uy tín tại Onet.com.vn
03/06/2024