git에는 데이터베이스에 저장된 코드나 커밋에서 원하는 부분을 빠르고 쉽게 검색하는 도구들이 있다. 프로젝트를 진행할 때 함수의 정의나 함수가 호출되는 곳을 검색해야하는 경우 사용할 수 있다.


(1) “어디에 있는지 검색” git grep -n 찾을함수명 또는 문자열

  • 매우 빠르고 깃 히스토리 내의 어떤 정보라도 찾아낼 수 있다.
  • 커밋 트리의 내용이나 워킹 디렉토리의 내용을 문자열이나 정규표현식으로 쉽게 찾을 수 있다.
  • 대상을 지정하지 않으면 워킹 디렉토리 파일에서 찾는다.
  • 명령을 실행할 때 -n을 추가하면 찾을 문자열이 위치한 라인번호를 알려준다.
  • 추가 옵션들

    1) git grep --count 찾을함수명 또는 문자열

    • 어떤 파일에서 몇개나 해당 단어를 찾았는지 보여준다.

    2) git grep -p 찾을함수명 *.c

    • *.c: 확장자가 .c인 파일에서 찾는다.
    • -p : 매칭되는 라인이 있는 함수나 메서드를 찾을 때 쓴다.

    3) git grep --and 찾을함수명

    • 찾을 함수명과 여러 단어가 동시에 나타나는 줄 찾기

    4) git grep --break

    • 더 읽기 쉬운 형태로 보여준다.

    5) git grep --heading

    • 더 읽기 쉬운 형태로 보여준다.
    • v1.8.0 태그가 붙은 커밋에서 #define과 괄호 안의 내용이 같이 들어간 줄 찾고 쉽게 보여주기
      $ git grep --break --heading -n -e '#define' \
      --and \(-e LINK -e BUF_MAX \) v1.8.0
    


(2) “언제 추가됐는지 검색” - Git 로그 검색 git log

  • 히스토리에 언제 추가되거나 변경됐는지 찾아볼 때 사용한다.
  • 추가 옵션들

    1) git log 찾을 문자열 -S

    • 찾을 문자열이 가장 처음 나타낸 때의 커밋과 없어진 커밋을 검색할 수 있다.

    2) git log 찾을 문자열 -S -G

    • 찾을 문자열을 좀 더 세세한 조건으로 찾고 싶을 때 -G를 사용한다.
  • 라인 로그검색
    • git log -L
    • 참고

    • 예를 들어, zlib.c 파일에 있는 git_deflate_bound 함수의 모든 변경 사항들을 보길 원한다고 생각해보자. 다음과 같이 git log -L :git_deflate_bound:zlib.c 라고 명령 실행하면 된다. 이 명령을 실행하면 함수의 시작과 끝을 인식해서 함수에서 일어난 모든 히스토리를 함수가 처음 만들어진 때부터 Patch를 나열하여 보여준다.

    • Git이 함수의 처음과 끝을 인식하지 못할 때는 다음과 같이 정규표현식으로 인식하게 할 수도 있다. git log -L '/unsigned long git_deflate_bound/',/^}/:zlib.c

Julia Hwang

디발자를 꿈꾸는 웹개발자의 블로그입니다.