Skip to main content

GitHub 코드 검색 구문 이해

특수 코드 한정자, 정규식 및 부울 연산자를 사용하여 원하는 결과에 대한 검색 쿼리를 작성할 수 있습니다.

코드 검색 쿼리 구조 정보

이 문서의 검색 구문은 GitHub 코드 검색을 사용하는 코드 검색에만 적용됩니다. 이슈, 사용자 및 토론과 같은 비 코드 콘텐츠를 검색하기 위한 구문 및 한정자는 코드 검색 구문과 동일하지 않습니다. 비 코드 검색에 대한 자세한 내용은 "GitHub 검색 정보" 및 "GitHub에서 검색"을(를) 참조하세요.

검색 쿼리는 검색할 텍스트와 검색 범위를 좁히는 한정자로 이루어진 검색 용어로 구성됩니다.

한정자 없는 기본 용어는 파일의 콘텐츠 또는 파일 경로와 일치합니다.

예를 들어, 다음과 같은 쿼리가 있습니다.

http-push

위의 쿼리는 용어http-push이(가) 없는 경우에도 파일docs/http-push.txt와(과) 일치합니다. 또한 용어http-push이(가) 포함된 경우 example.txt(으)로 호출되는 파일과 일치합니다.

공백으로 구분된 여러 용어를 입력하여 여러 용어를 모두 만족하는 문서를 검색할 수 있습니다.

예를 들어, 다음과 같은 쿼리가 있습니다.

sparse index

검색 결과에는 sparseindex 용어가 모두 포함된 모든 문서가 순서대로 포함됩니다. 예를 들어 SparseIndexVector이(가) 포함된 파일, index for sparse trees 구가 있는 파일 및 index.txt 이름을 가진 파일, sparse 용어가 포함된 파일과 일치합니다.

공백으로 구분된 여러 용어를 검색하는 것은 검색 hello AND world와(과) 동일합니다. hello OR world 같은 다른 부울 작업도 지원됩니다. 부울 작업에 대한 자세한 내용은 "부울 작업 사용"을 참조하세요.

코드 검색은 공백을 포함한 정확한 문자열 검색도 지원합니다. 자세한 내용은 "정확한 일치 항목 쿼리"를 참조하세요.

repo:, language:, path:와(과) 같은 특수 한정자를 사용하여 코드 검색 범위를 좁힐 수 있습니다. 코드 검색에서 사용할 수 있는 한정자에 대한 자세한 내용은 "한정자 사용"을 참조하세요.

식을 슬래시로 둘러싸서 검색에 정규식을 사용할 수도 있습니다. 정규식에 관한 자세한 내용은 "정규식 사용"을 참조하세요.

정확한 일치 항목에 대한 쿼리

공백을 포함한 정확한 문자열을 검색하려면 문자열을 따옴표로 묶을 수 있습니다. 예시:

"sparse index"

한정자에서 따옴표가 붙은 문자열을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.

path:git language:"protocol buffers"

따옴표 및 백슬래시 검색

따옴표가 포함된 코드를 검색하려는 경우 백슬래시를 사용하여 따옴표를 이스케이프할 수 있습니다. 예를 들어 정확한 문자열 name = "tensorflow"을(를) 찾으려면 다음을 검색할 수 있습니다.

"name = \"tensorflow\""

백슬래시를 포함하는 코드 \을(를) 검색하려면 이중 백슬래시 \\을(를)사용합니다.

두 이스케이프 시퀀스 \\\"은(는) 따옴표 외부에서도 사용할 수 있습니다. 하지만 다른 이스케이프 시퀀스는 인식되지 않습니다. 뒤에 오지 않는 "\ 백슬래시는 검색에 포함되지 않고 변경되지 않은 백슬래시입니다.

새 줄 문자와 일치하는 \n 같은 추가 이스케이프 시퀀스는 정규식에서 지원됩니다. "정규식 사용"을 참조하세요.

부울 연산자 사용

코드 검색은 부울 식을 지원합니다. 연산자 AND, OR, NOT을(를) 사용하고 검색어를 결합할 수 있습니다.

기본적으로 공백으로 구분된 인접 용어는 AND 연산자를 사용하는 것과 동일합니다. 예를 들어 검색 쿼리 sparse index은(는) sparse AND index와(과) 동일하고, sparse, index 용어를 포함하는 모든 문서를 어떤 순서든 검색 결과에 포함한다는 것을 의미합니다.

한 용어 또는 다른 용어가 포함된 문서를 검색하려면 OR 연산자를 사용할 수 있습니다. 예를 들어 다음 쿼리는 sparse 또는 index 중 하나를 포함하는 문서와 일치합니다.

sparse OR index

검색 결과에서 파일을 제외하려면 NOT 연산자를 사용할 수 있습니다. 예를 들어 __testing__ 디렉터리에서 파일을 제외하려면 다음을 검색할 수 있습니다.

"fatal error" NOT path:__testing__

괄호를 사용하여 더 복잡한 부울 식을 표현할 수 있습니다. 예시:

