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