저장소에 있지 않고 Git 명령을 실행하려면 어떻게해야합니까?


131

해당 저장소에 있지 않고 저장소에 대해 Git 명령을 실행할 수있는 방법이 있습니까?

예를 들면 다음과 같습니다. git /home/repo log?

저에게 말하지 마십시오 cd. 나는 exec전화 를 통해 이것을하고있다 .


3
"cd / home / repo && git log"를 exec 호출로 사용할 수 없습니까?
Alex Howansky 2011-08-22

나는 그것에 이상한 문제가 있습니다. 나는 새로운 프로세스를 시작하고 있지만 실제로는 임원이 아니지만 어떻게 다른지 잘 모르겠습니다. git 디렉토리를 지정하는 매개 변수를 찾는 것이 더 쉽습니다.
Tower



1
자식 --git-DIR = / 가정 / REPO / .git 로그
Atiq 우르 레흐만

답변:


102

시험:

git --git-dir=/home/repo/.git log

저장소의 .git 디렉토리까지 경로를 제공하는 것이 중요합니다. 그렇지 않으면 다음과 같은 오류 메시지 만 표시됩니다.

fatal: Not a git repository

2
나는 계속 fatal: Not a git repository (or any of the parent directories): .git. @ 패트릭 나는 아무것도 아래로 투표하지 않았습니까?
Tower

3
@Patrick 답변이 편집되었습니다 (원래 --work-dir생각한다고 말
Gareth

1
커밋의 모든 파일이 삭제 된 것으로 표시 되었기 때문에 이것은 나를 위해 작동하지 않았습니다. 커밋은 확인하지만 폴더 내용은 확인하지 않는 것 같습니다. 더 나은 성능을 위해 @calandoa의 답변을 참조하십시오.
mxcd

2
최신 git을 사용하여 나를 위해 작동하지 않았지만 -C 옵션을 사용하면 작동했습니다. 예 : git -C /home/repo/.git log
D.Snap

1
이것은 실제로 po 예상대로 작동하지 않았습니다. 왜 이것이 허용되는 대답입니까? 이것은 현재 디렉토리를 작업 트리로 사용하고 지정된 .git을 히스토리로 사용합니다. 이것은 완전히 잘못된 것입니다. 예를 들어 로그 만 표시하지 않는 경우 git status. -C올바른 방법입니다.
Wang

218

사용 -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 디자인 선택과 함께 평소처럼.


추가 설명을 추가해 주셔서 감사합니다.
Erick G. Hagstrom

git stash실패한 경우 부속의 또 다른 예 --git-dir--work-tree사용된다.
d5ve

4
-C 옵션은 2013 년 출시 된 자식의 버전 1.8.5에서 추가되었다
d5ve

-C는 나를 위해 --git-dir보다 더 잘 작동했습니다 ... -C는 저장소에 대한 git 구성 설정을 존중합니다. git 버전 1.9.5.msysgit.1 실행 중
Straff

우리는 항상 루트에서 위치를 지정해야합니까 @calandoa의 REPO의 이름은 우리가이 코드에 넣어 어떻게 여러 단어를 포함하는 한 가지 더 있다면
Kasun Siyambalapitiya을

17

사실 --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

1
이것은 --git-dir 단독으로 대답하는 것보다 더 정확합니다. git-scm.com/blog/2010/04/11/environment.html
에릭 G. Hagstrom

11

나는 여러 번 시도했다! 드디어 얻었다!

git -C dir --no-pager log --format='%an' -1 filename

.git을 추가하지 마십시오.

-C 디렉토리


3

이것은 @max의 대답과 비슷합니다. 불행히도 --git-dir은 내가 필요한 것을하지 않았습니다. 편집 돌이켜 보면 내가 제안 읽기하지 않은 다른 [이전] 대답은 사용 --work-tree. 환경이나 플래그를 사용하는 것이 더 적절한 지 확실하지 않으므로 누군가가 사용하는 경우에 대비하여 대답을 남겨 둘 것이지만 --work-tree/ 사용으로 전환 할 것 --git-dir입니다.


두 개의 저장소가 있는데 하나는 다른 하나 안에 있지만 서브 모듈은 없습니다. 외부 저장소는이를 무시합니다.

tools (outer repo)
  gcc/4.9.2 (inner repo)

내가 원했던 것은 git rev-parse --show-prefix외부 저장소 와 관련된 출력이었습니다 . 다음은 내가 생각 해낸 것입니다 (bash 구문, 가독성을 위해 여러 줄로 분할).

prefix_dir=$(cd ..; git rev-parse --show-toplevel)
prefix_dir=$(GIT_WORK_TREE=${prefix_dir} git rev-parse --show-prefix)

4.9.2 내에서 실행되면 문자열을 생성합니다 gcc/4.9.2.


1

모든 git 명령에 대해 다음을 수행 할 수 있습니다.

git --git-dir=<PATH-TO-REPO>/.git --work-tree=<PATH-TO-REPO> <git-command>

예를 들어, git 상태를 수행하려면 다음을 수행하십시오.

 git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/  status

또는 분기를 확인하려는 경우 저장소가 있습니다.

git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/  rev-parse --abbrev-ref HEAD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.