저장소에 있지 않고 Git 명령을 실행하려면 어떻게해야합니까?
해당 저장소에 있지 않고 저장소에 대해 Git 명령을 실행하는 방법이 있습니까?
예를 들면 다음과 같습니다. git /home/repo log
?
저에게 말하지 마십시오 cd
. 나는 exec
전화 를 통해 이것을하고있다 .
시험:
git --git-dir=/home/repo/.git log
저장소의 .git 디렉토리까지 경로를 제공하는 것이 중요합니다. 그렇지 않으면 다음과 같은 오류 메시지 만 표시됩니다.
fatal: Not a git repository
사용 -C
옵션 ( docs ) :
git -C /home/repo log
이다 거의 동등 --git-dir
하고 --work-tree
보통의 추가없이 .git
폴더를
편집하다:
대답이 반대입니다 ... 엄밀히 말하면 이것이 질문에 대한 유일한 정답이기 때문에 놀랍습니다. 옵션 --git-dir
및 --work-tree
작업 트리 외부 저장소에 액세스하기 위해 존재하지, 그들은 이동하는 데 사용되는 .git
다른 곳을, 그리고 그들은 많은 경우에 사용하기에 복잡하고 있습니다.
예를 들어, 로그 /home/repo/subdir
만 얻으려면 다음을 수행하십시오 .
git -C /home/repo/subdir log .
또는
git -C /home/repo log subdir
사용할 수 없습니다 log .
와 --git-dir
나 --work-tree
. 작업 트리의 상단에 상대적인 하위 경로를 추출하기 위해 경로를 처리해야하며,이 경우에도 --
옵션을 사용하지 않으면 git이 경로로 인식하지 못 하므로 가능한 유일한 방법은 다음과 같습니다.
git --git-dir /home/repo/.git log -- subdir
또한 내 버전 (git 1.9.1) --work-tree
에서 log
하위 명령으로 전혀 작동하지 않습니다 . 무시됩니다.
git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir
나는 이것이 버그인지 기능인지 이해하지 못합니다.
사실 --git-dir과 --work-tree를 함께 사용해야합니다. 다음은 예입니다.
local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di
나는 여러 번 시도했다! 드디어 얻었다!
git -C dir --no-pager log --format='%an' -1 filename
.git을 추가하지 마십시오.
-C 디렉토리
이것은 @max의 대답과 비슷합니다. 불행히도 --git-dir은 필요한 작업을 수행하지 않았습니다. 편집 돌이켜 보면 내가 읽지 않은 또 다른 [이전] 대답은 --work-tree
. 환경이나 플래그를 사용하는 것이 더 적절한 지 확실하지 않으므로 누군가가 사용하는 경우를 대비하여 대답을 남겨 둘 것이지만 --work-tree
/ 사용으로 전환 할 것 --git-dir
입니다.
두 개의 저장소가 있는데, 하나는 다른 하나 안에 있지만 서브 모듈은 없습니다. 외부 저장소는이를 무시합니다.
tools (outer repo)
gcc/4.9.2 (inner repo)
What I wanted was the output of git rev-parse --show-prefix
relative to the outer repo. Here's what I came up with (bash syntax; split across lines for readability):
prefix_dir=$(cd ..; git rev-parse --show-toplevel)
prefix_dir=$(GIT_WORK_TREE=${prefix_dir} git rev-parse --show-prefix)
When executed from within 4.9.2 it produces the string gcc/4.9.2
.
'developer tip' 카테고리의 다른 글
이미지 높이와 너비를 정수 값으로 얻습니까? (0) | 2020.08.31 |
---|---|
onActivityResult ()가 조기에 호출되었습니다. (0) | 2020.08.31 |
부트 스트랩 드롭 다운 메뉴가 작동하지 않음 (0) | 2020.08.31 |
PHP에서 익명 함수를 즉시 실행하려면 어떻게해야합니까? (0) | 2020.08.30 |
Gdb는 stdout 대신 파일로 인쇄 (0) | 2020.08.30 |