Top/article/Git-pull-through-HTTP
English | Japanese
English | Japanese

Menu

  • Top
  • Akihiko Yamaguchi 山口 明彦
  • Project プロジェクト
  • Text テキスト
  • Recent articles 最近の記事
  • Articles 記事一覧 (a to z)
  • Search 検索

Tags タグ †

  • [c++][bash][python][latex][php]
  • [linux][windows][mac][android]
  • [math][algorithm][idea][trick]
  • [liboctave][opencv][git][ros]
  • [setting][bug][general]
↑

Recent articles 最近の記事 †

2019-07-02
  • article/Display-Unix-Time
  • article/Synchronize-Linux-Time-to-Remote
2018-09-27
  • article/python-multimode-singleton
2018-09-02
  • article/rosinstall-git-default-remote
2017-07-28
  • article/SubMenu
2017-03-05
  • article/Import-a-different-version-of-OpenCV-in-Python
2015-08-17
  • article/DRC-finals-2015
2015-01-05
  • article/Upgrade-Android-to-Lollipop
2015-01-01
  • article/Kernel-panic-of-Linux-when-using-Xtion
  • article/Do-not-skip-freeing-data-when-using-tri-mesh-in-ODE
Access: 1/1990 - Admin
These search terms have been highlighted:[git]

Pull from Git remote repository through HTTP

Git のリモートリポジトリから HTTP で pull するためのメモ

[git]
2009-12-03

リモートサーバにある Git リポジトリから HTTP (WebDAV) 経由で pull したり clone を作ったりする場合の注意点について,おぼえがき.

注意: Git は最近使い始めたばかりなので,正確でないかもしれません.

一般的な前準備(参考程度に) †

リモートサーバ(apache2/Debian を仮定)で WebDAV を有効にして,リポジトリのパスを /git にエイリアスし /git の認証設定を行う設定ファイルを

Alias /git /home/akihiko/git
<Location /git>
  Options Indexes
  # DAV on
  AuthType Basic
  AuthName "Git repository"
  AuthUserFile  適当な .htpasswd ファイルのパス
  Require valid-user
</Location>

こんな感じで書いて /etc/apache2/mods-enabled/dav_git.conf あたりに保存, apache2 を再起動すればOK(だったと思う). 記憶があいまいなので gitレポジトリをhttpで公開する あたりを参照.

ちなみに,サーバのリポジトリの作成は,既に作業リポジトリがどこかにある場合,そこから --bare オプション付きで clone を作ればOK.リポジトリの親ディレクトリ(上の例だと /home/akihiko/git)上で

git clone --bare 作業リポジトリ HOGE.git

とすれば,HOGE.git が作成される. アリスとボブのサーバー、git pushをちゃんと理解したい! あたりを参照. なお,HTTP経由ではファイルを変更させたくないので, HOGE.git の所有者/グループを www-data:www-data に変更したりはしない.

↑

本題(pull する) †

このリポジトリから ssh 経由で pull する場合だと,

git pull ssh://USER@SERVER/home/akihiko/git/HOGE.git master

とかやればいいのだが,同じ感覚で

git pull http://USER@SERVER/git/HOGE.git master

とやると(この USER は ssh のユーザとは異なる.前述の AuthUserFile で定義したもの),

fatal: http://USER@SERVER/git/HOGE.git/info/refs not found:
did you run git update-server-info on the server?

というエラーが出る.これは,サーバのリポジトリに info/refs という補助ファイルがないためで,サーバのリポジトリディレクトリ(上の例だと /home/akihiko/git/HOGE.git)で,

git update-server-info

を実行してやる必要がある.そうすると, pull できるようになる.

ここで注意しなければならないのは,

サーバのリポジトリを(push などで)更新するたびに git update-server-info を実行しないと,最新の情報を pull できない

らしいことだ. pull でなくて, clone であっても同じ.更新のたびに git update-server-info を実行しないと,古いファイルしか pull されない.

さて,更新のたびに git update-server-info を実行するのは面倒なので, 自動化する.サーバのリポジトリディレクトリに行くと, hooks/post-update.sample というファイルがある.この名称を hooks/post-update に変更する.このファイルは更新が行われるたびに実行されるスクリプトで,中身は

#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

exec git-update-server-info

となっている.つまり更新のたびに git update-server-info が行われるというわけだ.

Pro Git - Pro Git 4.5 Git サーバー 一般公開 あたりを参照.




Last-modified:2015-01-01 (Thu) 09:10:32 (3803d)
Site admin: Akihiko Yamaguchi.
Written by: Akihiko Yamaguchi.
System: PukiWiki 1.5.0. PHP 5.2.17. HTML conversion time: 0.010 sec.