GitHub에서 커밋 메시지를 어떻게 검색합니까?


328

아니 힘내 저장소 , 오히려에서 GitHub의 구체적 - 내가 어떻게 특정 저장소 / 브랜치의 커밋 메시지를 바로 검색 할 수 있습니까?


3
레포는 공개 또는 비공개입니까?

2
모든 포크에서 커밋 메시지를 검색하는 것은 어떻습니까? 메인 리포지토리에 100 개가 넘는 포크가있을 때 휠을 다시 발명하지 않으려 고합니다!
Daniel Sokolowski

그 이후로 어떤 변화가 있습니까?
Pavel Šimerda

네트워크 커밋 을 검색하고 싶습니다
frumbert

답변:


68

2017 년 현재 GitHub 자체에 포함 된 기능 입니다.

그들에 의해 사용되는 예제 검색은 repo:torvalds/linux merge:false crypto policy

여기에 이미지 설명을 입력하십시오 https://github.com/blog/2299-search-commit-messages의 GIF 이미지


읽기 / 쓰기 권한이있는 개인 저장소를 검색 할 때 권한 오류가 발생합니다.
anon58192932

1
5 분 동안보고 있는데 마우스가 축소 된 후 오른쪽으로 이동 한 후 마우스의 위치를 ​​알 수 없습니다.
케빈 크룸 비 에드

1
@KevinKrumwiede 아마 "녹화 중지"버튼 haha
Corey Cole

나는 포기하고 사용 "--all --grep = searhterm 로그인 힘내"
에드윈 에반스

206

이전에는이 ​​작업을 수행 할 수 있었지만 GitHub는 2013 년 중반에이 기능을 제거했습니다. 이를 로컬로 달성하려면 다음을 수행하십시오.

git log -g --grep=STRING

( -g다른 브랜치 및 댕글 링 커밋을 검색 하려면 플래그를 사용하십시오 .)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones.

143
도대체 왜 그것을 제거 했습니까? 정말 유용한 기능입니다.
Josh Brown

1
Factor Mystic :이 문자열의 I.want.spaces는 일반적으로 충분합니다.
dbrower

11
-g가장 일반적인 사용 사례 에서는 플래그를 생략하십시오 . 나는 이것에 대해 너무 많이 보지 않았지만와 함께 -g검색하면 한 달만 되돌아가는 것처럼 보입니다. git log -g --grep=fix에있는 동안 develop2 년에 걸쳐 ~ 8000 커밋이있는 REPO의 지점까지만 다시 2월 2로 간다
댄 Dascalescu

1
@ DanDascalescu 이상한, 나는 -g깃발 과 함께 적어도 5 개월 돌아가는 커밋을 찾을 수있었습니다 .
Chrispy

134

업데이트 (2017/01/05) :

GitHub는 이제 UI 내에서 커밋 메시지를 검색 할 수있는 업데이트를 게시했습니다. 자세한 내용은 블로그 게시물 을 참조하십시오.


나는 같은 질문을했고 어제 누군가 GitHub에게 연락했다.

검색 엔진을 Elasticsearch로 전환했기 때문에 GitHub UI를 사용하여 커밋 메시지를 검색 할 수 없습니다. 그러나이 기능은 팀의 희망 목록에 있습니다.

불행히도 현재 해당 기능에 대한 릴리스 날짜가 없습니다.


7
+1 GitHub에서 명백한 기능이 될 것으로 생각되는 것을 달성하는 방법을 궁금해하는 무익한 시간을 절약했습니다. 이제 명령 행을 통해 grep을 로컬로 리포지토리를 복제해야합니다. 이봐, 그 진전이야?! ;)
McNab

68
웹 UI에서의 고급 검색조차도 가장 중요한 필드 인 실제 커밋 메시지를 검색 할 수 없습니다. 그것은 절대적으로 우스운 IMO입니다. Github는 당신의 행동을 함께합니다!
브래드 토마스

22
예. 오픈 소스 소프트웨어에 혁명을 일으키고 대중화하는 데 도움이되는 웹 서비스를 구축했다는 사실을 잊어 버리십시오. 이러한 기능이 없기 때문에 완전한 가짜가됩니다!
Jon Cairns

12
쉽게 찾을 수있는 공공 장소에서 GitHub과 함께 담화의 내용을 게시 할 시간을 내 주셔서 감사합니다. 이것이 대중이 그러한 정보를 얻는 유일한 방법이라는 것은 터무니없는 일입니다-GitHub가 공개 이슈 트래커를 갖지 않는 것은 매우 어리석은 일입니다. 같은 요청으로 시간을 낭비하는 사람들도 있습니다. 당신이 구한 수백 시간의 생산성에 감사드립니다.
Mark Amery

