FreeBSD 14
Sponsored Link

Git : Access to Repos via HTTP2024/09/13

 

Configure to access to Repos via HTTP.

[1]

Install Apache httpd, refer to here.

[2]

Configure SSL/TLS settings, refer to here (Optional).

[3] Configure Apache httpd to access to Git repositories.
For example, set [/usr/local/git] as a root directory for Git repositories.
root@dlp:~ #
vi /usr/local/etc/apache24/httpd.conf
<IfModule !mpm_prefork_module>
        # line 166 : uncomment below if httpd is running in except [prefork] mode
        LoadModule cgid_module libexec/apache24/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
        # line 169 : uncomment below if httpd is running in [prefork] mode
        #LoadModule cgi_module libexec/apache24/mod_cgi.so
</IfModule>

# line 181 : uncomment
LoadModule rewrite_module libexec/apache24/mod_rewrite.so

root@dlp:~ #
vi /usr/local/etc/apache24/Includes/git.conf
# create new

SetEnv GIT_PROJECT_ROOT /usr/local/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git /usr/local/libexec/git-core/git-http-backend

<Location /git>
    Options ExecCGI
    AuthName "Git for HTTP"
    AuthType Basic
    AuthUserFile /usr/local/etc/apache24/.htpasswd
    Require valid-user
</Location>

root@dlp:~ #
service apache24 restart
# add user : create a new file with [-c]

root@dlp:~ #
htpasswd -c /usr/local/etc/apache24/.htpasswd freebsd

New password:    
# set password

Re-type new password:
Adding password for user freebsd
[4] Create a Git repository under the root directory.
root@dlp:~ #
cd /usr/local/git

root@dlp:/usr/local/git #
mkdir project02.git

root@dlp:/usr/local/git #
cd project02.git

root@dlp:/usr/local/git/project02.git #
git init --bare --shared

hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint:       git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:       git branch -m <name>
Initialized empty shared Git repository in /usr/local/git/project02.git/

root@dlp:/usr/local/git/project02.git #
chown -R www:www /usr/local/git/project02.git
[5] Verify to access to a Git repository via HTTP.
serverworld@node01:~ $
mkdir work

serverworld@node01:~ $
cd work
# the user is you added with htpasswd on [3]

serverworld@node01:~/work $
git clone https://freebsd@dlp.srv.world/git/project02.git

Cloning into 'project02'...
Password for 'https://freebsd@dlp.srv.world':
warning: You appear to have cloned an empty repository.

serverworld@node01:~/work $
cd project02

serverworld@node01:~/work/project02 $
git config --global user.name "Server World"

serverworld@node01:~/work/project02 $
git config --global user.email "serverworld@node01.srv.world"
serverworld@node01:~/work/project02 $
echo testfile > testfile1.txt

serverworld@node01:~/work/project02 $
git add testfile1.txt

serverworld@node01:~/work/project02 $
git commit testfile1.txt -m "Initial Commit"

[master (root-commit) 49af1a1] Initial Commit
 1 file changed, 1 insertion(+)
 create mode 100644 testfile1.txt

serverworld@node01:~/work/project02 $
git remote -v

origin  https://freebsd@dlp.srv.world/git/project02.git (fetch)
origin  https://freebsd@dlp.srv.world/git/project02.git (push)

serverworld@node01:~/work/project02 $
git push origin master

Password for 'https://freebsd@dlp.srv.world':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 234 bytes | 234.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://dlp.srv.world/git/project02.git
 * [new branch]      master -> master

serverworld@node01:~/work/project02 $
git ls-files

testfile1.txt
Matched Content