당신에겐 이미 Git 서버가 있다:

ko생성일: 2025. 10. 27.갱신일: 2025. 10. 27.

SSH로 접근 가능한 서버에 있는 Git 저장소를 그대로 원격으로 활용해 클론/푸시하고, HTTP로 공개하며, post-update 훅으로 update-server-info와 정적 사이트 빌드를 자동화하는 방법을 소개합니다.

2025년 10월 24일 (프로그래밍)

SSH 접근이 가능한 서버에 Git 저장소가 있다면, 그냥 클론하면 됩니다:

# 이 방법은 잘 작동합니다.
git clone ssh://username@hostname/path/to/repo

로컬에서 작업한 뒤 변경 사항을 원격(origin) 서버로 푸시할 수 있습니다. 기본적으로 Git은 현재 체크아웃되어 있는 브랜치로 푸시하는 것을 허용하지 않지만, 간단히 바꿀 수 있습니다:

# 원격 서버에서 실행하세요.
git config receive.denyCurrentBranch updateInstead

이 방법은 여러 컴퓨터 사이에서 코드를 동기화하거나, 서버 측 파일을 키 입력 랙 없이 편집하고 수동 복사 없이 작업하기에 아주 좋습니다. 코드를 공개하고 싶다면, 웹 서버가 Git 저장소를 가리키도록 설정하면 됩니다:

git clone https://hostname/path/to/repo/.git
# 명령에서 .git 부분을 없앨 수도 있습니다. 서버에서 더 깔끔한 URL로 리매핑하도록 설정하거나
# .git 디렉터리의 이름을 바꾸면 됩니다(다만 이렇게 하면 서버 측에서 Git을 실행할 수 없게 됩니다).

… 다만 클론할 수 있게 만들려면 서버 측에서 다음 명령을 실행해야 합니다:

# git-over-http에서 사용하는 몇몇 파일을 만듭니다:
# 변경을 한 뒤에는 반복해야 합니다.
git update-server-info

매번 하기는 번거로우니, 자동으로 수행되도록 훅을 설정해 봅시다:

# git update-server-info를 자동으로 실행합니다.
# 서버 측에서 실행해야 합니다
cp .git/hooks/post-update.sample .git/hooks/post-update
chmod a+x .git/hooks/post-update

Git 훅은 그냥 셸 스크립트이므로, 정적 사이트 생성기를 실행하는 등의 일을 할 수 있습니다:

cat > .git/hooks/post-update <<EOF
#!/bin/sh
set -euo pipefail
cd /path/to/site
/path/to/generator
EOF
chmod a+x .git/hooks/post-update

저는 이 블로그를 한동안 이렇게 운영해 왔습니다. 글은 로컬에서 쾌적하게(네트워크 지연 없이) 작성한 다음 서버로 푸시만 하면 나머지가 자동으로 처리되니 아주 편합니다.

게다가 기본적으로 백업까지 됩니다. 서버에 문제가 생겨도 제 노트북에 사본이 있고, 노트북이 고장 나도 서버에서 모든 것을 내려받을 수 있죠. Git의 버전 추적 덕분에 실수로 삭제하는 것도 방지되고, 무언가 문제가 생기면 원인을 파악하기도 쉽습니다.