gitと言えば、Microsoftに買収されたgithubのWEBサービスやら、セルフホストするならgitlab、AWSならCodeCommitなど有名どころですが、外部に持たせずにシンプルなgitサーバを立てる方法があります。

今回はOpenssh経由でアクセスするgitサーバの方法を紹介します。

まずはOpensshが利用可能なサーバを用意します。
以下コマンドでgitをインストールします。

$ sudo apt install git

gitユーザを作成

今回はgitユーザを作成します。(gitユーザを作成せずとも既存ユーザ名でも可能)

$ sudo useradd git
$ sudo usermod -G git sudo  
$ su git

gitディレクトリを作成

gitを格納するディレクトリを作成します。

筆者の場合は以下としました。

$ mkdir /var/git

gitディレクトリのアクセス権を設定

今回上記フォルダのアクセス権限を以下にします。

$ chown -R git /var/git
$ chgrp -R git /var/git

gitリポジトリを作成

以下コマンドでリポジトリを新規作成します。

$ mkdir /var/git/test.git
$ cd /var/git/test.git
$ git init --bare

gitリポジトリにCloneでアクセスしてみる

今度はgitサーバではない端末から、以下コマンドでアクセスします。
(尚、「.ssh/config」ファイルにホスト名の指定や、認証鍵も設定しておくと、パスワードなしでシンプルにアクセスできます。)

$ git clone ssh://git@xxx.xxx.xxx.xxx/var/git/test.git

うまく行けば以下のようなレスポンスが返ってきます。

❯ git clone ssh://git@git0/var/git/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.

ここでローカル側にはtest フォルダが作成されます。


gitにファイルを追加する

クローンがうまくいったので、ローカル側のテストフォルダにファイルを追加します。
適当にテキストファイルを作成し、addします。

$ git add test.txt

gitコミット、gitプッシュします。

以下コマンドでプッシュします。

$ git commit -m "First commit"
$ git push origin main

gitサーバ側にアップされたか確認します。

gitプッシュが完了したら、サーバ側のディレクトリがどうなったのか、確認してみます。

サーバ側には直接ファイルという形での管理ではなく、バイナリに変換されているようです。

フォルダ構成は以下

-rw-r--r--  1 git git  HEAD
drwxr-sr-x  2 git git  branches
-rw-r--r--  1 git git  config
-rw-r--r--  1 git git  description
drwxr-sr-x  2 git git  hooks
drwxr-sr-x  2 git git  info
drwxr-sr-x 10 git git  objects
drwxr-sr-x  4 git git  refs

objectsフォルダ以下に2桁の16進数でフォルダが作成されて保管されていました。

drwxrwsr-x  2 git git  25
drwxrwsr-x  2 git git  64
drwxrwsr-x  2 git git  76
drwxrwsr-x  2 git git  9c
drwxrwsr-x  2 git git  d1
drwxrwsr-x  2 git git  fd
drwxr-sr-x  2 git git  info
drwxr-sr-x  2 git git  pack

さらに25のフォルダには以下のファイル名

38729d9e6bafa5e730ff04682e78f8d72c3ef2

中身はバイナリ形式で以下となっておりました。

x?Ϳ
?0?q?<???%1?A'???Eܮ?
                    ??????#?}ˏOK?sjpSה?5???K!????г???b3"9٦?ȳ??
硗?,??#?u?:?^t?????~$l????5???i ?)4

したがって、サーバ側でgit管理した場合、ユーザは仮に別環境からはサーバに対してcloneで復元可能ですが、サーバ管理者はコード内容は確認できないため、クライアントサイドでID/PASSなど忘れないように管理が必要ということになりますね。


VSCodeでもアクセスしてみる

ローカルに作成したtestフォルダをリポジトリの場所として指定して開くと、
コマンドだけでなく、VScodeでもgitアクセスが可能です。


まとめ

今回はUbuntu Linux 22.10の環境でgitサーバを構築してみるというお話で、手順の紹介となりました。

何かの参考になれば幸いです。