WindowsにGitサーバを構築する方法|Smart HTTP編
社内など、ローカルエリアネットワーク上にあるWindowsマシン上にGitのリモートサーバを構築することで、複数人でのソースコード管理やバージョン管理が容易になります。この記事は、Windows上にGitサーバを構築する手順の2つ目、HTTP(HTTPS)通信を使う方法です。
前提条件
- Gitサーバ - Windows10
- クライアント - Windows10
- Gitサーバ、クライアント共にGitはインストール済み
- WebサーバはNode.jsを使うため、Node.jsをインストール済み
バージョン
- Node.js - v14.17.4
- Git - 2.32.0.windows.2
Gitサーバのプロトコルには次の4つを使用できます。
- Local プロトコル
- SSH プロトコル
- Git プロトコル
- HTTP プロトコル
本記事はHTTP プロトコルの構築手順になります。
参考
Git サーバ
リポジトリの作成
Git サーバのマシンにリモートリポジトリとなるリポジトリ(ベアリポジトリ)を作成します。
- 末尾に.gitと付けた任意のディレクトリを作成する
例) c:\gitrepo\test.git - Git Bashを起動し、作成したディレクトリ内で次のコマンドを実行する
git init --bare --shared
- クライアントからのプッシュを許可するために次のコマンドを実行する
git config http.receivepack true
http.receivepack
をtrue
に設定しないと、クライアントからプッシュする際に後述のエラーが発生します
Node.jsでWebサーバを作成する
- 任意のディレクトリを作成する
- コマンドプロンプトを起動し、作成したディレクトリ内で次のコマンドを実行する
npm init
- CGIモジュールをインストールする
npm install cgi
ディレクトリ内に次にようなプログラムを用意します。(ポート番号は任意)
"use strict";
const cgi = require('cgi');
const http = require('http');
// 環境変数の設定.
process.env.GIT_PROJECT_ROOT = "C:/gitrepo";
process.env.GIT_HTTP_EXPORT_ALL = "";
const server = http.createServer(cgi("C:/Program Files/Git/mingw64/libexec/git-core/git-http-backend.exe",
{ stderr: process.stderr }));
server.listen(8022);
Ubuntuの場合は、サーバの起動を次のようにします。
const server = http.createServer(cgi('/usr/lib/git-core/git-http-backend',
{ stderr: process.stderr }));
Webサーバの起動
次のコマンドを実行します。
node index.js
git clone
クライアントでGitサーバのリポジトリをクローンする手順です。操作は全てGi Bash上で行います。次のコマンドを実行すると、リポジトリをクローンできます。
git clone http://<サーバ名>:<ポート番号>/<リポジトリ名>
# 例
git clone http://git-server:8022/test.git
git push時のアクセス権エラー
前述のリポジトリの作成でリポジトリにプッシュを許可していない場合、次のようなエラーが発生します。
fatal: unable to access 'http://git-server:8022/test.git/': The requested URL returned error: 403