blogdown으로 Github Blog 만들기 2/2
순서
- R project 생성
blogdown
설치Hugo
설치- Site 생성 (로컬에서 호스팅)
- 기본 설정
- Github에 push (subtree 이용)
- Git으로 블로그 관리
오늘은 지난 글에 이어서 Github에 push하여 블로그를 호스팅하고, 이후에 관리하는 방법까지 알아보겠습니다. 혹시 이전 글을 못보신 분들께서는 blogdown으로 Github Blog 만들기 1/2을 보시면 됩니다.
6. Github에 push (subtree 이용)
우선 Github에 계정명.github.io
라는 repository를 하나 만들어야합니다.
저 같은 경우, github 계정이 statKim
이기 때문에 statKim.github.io
라는 이름의 repo를 만들었습니다.
repo도 만들었겠다! 이제 commit만 하면 내 블로그 생긴다~~
라고 생각하실 수 있지만 몇 가지 큰 문제가 남았습니다…
Github은 jekyll 기반으로 만들어져 있어 Hugo로 만들어진 페이지를 그대로 올리면 제대로 작동하지 않는다고 합니다.
그래서 build해줄 repo가 1개 필요하고 build된 사이트를 띄워줄 repo(계정명.github.io
), 총 2개의 repo가 필요하게 됩니다.
하지만 저는 repo 2개를 만들어서 관리하는게 깔끔해보이지 않기 때문에, 여기서는 Git의 subtree
라는 방법을 사용하여 1개 repo(계정명.github.io
)에서 build와 호스팅 모두 가능하도록 해보겠습니다. (사실 subtree에 대해 잘 아는 것이 아니지만 구글링으로 찾은 방법을 소개해드리려 합니다.)
결론부터 말씀드리면 master
branch에는 build된 페이지(public/
)가 들어가게 되고 source
branch에는 전체 폴더가 들어가게 됩니다.
즉, 다음의 구조를 가지게 됩니다.
<github계정명>.github.io/ (source)
└ .gitignore
└ README.md
└ config.toml
└ content/
└ static/
└ theme/
└ public/ (master)
이제, 본격적으로 subtree를 사용하여 Github에 push해보겠습니다.
6-1. master
branch에 initial commit
git add README.md
git commit -m "Initial commit on master"
6-2. source
branch 생성 및 initial commit
# 기존 히스토리와 상관없이 비어있는 branch 생성
git checkout --orphan source
# public/ 폴더 제거 (master branch를 subtree로 만들기 위함)
rm -rf public
git add .
git commit -m "Initial commit on source branch"
6-3. github계정명.github.io
repo에 push
git remote add origin https://github.com/<github계정명>/<github계정명>.github.io.git
git push origin master
git push origin source
6-4. subtree 지정 (public/
폴더 없이 실행해야합니다.)
git subtree add --prefix=public https://github.com/<github계정명>/<github계정명>.github.io.git master --squash
6-5. 블로그 build (잠깐 다시 R에서 실행해줘야 해요!!)
library(blogdown)
build_site()
6-6. 생성된 블로그 Github에 push
git add .
git commit -m "블로그 생성"
git push origin source
git subtree push --prefix=public https://github.com/<github계정명>/<github계정명>.github.io.git master
7. Git으로 블로그 관리 (2021.01.30 수정)
7-1. 블로그 업데이트
이후에 블로그 수정사항을 반영할 때에는 6-6 방법대로 실행하면 됩니다.
하지만 저는 코드 4줄 타이핑하는 것도 귀찮기 때문에. . .(사실 subtree 구문이 잘 안외워져서. . .) shell script를 이용하여 자동화(?)를 하여 사용하고 있습니다.
저는 다음의 bash 코드를 subtree_push.sh
라는 파일로 만들어서 아주 잘 사용하고 있습니다 ㅎㅎ
이는 각 branch마다 commit을 하고 원격저장소에 push까지 해주게 됩니다.
#!/bin/bash
commit_msg=$1
# commit to source branch
git add .
git commit -m "${commit_msg}"
git push origin source
# commit to master branch(blog)
git subtree push --prefix=public https://github.com/<github계정명>/<github계정명>.github.io.git master
echo "Blog update 완료"
사용할 때에는 Git bash에서 bash subtree_push.sh "commit 메시지"
와 같이 사용하면 됩니다!!
7-2. 다른 기기에서도 수정하기 위해 clone
사실 한 컴퓨터에서만 블로그를 관리하면 7-2 ~ 7-2 단계는 굳이 필요없지만, 예를 들어 데스크탑과 노트북에서 왔다갔다하면서 관리할 때에는 다음의 과정이 필요합니다. 우선 repo를 clone하는 방법은 간단합니다.
# 블로그 repository clone
git clone https://github.com/<github계정명>/<github계정명>.github.io.git
# branch 목록 확인
git branch -a
# branch 전환하면서 폴더 내용 확인
git checkout master # build된 파일
git checkout source # 블로그 소스파일
7-3. 다른 기기에서 업데이트한 내용 로컬에 pull
원격저장소에 올라간 내용을 pull하는 것은 일반적인 repo를 pull할 때와 같지만, 주의해야할 사항이 있는데 이는 각 branch마다 pull을 해주어야한다는 것입니다.
# source branch에서 pull
git pull
# master branch로 전환 후 pull
git checkout master
git pull