[git] 하나의 명령으로 git root 디렉토리를 얻는 방법이 있습니까?

Mercurial은 루트 디렉토리 (.hg가 포함 된)를 인쇄하는 방법을 통해

hg root

git에 .git 디렉토리가 들어있는 디렉토리를 얻는 것과 동등한 것이 있습니까?



답변

예:

git rev-parse --show-toplevel

Git 명령을 더 직접 복제하려면 별명을 작성할 수 있습니다 .

git config --global alias.root 'rev-parse --show-toplevel'

이제 git root처럼 작동 hg root합니다.


참고 : 서브 모듈에서이 루트의 디렉토리가 표시됩니다 서브 모듈없는 부모 저장소를. Git> = 2.13 이상을 사용하는 경우 하위 모듈이 수퍼 프로젝트의 루트 디렉토리를 표시 할 수 있는 방법이 있습니다. 자식이 그보다 오래된 경우 다른 답변을 참조하십시오.


답변

man페이지 git-config(아래의 별칭 ) 말합니다 :

별명 확장 앞에 느낌표가 있으면 쉘 명령으로 취급됩니다. […] 쉘 명령은 저장소의 최상위 디렉토리에서 실행되며 반드시 현재 디렉토리 일 필요는 없습니다.

따라서 UNIX에서는 다음을 수행 할 수 있습니다.

git config --global --add alias.root '!pwd'


답변

했습니다 --show-toplevel최근에 추가 된 git rev-parse또는 왜 아무도 그것을 언급하지?

로부터 git rev-parse매뉴얼 페이지

   --show-toplevel
       Show the absolute path of the top-level directory.


답변

git rev-parse --git-dir“는 어떻습니까?

F:\prog\git\test\copyMerge\dirWithConflicts>git rev-parse --git-dir
F:/prog/git/test/copyMerge/.git

--git-dir옵션이 작동하는 것 같다.

에서 자식 레브 – 구문 분석 매뉴얼 페이지 :

--git-dir

    Show $GIT_DIR if defined else show the path to the .git directory.

git setup-sh스크립트 에서 실제로 작동하는 것을 볼 수 있습니다 .

Git> = 2.13 하위 모듈 폴더에 있다면 다음을 사용하십시오 .

git rev-parse --show-superproject-working-tree

당신이 사용하는 경우 git rev-parse --show-toplevel, 메이크업 확신이 망할 놈의 2.25+ (Q1 2020)가있다 .


답변

우리가 사용할 수 있도록 여기에 간단한 답변을 쓰려면

git root

작업을 수행하려면 간단히 다음을 사용하여 자식을 구성하십시오.

git config --global alias.root "rev-parse --show-toplevel"

그런 다음에 다음을 추가 할 수 있습니다 ~/.bashrc.

alias cdroot='cd $(git root)'

cdroot레포로 가기 위해 사용할 수 있습니다 .


답변

이미 최상위 레벨에 있거나 git 저장소에 없으면 cd $(git rev-parse --show-cdup)집으로 데려다 줄 것입니다 (cd). cd ./$(git rev-parse --show-cdup)그것을 고치는 한 가지 방법입니다.


답변

쉘 스크립트에서 사용하기 위해 현재 git root 디렉토리의 절대 경로를 계산하려면 readlink와 git rev-parse의 조합을 사용하십시오.

gitroot=$(readlink -f ./$(git rev-parse --show-cdup))

git-rev-parse --show-cdupcwd에서 루트에 도달 할 수있는 올바른 수의 “..”또는 루트에있는 경우 빈 문자열을 제공합니다. 그런 다음 “./”를 추가하여 빈 문자열 대소 문자를 처리 readlink -f하고 전체 경로로 변환하는 데 사용하십시오
.

git-root이 기술을 적용하기 위해 PATH에서 쉘 스크립트로 명령을 작성할 수도 있습니다 .

cat > ~/bin/git-root << EOF
#!/bin/sh -e
cdup=$(git rev-parse --show-cdup)
exec readlink -f ./$cdup
EOF
chmod 755 ~/bin/git-root

(위의 내용은 터미널에 붙여 넣어 git-root를 생성하고 실행 비트를 설정할 수 있습니다. 실제 스크립트는 2, 3, 4 행에 있습니다.)

그런 다음 git root현재 트리의 루트를 얻기 위해 실행할 수 있습니다 . 쉘 스크립트에서, “-e”를 사용하여 rev 구문 분석에 실패한 경우 쉘이 종료되도록하여 git 디렉토리에 있지 않은 경우 종료 상태 및 오류 메시지를 올바르게 얻을 수 있습니다.