현재 작업 디렉토리가 아닌 디렉토리가 git 작업 트리에 있는지 확인하는 방법은 무엇입니까?

현재 작업 디렉토리가 아닌 디렉토리가 git 작업 트리에 있는지 확인하는 방법은 무엇입니까?

현재 디렉터리가 다음과 같은지 테스트할 수 있습니다.

[[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] && echo yes

..하지만 현재 작업 디렉토리가 아닌 디렉토리에서 동일한 작업을 어떻게 수행합니까?

답변1

그냥 사용-C글로벌 옵션git. 이렇게 하고 코드를 단순화하세요(반환 상태에 직접 인코딩된 정보를 재구성하기 위해 출력을 구문 분석하는 이유는 무엇입니까?).

directory=. # or wherever
if git -C "$directory" rev-parse --is-inside-work-tree >/dev/null 2>/dev/null; then
  echo yes
fi

답변2

가장 쉬운 옵션은 일시적으로 디렉토리로 변경하는 것입니다.

(cd /path/to/target && [[ $(git rev-parse --is-inside-work-tree) == true ]]) 2> /dev/null && echo yes

답변3

대상 디렉터리로 이동하고 거기에서 명령을 실행하고 결과를 반환하는 함수를 사용하여 이 작업을 수행하겠습니다.

isGitDIr(){
    for dir in "$@"; do
    ( 
        cd "$dir" || return
        [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] && 
        echo "yes"
    )
    done
}

괄호로 인해 명령이 하위 쉘에서 실행되므로 함수가 완료될 때 상위 쉘의 디렉토리가 변경되지 않습니다. 이러한 줄을 셸의 초기화 파일(예: ~/.bashrc)에 추가하거나 터미널에 직접 붙여넣으면 다음을 수행할 수 있습니다.

isGitDIr /path

관련 정보