gr을 이용한 많은 git 저장소 관리하기

여러분은 하루에 얼마나 많은 저장소를 오가며 작업하시나요? 하루에 하나 정도의 저장소에서 일하고 있다면 매우 좋은 상황일 것입니다. 부럽습니다. 하지만 API 서버와 웹 프론트엔드를 동시에 개발하는 분이라면 적어도 두개의 저장소를…

gr을 이용한 많은 git 저장소 관리하기
git merge hell 이라는데..

이 글을 읽는 여러분은 하루에 얼마나 많은 저장소를 오가며 작업하시나요?
하루에 하나 정도의 저장소에서 일하고 있다면 매우 좋은 상황일 것입니다. 부럽습니다. 하지만 API 서버와 웹 프론트엔드를 동시에 개발하는 분이라면 적어도 두개의 저장소를 하루에도 몇번씩 왔다갔다 하면서 작업을 할 것입니다.

어쩌면 한번에 5개 이상의 프로젝트를 건드려야하는 상황도 있을 것 입니다.

사실은 실제상황입니다.

이를 조금 더 디테일하게(가학적인) 상황을 만들어봅시다. 위에서 말한 5개의 프로젝트를 동시에 작업하는 동료가 3명 더 있다고 가정합니다. 만약 Pull Request를 기반으로, 그리고 git-flow 등의 브랜치 전략을 이용하여 깐깐하게 저장소를 관리한다면 매우 좋은 상황일 것입니다.
가학적이라고 했으니 방금 말한 좋은 상황은 당연히 없고 모두가 master 브랜치에서 작업을 하고 Pull Request를 통한 리뷰 없이 코드를 던지는 상황입니다. 재수없으면 merge conflict도 발생하겠죠. 다행히도 동료 개발자들을 commit 메시지를 매우 자세하게 잘 입력해준다고 합니다.

한번에 한 프로젝트에서 기능 A를 개발하는 동안 다른 세명의 동료가 너무나도 열심히 기능을 구현합니다. 한 3시간 정도 업무에 몰두하고 나서 다른 프로젝트와 연동하려고 합니다. 모든 프로젝트는 각각 작업자의 로컬에서 테스트할 수 있습니다. 동료의 작업을 확인하기 위해 터미널을 열고 일일히 나머지 네개의 프로젝트로 옮겨가며 프로젝트를 최신으로 만들어야 합니다. 아래 작업을 말이죠.cd <프로젝트 경로>
git fetch upstream
git merge upstream/master

이 작업을 5번이나 해야합니다. 다른 동료들이 오늘 어떤 작업을 했는지 확인해야하니 당연히 `git log` 명령어로 확인해야겠죠? 이것도 당연히…cd <프로젝트 경로>
git log — since "9am"

아직 4번 더 해야겠네요. 이 일이 매일 반복됩니다. 말도 안되는 일이지만 충분히 일어나고 있을 것 입니다. 저는 이미… 😭 물론 이만큼 심각하게 안좋은건 과장입니다.

여기에 더 잔인하게 작은 단위의 라이브러리들도 있다면… 😭

gr은 JavaScript 기반의 git 저장소 관리 유틸리티입니다. 각 저장소에 태그를 지정하고 태그를 이용하여 태그가 지정된 저장소에 동일한 명령어를 실행할 수 있습니다.

첫번째 경우인 upstream 으로부터 코드를 최신화 한다면.gr @work git fetch upstream
gr @work git upstream/master

위 두줄로 5번이나 반복했던 작업이 한번에 처리됩니다. 그 다음 작업인 커밋 로그를 볼까요?gr @work git log — since "9am"

물론 이 명령어도 4번 실행한 것 처럼 동작합니다.

이제 gr 의 필요성이 느껴지셨을테니 설치부터 해봅니다.npm install -g git-run

npm이 뭔지 잘 모르시면 npm에 대하여를 참고하세요.

gr을 입력해보세요. 아무일도 일어나지 않을 것입니다.
회사에서 하는 프로젝트이니 태그를 `@work` 라고 정하겠습니다. 프로젝트 위치는 아래와 같다고 가정합니다- ~/projects/projectA
- ~/projects/projectB
- ~/projects/projectC
- ~/projects/projectD

위 프로젝트 모두를 `@work` 로 지정합니다.gr +@work ~/projects/projectA ~/projects/projectB ~/projects/projectC ~/projects/projectD

다시 gr 명령어를 입력하면 모든 저장소를 볼 수 있을 것 입니다. 그리고 `gr @work` 를 입력하면 `@work` 태그가 입력된 모든 저장소가 출력됩니다.

프로젝트를 해당 태그에서 제거하려면 `gr -@work <저장소경로>` 를 입력하세요

gr이 중요한 이유는 꼭 git 명령어가 아니더라도 일반 명령어도 전체 저장소에 실행할 수 있다는 것입니다. 간단하게 `README.md`을 한번에 보려면,gr @work cat README.md

끝입니다.

공식 홈페이지의 유용한 gr 명령어들을 정리하는 것으로 마치겠습니다. 여러 프로젝트를 한번에 살펴보고 유지하는데 많은 시간을 낭비하지 않길 응원합니다.

- `gr @work git fetch`, 그리고 `gr @work status` | 모든 저장소 업데이트 후 저장소 상태 출력
- `gr @work git diff` 또는 `gr @work git diff — cached` | diff
- `gr @write make` | 모든 저장소에 `make` 명령어로 빌드
- `gr @work npm ls` | 모든 npm 모듈 목록 보기
- `gr @work git — no-pager log — decorate — graph — oneline -n 3` | git 로그를 그래프와 함꼐 보기

첫번째 이미지의 출처 : http://www.tugberkugurlu.com/archive/resistance-against-london-tube-map-commit-history-a-k-a--git-merge-hell

저장소 이미지의 출처 : …

함께쓰면 좋을만한 유틸리티 : http://nodegh.io/

Subscribe to Half-Built Life

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe