2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

node.jsとgit-http-backendを使ってGitリポジトリをHTTPで公開する

Last updated at Posted at 2018-09-26

1分レシピ。

やりたいこと

Windows上でgitリポジトリを公開したい。SSHサーバを立てるのが面倒ならHTTPだね!

必要なもの

  • Node.js
  • yarn とか npm
  • Git for Windows

リポジトリの準備

適当なディレクトリにbare repositoryを用意し、

pushするための設定
git config http.receivepack true

とすることでpush可能になる。push不要で良いなら設定は不要。この設定をしない場合HTTP経由では書き込み禁止と見做され、

エラーメッセージ
Service not enabled: 'receive-pack'

git-http-backend がstderrに吐いて失敗してしまう。

スクリプト

cgi モジュールに依存しているので、 yarn か何かで入れておくこと。

前準備
yarn init # 質問に適当に応える
yarn add cgi

スクリプト(index.js)は数行:

index.js
const cgi = require("cgi");
const http = require("http");

process.env.GIT_PROJECT_ROOT = "c:/testrepo";
process.env.GIT_HTTP_EXPORT_ALL = "";

http.createServer(cgi("c:/Program Files/Git/mingw64/libexec/git-core/git-http-backend.exe",
 {stderr: process.stderr})).listen(8888, "127.0.0.1");

git-http-backend の場所は他のディストリビューションでは当然別になる。このスクリプトでは 127.0.0.1 をlistenしているので当然他所のホストからは接続できない。

clone してみる

まずサーバを起動しておく。

サーバの起動
node index.js

先のスクリプトではリポジトリは c:/testrepo/ 以下に配置することになる。

前準備
cd testrepo
mkdir hoge.git
cd hoge.git
git init --bare
git config http.receivepack true
<なんかコミットする>

あとは普通にcloneする。認証の類は入れてないので、特にパスワードとか入れることなくそのままcloneできてしまう。

実際のclone
git clone http://localhost:8888/hoge.git

感想

  • じつにかんたんだった
  • Qiitaに記事を書く方が時間が掛かる

認証の実装が本番だ。。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?