카테고리 보관물: Git

Git

저장소에 있지 않고 Git 명령을 실행하려면 어떻게해야합니까? 저장소에 대해 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 디자인 선택과 함께 평소처럼.


답변

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

내가 원했던 것은 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.


답변

모든 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


답변