1
Atlasian의 공개 추적기보다 훨씬 낫지는 않습니다.이 추적기는 1000 년의 공개 투표로 7 년 된 공개 문제로 가득합니다 ...
Askdesigners

58

짧은 대답은 웹 사이트의 github.com에서 커밋 메시지를 직접 검색 할 수 없다는 것입니다. 당분간 우리 git grep는이 스레드의 다른 사람들이 제안한 로컬 솔루션 을 권장합니다 .

어느 시점에서 GitHub는 git grep단일 저장소에 대한 커밋 메시지에 대한 스타일 검색을 제공했습니다 . 불행하게도,이 접근 방식은 파일 서버에 액세스 할 수없는 서비스 거부를 노출 시켰습니다. 이러한 이유로 git grep검색 을 제거했습니다 .

현재 봉투 뒷면의 추정치는 GitHub에서 약 800 억 마크 정도의 커밋 수를 나타냅니다. Google 엔지니어는 지원을 비웃지 만 ElasticSearch에 저장할 문서는 상당히 많습니다. 우리는이 데이터 세트를 검색 가능하게 만들고 싶지만 사소한 프로젝트가 아닙니다.


2
+1. 그건 내가 쓰는 무슨 생각을 확인하는 것 내 대답 : 메시지 인덱싱되지 않습니다 커밋 : 인덱싱 작업하는 git diff's(커밋의 내용에 의미를가 아닌 메타 데이터를 커밋)
VonC

"약속 점프"버튼은 어떻습니까? 현재는 URL에서 액세스 할 수 - stackoverflow.com/a/12214817/817632 하지만 대한 인터페이스 (내가 아는하지 않는 것이) 없다. 유스 케이스-버전 대신 bower.json 어딘가에서 커밋 해시를 찾고이 커밋이 정확히 무엇을하고 싶습니까? 인터넷 검색 시간을 절약 할 수 있습니다.
Olga

44

이것은 GitHub에서 제거되었습니다. 나는 사용한다:

$git log --all --oneline | grep "search query"

여기에 이미지 설명을 입력하십시오

저자별로 필터링 할 수도 있습니다.

$git log --all --oneline --author=rickhanlonii | grep "search query"

3
이것은 나를 위해 일했지만 가장 많이 대답 된 답변은 그렇지 않았습니다.
makdad

21

code search의 도움말 페이지에서 아직 불가능한 것 같습니다.

검색 할 파일 또는 경로를 선택하는 기능을 포함하여 저장소에서 텍스트를 검색 할 수 있지만 커밋에서 검색하도록 지정할 수는 없습니다.

어쩌면 그들에게 제안 하시겠습니까?


18
이것은 repo를 통해 검색 할 때 더 "기본"사용 사례처럼 보입니다. 특히 누군가가 많은 커밋으로 새로운 저장소를 알게되었습니다. 그들은 이것을 추가하는 것을 고려해야합니다.
Jose Browne

19

Google에서 크롤링 한 리포지토리에서이 작업을 수행 할 수 있습니다 (결과는 리포지토리마다 다릅니다).

크롤링 된 모든 저장소의 모든 분기에서 "라이센스 변경"을 검색하십시오.

"라이센스 변경"사이트 : https://github.com/*/*/commits

"변경된 라이센스"에 대한 모든 크롤링 저장소의 검색 마스터 분기 :

"라이센스 변경"사이트 : https://github.com/*/*/commits/master

"변경된 라이센스"에 대한 모든 크롤링 된 트위터 저장소의 검색 마스터 지점

"라이센스 변경"사이트 : https://github.com/twitter/*/commits/master

트위터 / some_project 저장소의 모든 지점에서 "라이센스 변경"을 검색하십시오.

"라이센스 변경"사이트 : https://github.com/twitter/some_project/commits


4
@DZenBot 공개 리포지토리가 아닌 경우 git grep에 대한 로컬 사본이 이미있을 수 있습니다. 공개 리포지토리 전체를 복제하지 않으려는 사람들을 위해이 답변을 넣어 변경 사항이있을 때 알아 냈습니다. 나는 주로 구 gtk 버전에 대한 지원을 제거하거나 라이센스가 gpl3로 변경 될 때 커밋을 찾는 데 사용한다
technosaurus

15

2017 년 1 월 업데이트 (2 년 후) :

커밋 메시지를 검색 할 수 있습니다 ! (여전히 마스터 지점에서만)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


2015 년 2 월 : Elasticsearch를 기반으로하는 현재 검색 인프라 ( 2013 년 1 월에 도입) 고려하면 가능할 수도 있습니다 .

"신뢰할 수있는 공식 출처에서 도출 한"답변 으로, GitHub에서 Elasticsearch를 소개하는 GitHub 직원과의 인터뷰 (2013 년 8 월)

