[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-cdup
cwd에서 루트에 도달 할 수있는 올바른 수의 “..”또는 루트에있는 경우 빈 문자열을 제공합니다. 그런 다음 “./”를 추가하여 빈 문자열 대소 문자를 처리 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 디렉토리에 있지 않은 경우 종료 상태 및 오류 메시지를 올바르게 얻을 수 있습니다.