Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

git으로 파일내용이나 커밋로그 검색하기

git grep으로 파일내용 검색하기
파일의 내용 중에 찾고자 하는 내용이 있는 경우 보통 유닉스 계열에서는 find에 복잡한 옵션을 주어서 사용해야 한다. 나같은 경우는 find 명령어에 그리 익숙하지 않아서 Guillermo Rauch가 만든 spot.sh를 설치해서 사용하고 있다. 하지만 git으로 관리하는 프로젝트라면 git이 파일의 내용을 검색해주는 grep이라는 명령어를 제공하고 있다.

git grep으로 검색한

위처럼 git grep 검색어를 사용하면 검색어가 들어있는 파일을 찾을 수 있다. 위에서 사용했듯이 검색어에는 정규표현식도 사용할 수 있다.

$ git grep -l Annotation.*ApplicationContext
build-spring-framework/resources/changelog.txt
spring-framework-reference-kr/src/beans-java.xml
spring-framework-reference-kr/src/new-in-3.0.xml
spring-framework-reference/src/beans-java.xml
spring-framework-reference/src/new-in-3.0.xml

grep 명령어를 사용할 때 -l 옵션을 주면 검색어가 포함된 파일목록만 조회할 수도 있다. 더 자세한 옵션은 git grep 가이드에 자세히 나와 있다.

git grep을 사용한
git grep를 사용할 때는 검색어 뒤에 트리와 검색할 경로를 지정할 수 있다. 위 화면처럼 검색어 뒤에 브랜치를 지정하면 해당 브랜치에 대해서만 검색결과를 보여주고 트리 뒤에는 검색할 디렉토리 경로만 지정할 수도 있다.(조회 결과 앞에 브랜치가 표시된 걸 볼 수 있다.)



커밋로그 검색하기
커밋로그에서 원하는 로그를 검색하고자 할 때는 git log 명령어--grep 옵션을 사용하면 커밋로그에서 원하는 메시지가 들어간 커밋을 검색할 수 있다.

$ git log --oneline --grep 8장
3a8effe 8장 번역
ddb7319 4.8장 번역

이는 간단한 명령어 이지만 커밋 메시지에 있지 않은 내용은 찾기가 어렵다.

대신 파일에 들어있는 내용을 로그에서 검색하기 위해서 -G를 사용할 수도 있다. -G 옵션을 설명하기 위해서 간단한 예제를 구성해 보자.

$ git log --oneline
c7ac6f6 remove ws
deb37a5 add ws
9718726 init commit

간단한 git 저장소로 test라는 파일에다가 websocket이라는 텍스트를 넣어서 커밋했다가 다시 websocket이라는 단어를 지우고 커밋했다. 그래서 최종적으로 파일에는 websocket이라는 단어가 들어있지 않다. 그러므로 앞에서 살펴본 git grep은 사용할 수 없는데 git log-G 옵션은 델타를 기준으로 검색을 한다.

$ git log --oneline -Gwebsocket
c7ac6f6 remove ws
deb37a5 add w

위처럼 변경사항에  websocket이라는 단어가 들어간 커밋을 조회할 수 있다. 그래서 찾고자 하는 단어가 제거된 경우 언제 지워졌는지 찾을 때 유용하게 사용할 수 있다.
2012/10/16 23:56 2012/10/16 23:56