Git의 모든 개정판에 대한 모든 파일을 나열하는 방법 (예 : Mercurial의 hg manifest --all)?


10

Mercurial에는 리포지토리에있는 모든 파일에 대한 모든 파일을 나열하는 명령이 있습니다.

hg manifest --all

Git에 동등한 명령이 있습니까?


git log --stat와 같은 것?
jmreicha

4
git ls-files?
NN

궁금한 점이 있다면 어떤 이유가 필요합니까?
Stephen Jennings

@StephenJennings : 정신적으로 " ls -R빼기 .gitignore"를 수행하는 것보다 버전 제어하에 어떤 종류의 파일이 있는지 알 수있는 더 좋은 방법 입니다. 일반적으로 유용함 : 무슨 일이 일어나고 있는지 알 수 있지만, 저장소를 살펴보면 자신 이 알고있는 한 가지 확신갖게 됩니다. 특히 초보 사용자에게는 이러한 자신감이 프로그램 사용의 즐거움에 큰 차이를 만듭니다. Git은 사용자를 안심시키는 것을 우선시하지 않기 때문에 많은 사람들이 그것을 배울 때까지 이해하기를 싫어합니다.
Esteis

답변:


3

나는 쉘 스크립트에 절대적으로 끔찍하기 때문에 이것이 가장 차선책이지만, bash를 사용한다고 가정하면 이런 종류의 일이 당신을 위해 할 수 있습니다. 다른 누군가가 와서 정리하거나 더 나은 것으로 대체하기를 바랍니다. Mac에서만 테스트 했으므로주의하십시오.

현재 HEAD의 조상 인 커밋의 모든 파일을 인쇄해야합니다. manifest.sh경로의 어딘가에 파일로 저장하십시오 .

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE

1
할 필요가 없습니다 export가 자식 프로세스에서 사용할 수 필요가 없기 때문에. 루프가 SHA 해시를 초과하면 루프가 정상적으로 작동합니다. 그렇지 않으면 read변수를 사용 하고 인용하는 것이 더 좋습니다. 무엇 sort을하는 -u옵션 uniq이 있습니다. rm도중에 취소하면 파일이 d 가되지 않으므로 a가 필요 trap하지만이 스크립트에는 과도합니다.
Daniel Beck

@DanielBeck : 감사합니다. 약간 업데이트했습니다. mktempGit Bash에는 존재하지 않으므로 Windows도 재생할 수 있도록 처리하는 방법을 찾아야합니다.
Stephen Jennings
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.