단일 하위 폴더의 git-status를 얻는 방법은 무엇입니까?


81

내 저장소의 하위 폴더에서 git status를 수행하면 상위 폴더의 상태도 포함됩니다.

git-status를 특정 폴더로 제한하는 방법이 있습니까?


1
아니요, "git status." "../sibling"과 같은 형제 폴더 제공
EoghanM

트리의 다른 곳에서 변경 사항을 필터링하려는 이유에 대해 좀 더 컨텍스트를 제공 하시겠습니까? 이 기능을 어떤 상황에서 사용 하시겠습니까?
Greg Bacon

1
정상적인 "git status"명령에서 화면 전체에 해당하는 출력이있는 경우
EoghanM

답변:


100
git status .

현재 디렉터리 및 하위 디렉터리의 상태를 표시합니다.

예를 들어,이 트리에서 주어진 파일 (숫자) :

a/1
a/2
b/3
b/4
b/c/5
b/c/6

하위 디렉토리 "b" git status에서 전체 트리에 새 파일을 표시합니다.

% git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   ../a/1
#   new file:   ../a/2
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

그러나 git status ."b"이하의 파일 만 표시합니다.

% git status .
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

아래가 아닌이 하위 디렉토리 만

git status ."b"아래의 모든 파일을 재귀 적으로 표시합니다. "b"에있는 파일 만 표시하고 아래에는 표시하지 않으려면 파일 목록 만 (디렉토리 제외)에 전달해야 git status합니다. 셸에 따라 약간 이상합니다.

Zsh

zsh에서는 "glob 한정자"를 사용하여 일반 파일을 선택할 수 있습니다 (.). 예를 들면 :

% git status *(.)
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

세게 때리다

Bash에는 glob 한정자가 없지만 GNU find를 사용 하여 일반 파일을 선택한 다음 다음과 같이 전달할 수 있습니다 git status.

bash-3.2$ find . -type f -maxdepth 1 -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

이 사용 -maxdepthA는 GNU 찾아 확장합니다. POSIX의 발견은 없습니다 -maxdepth,하지만 당신은이 작업을 수행 할 수 있습니다

bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

2
이 답변으로 돌아가는 데 너무 오래 걸렸습니다. 간단하고 정확합니다! 내 질문에 이어 <pathspec>이 git 상태에 추가되었는지 궁금합니다.
EoghanM

.하위 폴더가 아닌 참조 하는 현재 폴더에만 관심이 있다면 어떨까요? 그것에 대한 해결 방법이 있습니까? 감사!
benjaminz

@benjaminz는 사용자의 용도에 따라 다릅니다. 예를 들어 (zsh의 경우) 파일을 선택하기 위해 쉘 글 로빙을 사용하지만 하위 디렉토리는 사용하지 않는 것과 같은 경우입니다 git status *(.). Bash는 파일 만 globbing하는 속기 방법이 없지만 확장 된 find예를 들어 find . -type f -maxdepth 1 -exec git status {} +. 항상 타이핑하기보다는 별칭이나 스크립트에 넣고 싶은 것과 같은 것 같습니다.
Matt Curtis

3

일부 배관 명령은 디렉토리를 매개 변수로 사용합니다.

git ls-files -t -o -m aDirectory

모든 파일이 변경되었지만 업데이트되지 않았거나 (스테이지에 추가되지 않음) 추적되지 않은 파일을 제공합니다. 그리고 그것은 디렉토리입니다.

이 스레드에 쓰여진 것처럼 git ls-files는 ' --added옵션을 지원하지 않습니다 .

더 근본적인 이유는 ls-files배관이 지수 에 관한 것이기 때문 입니다.
추가 된 것은 인덱스와 작업 트리 간의 비교 가 아닙니다 .
HEAD 커밋과 인덱스 사이에 있으며 ls-files plumbing에 속하지 않습니다.

따라서 여기에 언급 된 명령을 사용합니다 .

git diff-index --name-only -B -R -M -C HEAD src

추가되지 않은 파일과 추가 된 파일을 모두 제공합니다.

git diff-files --name-only -B -R -M -C src

추가되지 않은 파일 만 제공합니다. (다시 쓰기, 이름 변경, 복사 등을 감지하는 동안)

배관 명령에서 평소와 같이 일부 스크립팅이 순서대로 진행됩니다.)


3

불완전하지만 관심있는 디렉토리 내에서도 작동합니다.

git status | grep -v ' \.\./'

그러면 상대 경로에서 상향 참조가 필요한 모든 디렉토리가 숨겨집니다.

다른 쪽 끝에서 색상이 튀어 나오게하려면 다음 color.statusalways같이 설정 하십시오 .

git config color.status always

2
더 구체적인 것을 모르는 경우 grep이 항상 임시 솔루션을 제공하는 방법을 좋아합니다. 타코벨 프로그래밍을 응원합니다.
murftown 2011

이것은 훨씬 더 강력합니다!
benjaminz

2

git status마법의 단어 glob와 사용하여 pathspec을 제공하여 현재 디렉토리 (하위 폴더없이) 로 제한 할 수 있습니다 *:.

git status ':(glob)*'

이것은 훌륭하게 작동합니다! 정확히 내가 찾고 있던 것!
poindexter

1

내가 git을 시도했을 때 그렇게 할 방법을 찾지 못했습니다.

나는 결국 :

x@x:~/x$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       b
#       main/a
nothing added to commit but untracked files present (use "git add" to track)

x@x:~/x$ git status | grep main
#       main/a

이것은 내가 사용했던 방법입니다 ... 다음은 상태 표제도 가져옵니다. git status | grep "main \ | : \ $"... 불행히도 색상을 잃습니다.
EoghanM 2009-06-26

일반적인 glob 일치를 찾고있는이 질문을 보았습니다. 이것은 훨씬 쉽고 저에게 효과적입니다. 예를 들어 git status | grep extext가 확장입니다. 감사!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.