git subtree로 hugo 저장소 관리하기
git subtree
커맨드를 이용하여 hugo 정적 사이트 저장소를 github에서 관리하는 방법을 정리한다.
개인적으로 필요한 요구사항
- 생성된 정적 사이트만 public 저장소에 노출한다.
- md파일 이나 hugo의 설정 등은 노출하지 않는다.
- git을 사용하면서 커맨드가 너무 복잡하지 않아야 한다.
- theme의 업데이트를 편리하게 따라 갈수 있어야 한다.
저장소 구성
- 메인 저장소 : root 저장소, private으로 유지
- 사이트 저장소 : hugo로 생성된 사이트 저장수, public으로 유지(무료사용자), github.io로 서빙
- 테마 저장소 : 다른사람이 만든 테마 저장소, 가져다가 쓰는 용도
디렉토리 구성
root // 메인 저장소
├─ archetypes
├─ content
├─ static
├─ ... // 여기까지는 hugo new site로 생성된 기본 디렉토리들
├─ public // 사이트 저장소 : hugo 커맨드로 생성된 사이트
└─ themes
└─ hugo-tranquilpeak-theme // 테마 저장소 : tranquilpeak를 예제로 사용
순서대로 저장소 구성해 보기
hugo 사이트 생성, git 초기화
# hugo 사이트 생성
$ hugo new site my_site
Congratulations! Your new Hugo site is created in /Users/naver/my_site.
...
$ cd my_site && ll
total 8
drwxr-xr-x 3 user user 96 12 12 13:22 archetypes
-rw-r--r-- 1 user user 82 12 12 13:22 config.toml
drwxr-xr-x 2 user user 64 12 12 13:22 content
drwxr-xr-x 2 user user 64 12 12 13:22 data
drwxr-xr-x 2 user user 64 12 12 13:22 layouts
drwxr-xr-x 2 user user 64 12 12 13:22 static
drwxr-xr-x 2 user user 64 12 12 13:22 themes
# git 초기화
$ git init
Initialized empty Git repository in /my/dir/my_site/.git/
테마 설정
원하는 테마를 메인 저장소의 theme 하위에 subtree
커맨드로 추가 해준다.
tranquilpeak 테마를 예제로 사용
# 테마 저장소를 리모트로 추가
git remote add hugo-tranquilpeak-theme https://github.com/kakawait/hugo-tranquilpeak-theme.git
# themes/hugo-tranquilpeak-theme 디렉토리에
# hugo-tranquilpeak-theme 리모트의
# 0.4.7-BETA 태그를 받아서 추가
git subtree add --prefix themes/hugo-tranquilpeak-theme hugo-tranquilpeak-theme 0.4.7-BETA
실제 테마를 적용하기 위해서는 config.toml
을 수정해 줘야 한다.
# config.toml에 추가
theme = "hugo-tranquilpeak-theme"
사이트 저장소 설정
먼저 자신의 github 계정에 ${username}.github.io
저장소 이름을 생성해야 한다.(github pages로 올리기 위함)
그리고 아래의 커맨드로 메인 저장소의 pulic
디렉토리를 위의 서빙 저장소로 지정해준다.
# 서빙 저장소를 리모트로 추가
git remote add github-pages https://github.com/${username}/${username}.github.io.git
# public 디렉토리에
# github-pages 리모트의
# master 태그를 받아서 추가
git subtree add --prefix public github-pages master
github pages로 변경사항 반영하기
# hugo 빌드
$ hugo
| KO-KR
+------------------+-------+
Pages | 39
Paginator pages | 0
...
# 메인 저장소에 커밋, push
$ git commit -am "commit changes"
$ git push origin master # github pages에 반영하는것과는 별개
# 서빙 저장소에 public 디렉토리 push
$ git subtree push --prefix public github-pages master
결론
위 방식으로 서빙 저장소와 메인 저장소를 분리하고 메인 저장소를 private으로 유지할 수 있다. 또한 테마가 업데이트 될때는 다시 push 받으면 최신판 유지가 가능하다.
submodule
로도 유사한 방식으로 저장소를 분리할수 있지만 개인적인 느낌으로는 subtree
가 더 간편하고 깔끔하게 유지되는 느낌이 든다.