힘내-현재 소스 제어하에있는 모든 파일을 나열합니까?


121

현재 git에서 소스 제어중인 모든 파일을 나열하는 방법이 있습니까? (수정 된 것만이 아닙니다).

답변:


128

특정 브랜치에 대한 모든 파일을 나열하려면 다음과 같이하십시오 master.

자식 ls-tree -r master-이름 만

-r옵션을 사용하면 하위 디렉토리로 돌아가서 현재 버전 관리중인 각 파일을 인쇄 할 수 있습니다. 다른 분기의 목록을 가져 오는 HEAD대신 지정할 master수도 있습니다.

존재하는 모든 파일 목록을 얻으려면 여기를 참조하십시오 .

자식 로그 --pretty = format : --name-only --diff-filter = A | 정렬 -u

1
고마워요 slhck, 정확히 내가 무엇을했는지-두 번째 것에 대해서도 아는 것이 좋습니다. 허용되면 5 분 30 초 안에 올바른 것으로 표시됩니다. :-)
Anonymous

3
답변 해주셔서 감사합니다. 나는 이것을 찾고 있었다. 참고 git ls-tree -r master --name-only를 필요로하지 않고, 첫 번째 옵션과 동일 할 것입니다 cut. 아, 현재있는 지점에 대해이 목록을 원한다면 HEAD대신 지정할 수 있습니다 master.
maurits

6
"git ls-files"를 실행하면 몇 글자를 절약 할 수 있습니다 :)
Zain R

결말이 주어진 이유는 무엇 -입니까? 추가 행이 일부 파일을 두 번째 열에 표시하며 첫 번째부터 반복됩니다.
Adrian

@Adrian 모릅니다. 복사하여 붙여 넣은 다음 지금 수정했습니다.
slhck

59

git ls-files명령은 당신이 필요로 할 것입니다.

출처 : http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


4
git ls-files대신에 git ls-tree -r master --name-only확실히 더 간단합니다.
karatedog

1
죄송하지만 편집 내용이 유효하지 않습니다. 현재 자식에는 git-ls-files바이너리 가 없습니다 . 이 명령 에는 git바이너리가 ls-files있습니다. 설명서에 대한 링크는 내용이 정확하지만 기술적으로 오래된 바이너리에 대한 것입니다.
JonnyJD

@JonnyJD, 편집 내용이 주석이어야하므로 유효하지 않은 것으로 표시 될 수 있습니다.
Ascherer

1
@JonnyJD 모든 망할 놈의 인간이 페이지는 다음과 같이 명명 된 git-commit, git-init, git-ls-files, 등의 프로그램이 실제로 하위 명령에도 불구하고. git-ls-files바이너리 는 없었습니다 . 그 이유는 바이너리 git foo를 작성하여 명령 을 등록 할 수있는 외부 하위 명령 메커니즘과 일치하기 때문 git-foo입니다.
라돈 로스 버러

4

git ls-files 현재 작업 디렉토리의 파일 만 인쇄합니다.

예를 들어 dotfiles ( core.worktree = /)에 대한 git repo 가있는 경우 git root 외부에 파일이 있으며 간단한 명령이 더 이상 작동하지 않습니다.

요컨대, 이것은 작동합니다 :

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

예:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

현재 (쉘) 디렉토리를 기준으로 경로를 지정 하려면 다음 작업을 수행하십시오.

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

위의 예에서는

README
../../../etc/ssh/sshd_config

git v2.21에서는 git ls-files현재 디렉토리와 그 아래에 모두 표시됩니다. 리포지토리에서 삭제 된 파일은 표시되지 않습니다.
Adrian

0

gitk대화식 저장소 뷰어를 사용할 수도 있습니다 .


1
이것은 도구를 언급하지만 실제로 "어떻게"에 대답하지는 않습니다. 이것을 실용적인 솔루션으로 확장 할 수 있습니까? 자신의 솔루션을 개발하기 위해 연구 방향으로 누군가를 지적하는 것이 주석으로 더 적합합니다. 감사. 에서 검토
fixer1234

-2

스크린 샷

이미지를 살펴보십시오. 오른쪽에는 패치와 트리의 두 가지 옵션이 있습니다. 트리를 선택하면 각 커밋에 대한 폴더 구조를 볼 수 있습니다.


더 많은 검열을 할 필요가 없도록 스크린 샷에 대한 더 나은 약속을 고려하십시오.
Thorbjørn Ravn Andersen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.