(language:ruby OR language:python) AND NOT path:"/tests/"

한정자 사용

특수 키워드를 사용하여 검색을 한정할 수 있습니다.

리포지토리 한정자

특정 리포지토리에서 커밋을 검색하려면 repo: 한정자를 사용합니다. 소유자를 포함하여 전체 리포지토리 이름을 제공해야 합니다. 예시:

repo:github-linguist/linguist

리포지토리 집합 내에서 검색하려면 여러 repo: 한정자를 부울 연산자 OR와(과) 결합할 수 있습니다. 예시:

repo:github-linguist/linguist OR repo:tree-sitter/tree-sitter

참고: 코드 검색은 현재 리포지토리 이름에 대한 정규식 또는 부분 일치를 지원하지 않으므로 한정자가 작동하려면 전체 리포지토리 이름(사용자 접두사 포함) repo: 한정자을 입력해야 합니다.

조직 및 사용자 한정자

조직 내에서 파일을 검색하려면 org: 한정자를 사용합니다. 예시:

org:github

개인 계정 내에서 파일을 검색하려면 user: 한정자를 사용합니다. 예시:

user:octocat

참고: 코드 검색은 현재 조직 또는 사용자 이름에 대한 정규식 또는 부분 매칭을 지원하지 않으므로 한정자가 작동하려면 전체 조직 또는 사용자 이름을 입력해야 합니다.

언어 한정자

특정 언어로 범위를 좁히려면 language: 한정자를 사용합니다. 예시:

language:ruby OR language:cpp OR language:csharp

지원되는 언어 이름의 전체 목록은 github-linguist/linguistlanguages.yaml을 참조하세요. 기본 설정 언어가 목록에 없으면 끌어오기 요청을 열어 추가할 수 있습니다.

경로 한정자

파일 경로 내에서 검색하려면 path: 한정자를 사용합니다. 이렇게 하면 해당 파일 경로의 어디에든 해당 용어가 포함된 파일과 매칭됩니다. 예를 들어 경로에 용어 unit_tests이(가) 포함된 파일을 찾으려면 다음을 사용합니다.

path:unit_tests

위의 쿼리는 둘 다 일치하며 src/unit_tests/my_test.py, src/docs/unit_tests.md 둘 다 경로의 어딘가에 unit_test을(를) 포함하기 때문에 일치합니다.

경로의 일부가 아닌 특정 파일 이름만 매칭하려면 정규식을 사용할 수 있습니다.

path:/(^|\/)README\.md$/

. 파일 이름이 이스케이프됐으므로, .은(는) 정규식에 특별한 의미를 지닙니다. 정규식에 관한 자세한 내용은 "정규식 사용"을 참조하세요.


path: 한정자에서 일부 제한된 GLOB 식을 사용할 수도 있습니다.

예를 들어 txt 확장이 있는 파일을 검색하려면 다음을 사용할 수 있습니다.

path:*.txt

`src` 디렉터리 내에서 JavaScript 파일을 검색하려면 다음을 사용할 수 있습니다.
path:src/*.js
  • 기본적으로 글롭 식은 경로의 시작 부분에 고정되지 않으므로 위의 식은 다음과 같은 app/src/main.js 경로와 일치합니다. 그러나 식을 /(으)로 접두사로 지정하면 시작에 고정됩니다. 예시:

    path:/src/*.js
    
  • *은(는) / 문자와 일치하지 않으므로 위의 예제에서는 모든 결과가 src 디렉터리의 직접 하위 항목이 됩니다. 하위 디렉터리 내에서 일치하고 /src/app/testing/utils/example.js와(과) 같은 결과에 깊이 중첩된 파일을 포함하려면, **을(를) 사용할 수 있습니다. 예시:

    path:/src/**/*.js
    

? 전역 문자를 사용할 수도 있습니다. 예를 들어 경로 file.aac, file.abc와(과) 일치하거나, 다음을 사용할 수 있습니다.

path:*.a?c

`*`, `?` 같은 특수 문자가 포함된 파일 이름을 검색하려면 따옴표가 붙은 문자열만 사용합니다.
path:"file?"

따옴표 붙은 문자열에 대해 글롭 식을 사용할 수 없으므로 위의 쿼리는 file? 리터럴 문자열을 포함하는 경로만 일치합니다.

기호 한정자

symbol: 한정자를 사용하여 코드에서 함수 또는 클래스 정의와 같은 기호 정의를 검색할 수 있습니다. 기호 검색은 오픈 소스 Tree-sitter 파서 에코시스템을 사용하여 코드를 구문 분석하므로 추가 설정 또는 빌드 도구 통합이 필요하지 않습니다.

예를 들어 다음과 같은 WithContext 기호를 검색합니다.

language:go symbol:WithContext

일부 언어에서는 접두사(예: 클래스 이름의 접두사)를 사용하여 기호를 검색할 수 있습니다. 예를 들어 deleteRows 구조체의 Maint 메서드에 대해 이동 또는 러스트의 symbol:Maint::deleteRows을(를) 사용하는지 symbol:Maint.deleteRows(으)로 검색할 수 있습니다.

