답변:
2017 년 현재 GitHub 자체에 포함 된 기능 입니다.
그들에 의해 사용되는 예제 검색은 repo:torvalds/linux merge:false crypto policy
https://github.com/blog/2299-search-commit-messages의 GIF 이미지
이전에는이 작업을 수행 할 수 있었지만 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.
-g
가장 일반적인 사용 사례 에서는 플래그를 생략하십시오 . 나는 이것에 대해 너무 많이 보지 않았지만와 함께 -g
검색하면 한 달만 되돌아가는 것처럼 보입니다. git log -g --grep=fix
에있는 동안 develop
2 년에 걸쳐 ~ 8000 커밋이있는 REPO의 지점까지만 다시 2월 2로 간다
-g
깃발 과 함께 적어도 5 개월 돌아가는 커밋을 찾을 수있었습니다 .
업데이트 (2017/01/05) :
GitHub는 이제 UI 내에서 커밋 메시지를 검색 할 수있는 업데이트를 게시했습니다. 자세한 내용은 블로그 게시물 을 참조하십시오.
나는 같은 질문을했고 어제 누군가 GitHub에게 연락했다.
검색 엔진을 Elasticsearch로 전환했기 때문에 GitHub UI를 사용하여 커밋 메시지를 검색 할 수 없습니다. 그러나이 기능은 팀의 희망 목록에 있습니다.
불행히도 현재 해당 기능에 대한 릴리스 날짜가 없습니다.
짧은 대답은 웹 사이트의 github.com에서 커밋 메시지를 직접 검색 할 수 없다는 것입니다. 당분간 우리 git grep
는이 스레드의 다른 사람들이 제안한 로컬 솔루션 을 권장합니다 .
어느 시점에서 GitHub는 git grep
단일 저장소에 대한 커밋 메시지에 대한 스타일 검색을 제공했습니다 . 불행하게도,이 접근 방식은 파일 서버에 액세스 할 수없는 서비스 거부를 노출 시켰습니다. 이러한 이유로 git grep
검색 을 제거했습니다 .
현재 봉투 뒷면의 추정치는 GitHub에서 약 800 억 마크 정도의 커밋 수를 나타냅니다. Google 엔지니어는 지원을 비웃지 만 ElasticSearch에 저장할 문서는 상당히 많습니다. 우리는이 데이터 세트를 검색 가능하게 만들고 싶지만 사소한 프로젝트가 아닙니다.
code search의 도움말 페이지에서 아직 불가능한 것 같습니다.
검색 할 파일 또는 경로를 선택하는 기능을 포함하여 저장소에서 텍스트를 검색 할 수 있지만 커밋에서 검색하도록 지정할 수는 없습니다.
어쩌면 그들에게 제안 하시겠습니까?
Google에서 크롤링 한 리포지토리에서이 작업을 수행 할 수 있습니다 (결과는 리포지토리마다 다릅니다).
"라이센스 변경"사이트 : https://github.com/*/*/commits
"라이센스 변경"사이트 : https://github.com/*/*/commits/master
"라이센스 변경"사이트 : https://github.com/twitter/*/commits/master
"라이센스 변경"사이트 : https://github.com/twitter/some_project/commits
2017 년 1 월 업데이트 (2 년 후) :
커밋 메시지를 검색 할 수 있습니다 ! (여전히 마스터 지점에서만)
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'
이것은 GitHub가 기능을 추가 할 때까지 Eclipse 내에서 잘 작동 합니다.
로컬 버전의 저장소가있는 경우 기본 브라우저의 새 탭에서 검색어와 일치하는 모든 커밋에 대해 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가 잠시 동안 소모 될 수 있습니다.