Dilluti0n의 블로그

ssh 로 git 서버에 연결 가능하도록 설정했지만, ssh 만을 사용하면 익명 사용자가 리포지토리에 접근할 수 없는 문제가 있다. http 로 접근 가능하도록 하면 이 문제를 해결할 수 있다.

git 은 별도의 http 서버를 제공하지 않으므로, apache 등의 http 서버가 필요하다. 호스팅하는 법은 http 루트 디렉토리에 원래 git 리포지토리를 향하는 symlink 를 생성하고, git update-server-info 명령을 실행하는 것이다. 이 명령은 매 push 이후에 다시 이루어 져야 하므로,

mv hooks/post-update.sample hooks/post-update

를 통해 push 이후에 자동으로 실행되는 hooks 에 이를 추가하도록 하자.

아래는 홈 디렉토리에 bare 레포지토리를 만들고, http 를 위한 symlink 를 추가하는 셸 스크립트다.

#!/bin/sh

if [ $# -ne 1 ]; then
        echo "Useage: $0 <repo_name>"
        exit 1
fi

REPOHOME="/Users/git"
REPOPATH="$REPOHOME/$1.git"

if [ -e "$REPOPATH" ]; then
        echo "Error: Repository path '$REPOPATH' already exists."
        exit 1
fi

sudo -u git mkdir -p "$REPOPATH" &&
        cd "$REPOPATH" &&
        sudo -u git git init --bare "$REPOPATH" &&
        echo "Bare git repo made on '$REPOPATH'" &&
        sudo -u git mv "$REPOPATH/hooks/post-update.sample" "$REPOPATH/hooks/post-update" &&
        sudo -u git git update-server-info &&
        sudo -u git ln -s ../$1.git $REPOHOME/Sites &&
        echo "symbolic link to ../$1.git made on $REPOHOME/Sites" &&
        exit 0

echo "failed"
exit 2