Tim Pease : 두 가지 문서 유형이 있습니다. 하나는 소스 코드 파일이고 다른 하나는 저장소입니다. 자식이 작동하는 방식은 커밋이 있고 각 커밋에 대한 분기가 있다는 것입니다. 리포지토리 문서는 인덱스 된 특정 리포지토리에 대한 최신 커밋을 추적합니다. 사용자가 새로운 커밋을 Github에 푸시하면 우리는 elasticsearch에서 해당 리포지토리 문서를 가져옵니다. 그런 다음 가장 최근에 색인 된 커밋을 확인한 다음이 최근 푸시와 이전에 색인을 생성 한 항목간에 수정 또는 추가 또는 삭제 된 모든 파일 목록을 얻습니다. 그런 다음 변경된 문서를 업데이트하면됩니다. 누군가가 누를 때마다 전체 소스 코드 트리를 다시 색인 할 필요가 없습니다.

앤드류 콜라 키안 : 자 , 여러분은 마스터 브랜치 만 색인하고 있다고 가정합니다.

팀 피즈 : 맞습니다. 거기에 들어가는 것은 마스터 브랜치의 책임자이며 여전히 많은 데이터, 20 억 개의 문서, 30 테라 바이트입니다.

앤드류 콜라 키안 : 정말 대단합니다.

[...]

Tim Pease : 소스 코드를 인덱싱하면 자동 복구 프로세스입니다.
우리는 마지막 인덱스 커밋을 추적하는 저장소 문서를 가지고 있습니다. 우리가 놓친 경우, 해당 작업이 실패하는 다음 커밋이 커밋되는 커밋 3 개를 놓치면 우리는 색인을 생성 한 이전 커밋 과이 새로운 푸시로보고있는 커밋 사이의 차이점을 여전히보고 있습니다.
A를 수행하면 git diff업데이트, 삭제 또는 추가 된 모든 파일이 제공됩니다. “좋아요, 우리는이 파일들을 제거해야합니다. 이 파일들과 그 모든 것을 추가해야합니다.” 자체 치유 기능이며 거의 모든 아키텍처에서 취한 접근 방식입니다.

모든 수단하지 않는 것이 모두 의 가지 모든 의 repo는 그 접근 방식으로 인덱싱 할 것입니다.
현재 전역 커밋 메시지 검색을 사용할 수 없습니다.
그리고 Tim Pease 자신은 커밋 메시지가 색인되지 않았 음을 확인 합니다 .

이 로컬 복제의 자신의 elasticsearch 지역 색인을 얻을 불가능 아니라고 참고 : "을 참조하십시오 ElasticSearch와 자식 저장소를 검색 "

그러나 특정 리포지토리의 경우 복제하고 가장 쉬운 방법은 다음과 같습니다.

git log --all --grep='my search'

( " 커밋 메시지로 Git 저장소를 검색하는 방법은 무엇입니까? "


7

이것이 GitHub에서 제거되었으므로 gitkLinux 에서이 작업을 수행했습니다.

터미널에서 저장소로 이동하여을 입력하십시오 gitk.

GUI 중간에는 검색 창이 있습니다. 다음과 같은 다양한 필터를 제공합니다.

검색 창

범위-경로 포함, 터치, 문자열 추가 / 제거, 줄 일치 변경

검색 유형-정확한 / IgnCase / Regexp

검색 필드-모든 필드 / 헤드 라인 / 설명 / 커미터



4

로컬 버전의 저장소가있는 경우 기본 브라우저의 새 탭에서 검색어와 일치하는 모든 커밋에 대해 GitHub 페이지를 열도록 작성한이 조잡한 쉘 스크립트를 사용해 볼 수 있습니다.

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
    python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done

https://github.com/RepoOwnerUserName/RepoName/리포지토리의 실제 GitHub URL로 바꾸고 스크립트를 어딘가에 저장하고 (예 : githubsearch.sh실행 가능하게 만들기 ( chmod +x githubsearch.sh) ~/.bashrc파일에 다음 별칭을 추가 하십시오.

alias githubsearch='/path/to/githubsearch.sh'

그런 다음 Git 저장소의 어느 곳에서나 터미널 에서이 작업을 수행하십시오.

githubsearch "what you want to search for"

(대소 문자를 구분하지 않는) 검색어와 일치하는 커밋은 브라우저에서 해당 GitHub 페이지가 열립니다. 검색어가 수백 번의 커밋으로 표시되면 브라우저가 중단되고 PC의 CPU가 잠시 동안 소모 될 수 있습니다.


0

2019 년 중반, 왼쪽 상단 검색 창에 검색하려는 항목을 입력 한 다음 "커밋"을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.