저장소에 있지 않고 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
'sourcetip' 카테고리의 다른 글
"git diff"를 할 때 어떻게 나란히 diff를 얻을 수 있습니까? (0) | 2023.07.07 |
---|---|
데이터 유형을 문자열로 변경하는 방법은 무엇입니까? (0) | 2023.07.07 |
Vuex에서 v-select의 기본값을 두 스토어에서 어떻게 선택합니까? (0) | 2023.07.07 |
ASP.NET에서 모든 브라우저에 대해 브라우저 캐싱 사용 안 함 (0) | 2023.07.07 |
mongo 데이터베이스 url에서 authSource는 무엇을 의미합니까? (0) | 2023.07.07 |