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 サーバのマシンにリモートリポジトリとなるリポジトリ(ベアリポジトリ)を作成します。

  1. 末尾に.gitと付けた任意のディレクトリを作成する
    例) c:\gitrepo\test.git
  2. Git Bashを起動し、作成したディレクトリ内で次のコマンドを実行する
    git init --bare --shared
    
  3. クライアントからのプッシュを許可するために次のコマンドを実行する
    git config http.receivepack true
    
    http.receivepacktrueに設定しないと、クライアントからプッシュする際に後述のエラーが発生します

Node.jsでWebサーバを作成する

  1. 任意のディレクトリを作成する
  2. コマンドプロンプトを起動し、作成したディレクトリ内で次のコマンドを実行する
    npm init
    
  3. CGIモジュールをインストールする
    npm install cgi
    

ディレクトリ内に次にようなプログラムを用意します。(ポート番号は任意)

index.js
"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

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です