기호 한정자가 있는 정규식을 사용할 수도 있습니다. 예를 들어 다음 쿼리는 Rust에서 String 형식에 대해 구현한 변환을 찾습니다.

language:rust symbol:/^String::to_.*/

이 한정자는 참조가 아닌 정의만 검색하며, 모든 기호 형식이나 언어가 아직 완전히 지원되지는 않습니다. 기호 추출은 다음 언어에 대해 지원됩니다.

  • Bash
  • C
  • C#
  • C++
  • CodeQL
  • Elixir
  • Go
  • JSX
  • Java
  • JavaScript
  • Lua
  • PHP
  • 프로토콜 버퍼
  • Python
  • R
  • Ruby
  • Rust
  • Scala
  • Starlark
  • Swift
  • TypeScript

더 많은 언어에 대한 지원을 추가하기 위해 현재 노력하고 있습니다. 기호 검색의 기반이 되는 오픈 소스 Tree-sitter 파서 에코시스템에서 언어에 대한 지원을 추가하면 이러한 노력에 기여하실 수 있습니다.

콘텐츠 한정자

기본적으로 bare 용어는 경로와 파일 콘텐츠를 모두 검색합니다. 파일 경로가 아닌 파일의 콘텐츠와 엄격하게 일치하도록 검색을 제한하려면 content: 한정자를 사용합니다. 예시:

content:README.md

이 쿼리는 README.md 이름이 지정된 파일과 일치하는 것이 아니라 README.md 용어가 포함된 파일만 일치합니다.

Is 한정자

리포지토리 속성을 기준으로 필터링하려면 is: 한정자를 사용할 수 있습니다. is:는 다음 값을 지원합니다.

  • archived: 보관된 리포지토리로 검색 범위를 제한합니다.
  • fork: 포크된 리포지토리로 검색 범위를 제한합니다.
  • vendored: 벤더링된 것으로 검색된 콘텐츠로 검색 범위를 제한합니다.
  • generated: 생성된 것으로 검색된 콘텐츠로 검색 범위를 제한합니다.

예시:

path:/^MIT.txt$/ is:archived

is: 한정자는 NOT 연산자를 사용하여 반전할 수 있습니다. 보관되지 않은 리포지토리를 다음을 검색할 수 있습니다.

log4j NOT is:archived

결과에서 포크를 제외하려면 다음을 검색할 수 있습니다.

log4j NOT is:fork

정규식 사용

코드 검색은 코드에서 패턴을 검색하는 정규식을 지원합니다. 슬래시로 정규식을 둘러싸서 여러 한정자 내에서뿐만 아니라 bare 검색 용어에도 정규식을 사용할 수 있습니다.

예를 들어 sparse.*index 정규식을 검색하려면 다음을 사용합니다.

/sparse.*index/

정규식 내에서 슬래시를 이스케이프해야 합니다. 예를 들어 App/src 디렉터리 내에서 파일을 검색하려면 다음을 사용합니다.

/^App\/src\//

정규식 내에서 \n은(는) 줄 바꿈 문자를 의미하고 \t은(는) 탭을 의미하며 \x{hhhh}은(는) 유니코드 문자를 이스케이프하는 데 사용할 수 있습니다. 즉, 정규식을 사용하여 검색 창에 입력할 수 없는 문자가 포함된 정확한 문자열을 검색할 수 있습니다.

일반적인 정규식 기능들은 코드 검색에서 작동합니다. 하지만 "look-around" 어설션은 지원되지 않습니다.

검색어 구분

검색 용어, 정확한 문자열, 정규식, 한정자, 괄호, 부울 키워드 AND, ORNOT 등, 검색의 모든 부분을 공백으로 서로 구분해야 합니다. 한 가지 예외는 괄호 안의 항목이 괄호 (, )와(과) 분리될 필요가 없다는 것입니다.

공백으로 구분되지 않은 여러 구성 요소 또는 위에 나열된 규칙을 따르지 않는 다른 텍스트가 검색에 포함된 경우 코드 검색은 사용자의 의도를 추측하려고 합니다. 쿼리의 해당 구성 요소를 검색할 정확한 텍스트로 취급하는 것을 포기하는 경우가 많습니다. 예를 들어, 다음과 같은 쿼리가 있습니다.

printf("hello world\n");

코드 검색은 괄호와 따옴표를 특수 문자로 해석하지 않고 대신 정확한 코드가 포함된 파일을 검색합니다.

코드 검색에서 잘못 추측하는 경우, 언제든 따옴표와 공백을 사용하여 원하는 검색을 가져와 의미를 명확하게 할 수 있습니다.

대/소문자 구분

기본적으로 코드 검색은 대/소문자를 구분하지 않습니다. True를 검색하면 대문자 TRUE소문자 true 결과가 포함됩니다. 예를 들어 (?-i)True와(과) 같이 대/소문자 구분이 활성화된 정규식을 사용하여 대/소문자를 구분하는 검색을 수행할 수 있습니다.