When you want to host your code using Git but want to keep it secret, you can setup a Git service on your OpenBSD server. You’re then able to access it through the Wild Wild Web using SSH and don’t have to pay GitHub to expect privacy.
Table of Contents
Configure a Git Server
I thought it would be complicated, but it’s not… A Git Server is basically a file tree that’s being managed and accessed by a
git command. There are “hidden” files and special filenames that trace the sources structure and life. But it ‘s basically a folder and it’s content.
On the OpenBSD server, start by installing Git:
# pkg_add git quirks-2.304 signed on 2017-04-02T15:01:33Z git-2.12.2:cvsps-2.1p0: ok git-2.12.2: ok The following new rcscripts were installed: /etc/rc.d/gitdaemon See rcctl(8) for details. Look in /usr/local/share/doc/pkg-readmes for extra documentation.
I don’t want to run Git as a daemon. I’ll access it via SSH. So that’s all for me!
Create a projet repository
On the server side, a projet is a sub-directory containing a Git structure:
# mkdir -p /home/git/project1 # /home/git/project1 # git init --bare Initialized empty Git repository in /home/git/project1/
Another step done. That’s what the folder looks like:
# find ./ ./ ./hooks ./hooks/pre-push.sample ./hooks/multimail ./hooks/multimail/post-receive.example ./hooks/multimail/git_multimail.py ./hooks/multimail/migrate-mailhook-config ./hooks/pre-rebase.sample ./hooks/prepare-commit-msg.sample ./hooks/update.sample ./hooks/pre-receive.sample ./hooks/pre-applypatch.sample ./hooks/setgitperms.perl ./hooks/applypatch-msg.sample ./hooks/commit-msg.sample ./hooks/post-receive-email.sample ./hooks/post-update.sample ./hooks/pre-commit.sample ./info ./info/exclude ./branches ./description ./refs ./refs/heads ./refs/tags ./objects ./objects/pack ./objects/info ./HEAD ./config
Create a local repository
We can set up a local repository where the code will be modified and tested before being submitted:
# mkdir $HOME/git-copy/project1 # cd $HOME/git-copy/project1 # git init # git add . # git config user.name "Joel Carnat" # git config user.email joel [at] carnat [dot] net # git remote add origin /home/git/project1
The file can now be pushed and pulled to the server side:
# cd $HOME/git-copy/project1 # touch index.html # git add index.html # git commit -m "Initial: index.html" -a [master (root-commit) dcb9525] Initial: index.html 1 file changed, 1 insertion(+) create mode 100644 index.html # git push origin master Counting objects: 3, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 265 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To /home/git/project1 * [new branch] master -> master
Whenever I want to look at the server side, I can go to the repository directory and issue:
# git ls-tree --full-tree -r master 100644 blob b89bead3bf3c6cedfea645e742276daef2cbc23b index.html
I can now double-check that my file was pushed successfully.
Create a remote repository
Time to set up remote access to the project repository. I use SSH to connect to the OpenBSD server. When logged in, I can access the Git repository filesystem:
# mkdir ~/drive_d/GITthings/project1 # git init # git add . # git config user.name "Joel Carnat" # git config user.email joel [at] carnat [dot] net # git remote add origin ssh://email@example.com/home/git/project1 # git pull origin master Enter passphrase for key '~/.ssh/id_rsa': remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. Depuis ssh://git-server.tld/home/git/project1 * branch master -> FETCH_HEAD * [nouvelle branche] master -> origin/master
And that’s all. Just as simple.