2016-07-03 2 views
0

정확한 내용 (100 % 일치)을 사용하여 git repo에서 파일을 검색하는 방법을 찾으려고합니다. 이 간단한 시나리오가 있다고 가정 해 보겠습니다.git repo에서 정확한 내용의 정확한 파일을 찾는 방법은 무엇입니까?

  • 로컬에 새 git repo를 만듭니다. 내용이 "1"인 텍스트 파일 이름을 myFile.txt로 만듭니다. 그리고 레포에 맡기십시오. 간단한 예제의 의 경우 SHA-1 해시의 처음 네 글자는 "1111"입니다.

  • 그런 다음 내용이 "2"인 myFile.txt를 수정하고 repo로 커밋합니다. SHA-1은 "2222"가됩니다.

  • 그런 다음 다시 내용을 "3"으로 수정하고 repo를 실행합니다. SHA-1은 "3333"이됩니다.

  • 이제 파일을 수정하고 내용을 "1"로 지정했습니다.

어떻게 알 수있을 것입니다 (이 시간은 아직 커밋되지 않습니다)하는 커밋 myFile1.txt는 이전의 모든 커밋에 같은 내용이 있는가에? 그것을 할 수있는 명령이 있습니까? 예 :

git-find-the-file myFile.txt 
output: The same file is on commit "1111" 

텍스트 및 이진 파일을 찾는 데 사용하고 싶습니다. 내 실제 응용 프로그램은 100 개 이상의 커밋을 통해 Git Repo에서 동일한 단어 문서를 찾습니다.

고맙습니다.

답변

1

다음을 사용하여 해당 파일과 관련된 모든 변경 사항을 볼 수 있습니다.

gitk myFile.txt
+0

안녕하세요, gitk이 저에게 새로운 점에 대해 제안 해 주셔서 감사합니다. 나는 그것으로 현재 놀고있다. 내 질문을 편집하고 내가 사용할 곳의 정보를 추가했지만 (100 단어 이상의 커밋이있는 Git repo에서 같은 단어 문서 파일을 찾는). 나는 지금 Gitk에서 테스트를 할 것이다. 고마워요. –

1

시도

git log --raw --abbrev=40 --pretty=oneline | 
    grep -B 1 `git hash-object filename` 

참조 : Git User Manual-Finding commits referencing a file with given content

+1

'--raw' 옵션이 꽤 좋긴하지만, 파일이 처음 변경된 것이 아니라면 grep이 실패 할 것이라고 생각합니다.''git log --raw --abbrev = 40 --pretty = H | awk 'NF == 1 {커밋 = $ 1} $ 4 == 해쉬 {프린트 커밋}'hash = 'git hash-object myfile.txt''' – jthill

+0

@jthill 그것을 지적 해 주셔서 감사합니다.지금 컴퓨터에 액세스 할 수 없으므로 답변을 확인할 수있을 때 업데이트 할 것입니다. – ElpieKay

+0

@jthill 그것은 완벽했다. 비트 맵 파일을 시도하고 올바르게 반환합니다. 정확히 내가 무엇을 찾고 있었는지. $ git log --raw --abbrev = 40 --pretty = % H | AWK 'NF == 1 {커밋 = $ 1} $ 4 == 해시 {인쇄 커밋}' 0b95661c89b0c0b2a65acc3abeaf0707f1474a46 0d681eeda1b6add2912657ad8a084fef92097fd2 너무 감사 a.bmp' 해시 ='자식 해시 객체를. 커밋 된 파일과 커밋되지 않은 파일 모두에서 작동합니다. –

0
myfile=`git hash-object myfile.txt` 
git rev-list HEAD | while read rev; do 
     [[ `git rev-parse $rev:myfile.txt` = $myfile ]] && echo $rev 
done 

당신에 대해 확인하려면 마지막 무대 일명 마지막에 추가 오히려 현재 worktree 내용보다는 내용에 대한 git rev-parse :myfile.txt 대체 해시 객체

0

개인적인 도전 과제로서 파이썬 자식 모듈을 시험해보기 위해 필자는이 작업을 수행해야하는 작은 파이썬 프로그램을 만들었습니다. 파이썬 자식 모듈을 먼저 설치 한 다음 "findFile.py pathToRepo pathToFileToFind"로 실행하면 모든 커밋과 찾은 파일의 경로가 저장소에 나열됩니다. 이 옵션은 파일의 모든 인스턴스 (파일의 SHA를 기반로 검색 한 이후 이름이 바뀐 경우에도 해당)와 저장소 내의 모든 경로를 찾아야합니다.

https://github.com/dneiss/findFile에 있습니다.

관련 문제