Git 브랜치를 검색하여 파일이나 디렉토리를 찾으려면 어떻게해야합니까?
Git에서 여러 브랜치에서 경로로 파일 또는 디렉토리를 어떻게 검색 할 수 있습니까?
지점에 무언가를 썼는데 어느 것을 기억하지 못합니다. 이제 찾아야합니다.
설명 : 나는 내 지점 중 하나에서 만든 파일을 찾고 있습니다. 내용이 무엇인지 기억하지 못하기 때문에 내용이 아닌 경로별로 찾고 싶습니다.
git log
+ git branch
당신을 위해 그것을 찾을 것입니다 :
% git log --all -- somefile
commit 55d2069a092e07c56a6b4d321509ba7620664c63
Author: Dustin Sallings <dustin@spy.net>
Date: Tue Dec 16 14:16:22 2008 -0800
added somefile
% git branch -a --contains 55d2069
otherbranch
globbing도 지원합니다 :
% git log --all -- '**/my_file.png'
작은 따옴표는 (적어도 Bash 쉘을 사용하는 경우) 필요하므로 쉘은 글로브 패턴을 변경하지 않고 git에 전달합니다 (Unix와 마찬가지로 find
).
git ls-tree가 도움이 될 수 있습니다. 기존의 모든 지점을 검색하려면
for branch in `git for-each-ref --format="%(refname)" refs/heads`; do
echo $branch :; git ls-tree -r --name-only $branch | grep '<foo>'
done
이것의 장점은 파일 이름을 정규식으로 검색 할 수도 있다는 것입니다.
ididak의 응답 은 꽤 멋지 지만 Handyman5 는 그것을 사용하는 스크립트를 제공하지만 그 접근 방식을 사용하는 것이 약간 제한적이라는 것을 알았습니다.
때때로 시간이 지남에 따라 표시되거나 사라질 수있는 것을 검색해야하므로 모든 커밋에 대해 검색하지 않는 이유는 무엇입니까? 그 외에도 때로는 자세한 응답이 필요하고 다른 경우에는 일치하는 커밋 만 있습니다. 해당 옵션의 두 가지 버전이 있습니다. 다음 스크립트를 경로에 넣으십시오.
자식 찾기 파일
for branch in $(git rev-list --all)
do
if (git ls-tree -r --name-only $branch | grep --quiet "$1")
then
echo $branch
fi
done
자식 찾기 파일 상세
for branch in $(git rev-list --all)
do
git ls-tree -r --name-only $branch | grep "$1" | sed 's/^/'$branch': /'
done
이제 할 수 있습니다
$ git find-file <regex>
sha1
sha2
$ git find-file-verbose <regex>
sha1: path/to/<regex>/searched
sha1: path/to/another/<regex>/in/same/sha
sha2: path/to/other/<regex>/in/other/sha
getopt 를 사용 하면 모든 커밋, 참조, 참조 / 헤드, 상세 정보 등을 번갈아 검색하도록 해당 스크립트를 수정할 수 있습니다.
$ git find-file <regex>
$ git find-file --verbose <regex>
$ git find-file --verbose --decorated --color <regex>
체크 아웃 https://github.com/albfan/git-find-file 가능한 구현합니다.
gitk --all
커밋 "터치 경로"와 관심있는 경로 이름을 사용 하고 검색 할 수 있습니다 .
사용하려면 복사하여 붙여 넣기 git find-file SEARCHPATTERN
검색된 모든 분기 인쇄 :
git config --global alias.find-file '!for branch in `git for-each-ref --format="%(refname)" refs/heads`; do echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; done; :'
결과가있는 가지만 인쇄하십시오.
git config --global alias.find-file '!for branch in $(git for-each-ref --format="%(refname)" refs/heads); do if git ls-tree -r --name-only $branch | grep "$1" > /dev/null; then echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; fi; done; :'
이 명령은 최소한의 쉘 스크립트 ~/.gitconfig
를 전역 git 별명 으로 직접 추가합니다 .
find
Git 리포지토리 에 대한 명령 구현은 다음 과 같습니다.
https://github.com/mirabilos/git-find
참고 URL : https://stackoverflow.com/questions/372506/how-can-i-search-git-branches-for-a-file-or-directory
'development' 카테고리의 다른 글
"Catch SyntaxError : Unexpected token o"가 계속 나타납니다. (0) | 2020.03.14 |
---|---|
동기화 된 (this)을 사용할 수 있다면 왜 ReentrantLock을 사용합니까? (0) | 2020.03.14 |
공백과 따옴표가있는 매개 변수를 사용하여 PowerShell에서 EXE 파일을 실행하는 방법 (0) | 2020.03.14 |
Pyplot 산점도 마커 크기 (0) | 2020.03.14 |
Visual Studio 2010-권장 확장명 (0) | 2020.03.14 |