sourcetip

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

fileupload 2023. 7. 7. 21:01
반응형

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

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

를 들어, 다음과 : 예를들것있이습다니같은과.git /home/repo log?

하지 말라고 하지 마세요.cd제가 지금 하고 있는 일입니다.exec콜.콜.

사용하다-C다음과 같은 첫 번째 인수로 사용:

git -C /home/repo log

문서에 따르면 이 결과는 다음과 같습니다.

-C <path>

git에서 합니다.<path>현재 작업 디렉터리 대신...

는 거의 다음과 같습니다.--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-dir /home/repo/.git log -- subdir

더나가아,,--work-tree에서는 서전혀않습다니지작과 함께 할 수 .log version 1과 하위 을 실행합니다.무시됩니다.

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=/home/repo/.git log

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

fatal: Not a git repository

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

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

또는 repo가 있는 지점을 확인하려는 경우:

git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/  rev-parse --abbrev-ref HEAD

이것은 @max의 대답과 비슷합니다.불행하게도, --git-dir는 제가 필요로 하는 것을 하지 못했습니다.편집 돌이켜보면, 읽지 않은 다른 [이전] 답변은 다음을 사용하여 제안되었습니다.--work-tree이 더 모르기 할 수 있는 를 대비하여 환이나플사확것더수적누지로없군므사가으수용할있경것전답대남사입다니할경환로으용변을하기여우겠지만비에는신할절한이래용그는를하▁use▁is▁to▁i▁inment▁or▁switching▁environ▁be것▁my▁finds'▁but전ll▁flags▁answer환입다니할환▁i경▁more▁in▁case로사▁using으▁someone▁i▁use용남▁so▁it▁appropri만지겠ate,기답을변--work-tree/--git-dir.


두 개의 저장소가 있습니다. 하나는 다른 하나는 내부에 있지만 하위 모듈은 아닙니다. 외부 저장소는 이를 무시합니다.

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

제가 원했던 것은 그 결과물이었습니다.git rev-parse --show-prefix외부 레포에 대한 상대적.다음은 제가 생각해 낸 것입니다(배시 구문, 가독성을 위해 여러 줄로 분할).

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.

언급URL : https://stackoverflow.com/questions/7149984/how-do-i-execute-a-git-command-without-being-in-the-repository

반응형