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

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

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



답변

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


답변

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

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

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

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


답변

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

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

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

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

git config color.status always


답변

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

git status ':(glob)*'


답변

내가 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


답변

cd YOUR_REQUIRED_DIRECTORY,
git status.


답변