1 minute read

repository templates?

GitHub에서 프로젝트를 만들다 보면 반복되는 bootstrap 과정을 거친다. 좋아하는 scripts to rule them all 패턴에 맞춰 스크립트를 만든다. 즐겨 쓰는 README 형식을 찾아서 복사한다.

리포지토리 템플릿(repository templates)은 이런 bootstrap 과정을 간소화해 준다. 새로운 프로젝트를 만들 때, 사용할 템플릿을 지정할 수 있기 때문이다.

대략적인 설명은 GitHub 블로그에 2019년 6월에 올라온 ’Generate new repositories with repository templates’ 게시글에서 볼 수 있다. 만드는 방법은 ’Creating a template repository - GitHub Docs’ 도움말을 참고한다.

사용해 보니

개인적으로 만들어 놓은 프로젝트 템플릿이 있다. 2019년 1월에 만들었다. GitHub 리포지토리 템플릿이 나오기 전에 만든 거니깐 덜 억울하다. 이후에 GitHub 리포지토리 템플릿이 나왔다는 얘기는 들었지만 사용을 미루다가 이번에 적용했다.

기존에 구현된 fork를 잘 활용한 느낌이다. fork와 거의 같은 로직을 타고 히스토리를 날려버리는 식으로 구현한 것 같다.

elixir 버전 관리를 asdf로 하고 scripts to rule them all 패턴을 사용하는 ohyecloudy/template-elixir 템플릿 프로젝트를 만들었다. tbot-800.ex GitHub 프로젝트를 만들 때, 사용했다.

기존 리포지토리에 적용하거나 GitLab 같은 곳에서 사용하려면?

$ git archive --remote=https://github.com/ohyecloudy/template-elixir.git main
fatal: operation not supported by protocol

git archive --remote 옵션이 동작하면 간편한데, 동작하지 않는다.

clone 해서 git archive 명령으로 복사해야 할까? 친절한 GitHub. Source code archive URLs을 제공한다. https://github.com/[USER]/[REPOSITORY]/archive/refs/heads/main.tar.gz 형식이다.

다운로드해서 바로 풀어버리자. 아래는 현재 디렉터리에 ohyecloudy/template-elixir 리포지토리 아카이브를 푸는 명령이다. GitHub 리포지토리 템플릿을 이미 작업한 리포지토리에 적용하거나 GitLab 같은 다른 서비스에 호스팅하는 리포지토리에 적용할 수 있다.

$ curl -L https://github.com/ohyecloudy/template-elixir/archive/refs/heads/main.tar.gz | tar --strip-components 1 -C . -xvz

임시 파일도 귀찮으니 pipe를 타자. tar를 풀 일이 생길 때마다 인터넷을 검색해서 찾은 -xvzf 옵션에서 -f 옵션은 파일을 풀 때, 사용하므로 빼고 실행한다. -C 옵션으로 현재 디렉터리에 압축을 풀게 했다. 그냥 풀면 template-elixir-main 디렉터리가 생긴다. --strip-components 1 옵션으로 첫 번째 filename 컴포넌트를 스킵하게 했다. 즉 그냥 풀면 생기는 디렉터리를 안 만들게 했다.

링크