개발관련/Git

Git의 특정 개정판에서 단일 파일을 검색하는 방법

Rateye 2021. 7. 13. 10:33
728x90
반응형

 

질문 : Git의 특정 개정판에서 단일 파일을 검색하는 방법은 무엇입니까?

Git 저장소가 있고 몇 달 전에 일부 파일이 어떻게 생겼는지보고 싶습니다. 나는 그날 개정판을 찾았다. 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 입니다. 하나의 파일이 어떻게 생겼는지 확인하고 ( "새") 파일로 저장해야합니다.

gitk 사용하여 파일을 볼 수 있었지만 저장할 수있는 옵션이 없습니다. 명령 줄 도구로 시도했는데 가장 가까운 것은 다음과 같습니다.

git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt

그러나이 명령은 파일 내용이 아닌 diff를 표시합니다. PAGER=cat 과 같은 것을 사용하고 출력을 파일로 리디렉션 할 수 있다는 것을 알고 있지만 실제 파일 콘텐츠를 얻는 방법을 모르겠습니다.

기본적으로 svn cat 과 같은 것을 찾고 있습니다.

반응형
답변

자신의 대답을 완성하기 위해 구문은 실제로

git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py

이 명령은 일반적인 수정 스타일을 사용하므로 다음 중 하나를 사용할 수 있습니다.

git show "를 사용할 때 항상 현재 디렉토리 위치가 아닌 저장소 루트의 경로를 지정 한다는 점을 기억하는 것이 중요합니다.

( Mike Morearty 가 적어도 git 1.7.5.4에서는 경로 ./ "를 넣어 상대 경로를 지정할 수 있다고 언급했지만, 예를 들면 다음과 같습니다.

git show HEAD^^:./test.py

)

Git 2.23+ (2019 년 8 월)에서는 혼란스러운 git checkout 명령 을 대체 git restore

git restore -s <SHA1>     -- afile
git restore -s somebranch -- afile

그것은 작업 트리에서 "소스"( -s ) 커밋 SHA1 또는 분기 somebranch 있는 파일 만 복원합니다.
인덱스도 복원하려면 :

git restore -s <SHA1> -SW -- afile

( -SW : --staged --worktree )

git1.5.x 이전에는 몇 가지 배관 작업이 수행되었습니다.

git ls-tree <rev>
커밋 내에서 하나 이상의 'blob'객체 목록 표시

git cat-file blob <file-SHA1>
특정 개정 내에서 커밋 된 파일을 cat으로 지정합니다 (svn cat과 유사). git ls-tree 를 사용하여 주어진 file-sha1의 값을 검색합니다.

git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::

git-ls-tree $REV 개정판에서 $file 에 대한 객체 ID를 나열합니다. 이것은 출력에서 잘라내어 git-cat-file git-cat-object 라고 불리며 단순히 덤프합니다. 그 객체를 stdout .

참고 : Git 2.11 (Q4 2016)부터 git cat-file 출력에 콘텐츠 필터를 적용 할 수 있습니다.

참조 3,214,594 커밋 , 7bcf341 커밋 (2016 9월 9일)를 7bcf341 커밋 (2016 년 9 월 09), 및 b9e62f6 커밋 , 16dcc29 커밋 에 의해 (2016년 8월 24일를) 요하네스 Schindelin ( dscho ) .
(합병 : Junio C gitster - gitster-in commit 7889ed2 , 21 Sep 2016)

git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch

참고 : " git cat-file --textconv "는 최근 (2017)에 segfaulting을 시작했으며 Git 2.15 (2017 년 4 분기)에서 수정되었습니다.

Jeff King ( peff )의 commit cc0ea7c (2017 년 9 월 21 일)를 참조하십시오.
(Merged by Junio C gitster - gitster-in commit bfbc2fc , 28 Sep 2017)

출처 : https://stackoverflow.com/questions/610208/how-to-retrieve-a-single-file-from-a-specific-revision-in-git
728x90
반응형