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
글로빙도 지원합니다.
% git log --all -- '**/my_file.png'
단일 따옴표는 필요합니다(최소한 Bash 셸을 사용하는 경우). 따라서 셸은 글로벌 패턴을 확장하는 대신 git에 변경되지 않고 전달합니다(UNIX와 마찬가지로).find
).
gits-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
이 기능의 장점은 파일 이름에 대한 정규식으로 검색할 수 있다는 것입니다.
idididak의 반응은 꽤 멋지고 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를 사용하면 스크립트를 수정하여 모든 커밋, refs, refs/heads, be verbose 등을 번갈아 검색할 수 있습니다.
$ 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
커밋 "커밋 경로"와 관심 있는 경로 이름을 검색합니다.
UI
(크레딧: @MikeW의 제안)
사용할 복사 및 붙여넣기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 log --source --all --diff-filter=A --name-only -- '**/my_file.png'
꽤 괜찮은 구현입니다.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
'programing' 카테고리의 다른 글
Visual Studio Code에서 항상 Git 자격 증명을 요청합니다. (0) | 2023.05.22 |
---|---|
프로그래밍 방식으로 창을 최소화하는 방법이 있습니까? (0) | 2023.05.22 |
콘솔에서 MongoDB 로그 메시지를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.05.22 |
MVVM을 사용할 때 TextBox를 "비밀번호 상자"로 만들고 별을 표시하는 방법은 무엇입니까? (0) | 2023.04.22 |
코드에서의 WPF 자동 높이 (0) | 2023.04.22 |