발생일: 2016.09.06 키워드: githook, 깃훅, 이슈 번호, issue number, 이슈 넘버 문제: 우리 프로젝트에선 이슈 관리는 Github에서 하기로 했고, 각 피처 브랜치는 이슈 번호로 시작해 이름 짓기로 했다. 커밋 메세지엔 [이슈번호]를 말머리에 붙이기로 했다. 예를 들어, 담당한 태스트의 이슈 번호가 123이면, `feature/123-do-something`처럼 이름 짓고, 커밋 메시지는 `[123] blah blah`처럼 작성하기로 했다. 근데 커밋 메시지에 매번 이슈 번호를 넣으려니 번거롭다. 깃훅으로 자동화해보자. 해결책: prepare-commit-msg 훅을 사용했다. 아래는 코드 전문이다. #!/bin/bash # 브랜치가 이슈 넘버(123- 나 123_ 형태)로 ..
발생일: 2016.06.23 키워드: git submodule, 깃 서브모듈 문제: Git 에서 서브모듈을 사용하려고 한다. 해결책: 서브모듈에 대한 자세한 옵션은 Pro Git 책의 설명을 보는 게 더 나을 것 같아, 여기선 아래와 같이 튜토리얼 형식으로 설명해보려고 한다. ---------------------------------------------------------------- 1. 서브모듈 2. 서브모듈 추가하기 3. 부모 프로젝트에서 자식 프로젝트의 내용 변경하고 업데이트하기 4. 자식 프로젝트에서 수정 후, 부모 프로젝트에 적용하기 5. 서브모듈이 있는 프로젝트 클론하기 6. 변경된 서브모듈 업데이트하기 ----------------------------------------------..
발생일: 2015.09.02 키워드: git blame 문제: 커맨드 라인에서 깃 블레임을 사용하려고 한다. 해결책: $ git blame 파일명 $ git blame -s 파일명 $ git blame -L , 파일명 $ git blame -L ,[상대값] 파일명 논의: - 대부분의 에디터에서는 전체 파일명을 찾는 기능을 제공한다. 해당 페이지에서 오른쪽 마우스를 눌러보자~ - 어떤 커밋인지 찾았다면 아래 명령으로 커밋을 확인할 수 있다. $ git show 커밋 특정 커밋의 파일의 내용을 보고 싶다면, $ git show 커밋:파일명 단, 여기서의 파일명은 git 루트로부터의 상대 경로이다.
발생일: 2014.02.18 키워드: git hooks, 깃훅 문제: 프로젝트에 커밋하거나 푸시하기 전에 린트나 테스트를 돌리려고 한다. 깃훅(git hooks)이 있다고 들었는데, 어떻게 적용하면 될까? 해결책: ## Git hooks 적용하기 프로젝트의 .git/hooks 디렉토리에 들어가면 아래 이미지와 같이 샘플 훅 파일이 있다. 각 파일은 이름에 적혀있는 시점에 실행되는 훅 파일의 샘플이다. 예를 들어, pre-commit 은 커밋 전에, pre-push 는 푸시 전에 호출된다. 실제로 훅이 동작하게 하려면, 해당 파일을 열어 수정한 후에 .sample 확장자를 제거하면 된다. 샘플 파일을 그대로 두고 싶다면, 별도의 훅 파일을 만들어 아래처럼 실행 가능하게 만들면 된다. $ touch .git..
발생일: 2016.03.11 키워드: git remove untracked file 문제: 리파지터리에 추가했지만 아직 스테이지 상태로 올라가지 않은 untracked 파일을 삭제하고 싶다. 해결책: git clean 명령을 사용하면 된다. 파일 지우기 $ git clean -f 지우려는 파일을 확인하고자 할 땐 n 옵션을 추가한다. $ git clean -fn 디렉토리 지울 땐 d 옵션을 추가한다. $ git clean -d git ignore 파일도 함께 삭제하려면 x 옵션을 추가한다. ignore 파일에는 IDE의 프로젝트 설정 파일 등이 포함되어 있을 가능성이 있기 때문에 주의한다. $ git clean -fxd 참고: http://stackoverflow.com/questions/61212/ho..
발생일: 2014.02.14 키워드: git, github, git hook, github hook, 깃훅, commit hook, 커밋훅 문제: 프로젝트 내의 특정 파일을 변경 후 커밋하는 경우엔, 사용자 입력을 받아 별도의 처리를 해주려고 한다. 깃의 커밋훅(pre-commit, post-commit)에서 사용자 입력을 받을 수 있는 방법이 있을까? 해결책: 아래 명령으로 호출 후 read 명령으로 사용자 입력을 가져올 수 있다. 예제 코드에서는 사용자 입력을 받아 gem 의 새 업데이트 정보를 확인한다. # Allows us to read user input below, assigns stdin to keyboard exec < /dev/tty while true; do read -p "[post-..
발생일: 2014.02.14 키워드: git, githook, 깃훅, pre-commit 문제: 우리 프로젝트에서는 커밋 훅에서 npm 으로 패키지 관리를 하고 있고, shrinkwrap 으로 버전을 잠궈두고 있다. 누군가 package.json 파일을 변경한 후에 커밋하는 경우엔, 확인 메시지를 받아 shrinkwrap 을 업데이트하도록 가이드하려고 한다. 커밋 전(pre-commit 훅에서) 특정 파일이 변경된 것을 확인할 방법이 있을까? 해결책: 깃훅에서 아래와 같은 방법으로 처리했다. # 커밋 대상 파일에 package.json이 포함되었는지 확인 PACKAGE_JSON_CHANGED=$(git diff --cached --name-only --diff-filter=ACM | grep packag..
발생일: 2014.02.14 키워드: git, 깃, git hook, 깃훅, 소스트리, source tree 문제: 터미널에서 잘 실행되는 깃훅이 소스트리에서는 오류를 발생한다. 확인해보니, 깃훅에 포함된 명령을 소스트리에서는 찾지 못하고 있다. 뭐가 문제일까? 해결책: 소스트리의 앱 구동 환경이 사용자 계정의 PATH 정보와 달랐기 때문이었다. 문제가 발생했던 깃훅은 아래와 같이 커밋 전에 grunt 명령으로 린트를 실행하는 코드였다. AS-IS: grunt jshint grunt 명령은 사용자 계정에서 글로벌로 설치한 명령이었고, /etc/paths 에 정의되어 있었다. 소스트리의 구동 환경을 정확히 알아보진 않았지만, /etc/paths 의 것을 참조하고 있진 않은 모양이었다. 모든 멤버의 환경을 ..
발생일: 2015.12.04 키워드: git, 깃, revision, 깃 리비전, revision range, 깃 로그, git log 문제: 특정 브랜치를 제외하고 현재 브랜치에서 작업한 커밋 로그만 보고 싶다. 해결책: `git log ` 명령에 리비전을 전달할 수 있고, 리비전 범위로 필터링할 수 있다. 특정 리비전: () HEAD^ : 현재 커밋의 부모 HEAD^2 = 현재 커밋의 조부모 HEAD^^ = 위와 동일 HEAD^5 : 현재 부모의 다섯번째 부모 범위: () refA..refB : refA 엔 없고 refB 에만 있는 커밋 ^refA refB : 위와 동일 ^refA refB refC : refA 엔 없고, refB / refC 에만 있는 커밋 --not refA refB refC : ..
발생일: 2014.05.30 키워드: git, 깃, branch, 브랜치, xargs 문제: feature 로 시작하는 모든 브랜치를 지우려고 아래와 같이 실행했다. $ git branch | grep feature | xargs git branch -D 헌데, 자꾸 없는 브랜치라고 나온다. 왜 일까? 해결책: 내가 git branch 명령의 결과에 컬러가 들어가도록 테마를 적용해두었기 때문이었다. 테마 때문에 `git branch`로 출력되는 브랜치 이름에 컬러 정보가 포함되어 있었다. $ git branch | grep feature | od -c 와 같이 실행해보면, 텍스트 앞에 컬러가 들어가 있는 게 보인다. `branch` 명령의 옵션으로 `--no-color`가 있어 아래와 같이 처리했다. $..