git 디렉터리에 없는 동안 git pull
제가 목록을 가지고 있다고 가정해 보겠습니다./X/Y
깃 저장소입니다.어떻게든 다음과 같은 명령을 호출하는 것이 가능합니까?git pull
안쪽에서/X
하지만 타겟팅은/X/Y
디렉토리?
편집: 특히 궁금했던 것 같습니다. agit 명령을 사용하여 디렉토리를 변경하지 않고도 이 작업을 수행할 수 있습니까?
참고: VonC의 답변은 이전 옵션보다 훨씬 우아하기 때문에 수락했습니다.1.8.5 이전 버전의 Git를 실행하는 사람들은 아래의 bstpierre의 답변을 참조하십시오.
Git 1.8.5(2013년 4분기)부터는 "디렉토리를 변경할 필요 없이 Git 명령을 사용"할 수 있습니다.
마치 "처럼.
make -C <directory>
"는 Git에게 다른 일을 하기 전에 그곳에 가라고 말합니다.git -C <directory> ...
Nazri Ramliy의 commit 44e1e4를 참조하십시오.
현재 디렉터리를 떠나지 않고 다른 디렉터리에서 Git 명령을 호출하려면 키를 더 많이 눌러야 합니다.
(cd ~/foo && git status)
git --git-dir=~/foo/.git --work-tree=~/foo status
GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status(cd ../..; git grep foo)
for d in d1 d2 d3; do (cd $d && git svn rebase); done
위에 표시된 방법은 스크립팅에 사용할 수 있지만 빠른 명령줄 호출에는 너무 번거롭습니다.
이 새로운 옵션을 사용하면 적은 키 입력으로 위 작업을 수행할 수 있습니다.
git -C ~/foo status
git -C ../.. grep foo
for d in d1 d2 d3; do git -C $d svn rebase; done
Git 2.3.4(2015년 3월) 이후, 그리고 Karthik Nayak에 KarthikNayak
의해 6a536e2를 커밋().git
치료할 것입니다.git -C '<path>'
비어 있을 때는 절대로 안 됩니다.
'
git -C ""
오류와 함께 도움이 되지 않는 죽음"Cannot change to ''
반면에 셸은 CD """를 노옵으로 취급합니다.
포탄의 행동을 선례로 삼아, 가르칩니다.git
또한 -C """를 노옵으로 취급합니다.
4년 후 Git 2.23(2019년 3분기)은 다음과 같이 문서화합니다.git -C ""
작동하고 디렉터리를 변경하지 않음
6a536e2부터 그렇게 행동하고 있습니다.
git
치료 "git -C '<path>'
할 때는 절대로<path>
는 비어 있습니다(2015-03-06, Git v2.3.4).
'인 경우
<path>
존재하지만 비어 있습니다(예:-C ""
그러면 현재 작업 디렉터리가 변경되지 않은 상태로 유지됩니다.
보다시피git -C
예를 들어 Git 2.26(2020년 1분기)과 함께 사용됩니다.
커밋 b44171717, 커밋 9291e63, 커밋 5236fce, 커밋 10812c2, 커밋 62d58cd, 커밋 b87b02c, 커밋 9b92070, 커밋 3595d10, 커밋 f511bc0, 커밋 f6041ab, 커밋 f46c243, 커밋 99c049b, 커밋 3738439, 커밋 7717242, 커밋 b8af90(2019년 12월 20일)을 참조.Denton-L
(주니오 C 하마노에 의해 합병 -- -- 커밋 381e8e9, 2020년 2월 5일)
t1507
인라인의full_name()
사인 오프 바이: 덴튼 리우
전에, 우리는 달리고 있었습니다.
test_must_fail full_name
.만지하,test_must_fail
명령에만 .git 령명사합니야다용해만.
인인full_name()
우리가 사용할 수 있도록.test_must_fail
에서.git
직접 지휘하다때
full_name()
28fb84382b에 도입되었습니다("도입<branch>@{upstream}
표기법", 2009-09-10, Git v1.7.0-rc0 -- 병합),git -C
44e1e4d67d에 도입된 이후로 아직 옵션을 사용할 수 없었습니다("git
-C 옵션", 2013-09-09, Git v1.8.5-rc0 -- 일괄 #5)에 나열된 디렉토리에서 실행합니다.
은 수동으로 작업할 필요가 없어졌습니다.cd
매번.하지만, 그 이후로git -C
할 수 . . 대신에 인라인으로 사용할 수 있습니다.full_name()
.
편집:
에 버그가 있거나 있습니다.git pull
또는 해당 명령으로 수행하려는 작업을 수행할 수 없습니다.그러나 가져오기 및 병합을 사용하여 이 작업을 수행할 수 있습니다.
cd /X
git --git-dir=/X/Y/.git fetch
git --git-dir=/X/Y/.git --work-tree=/X/Y merge origin/master
원답:
bash 또는 유사한 작업을 수행하고 있다고 가정하면 다음 작업을 수행할 수 있습니다.(cd /X/Y; git pull)
.
gitman 페이지에 도움이 될 것 같은 몇 가지 변수("git 저장소" 참조)가 지정되어 있지만 올바르게 작동할 수 없습니다(/tmp/gg2에 있는 저장소 사용).
GIT_WORK_TREE=/tmp/ggg2 GIT_DIR=/tmp/ggg2/.git git pull
fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
cwd가 /tmp인 상태에서 아래 명령을 실행하면 repo가 업데이트되지만 업데이트된 파일이 작업 트리 /tmp/gg2가 아닌 /tmp에 표시됩니다.
GIT_DIR=/tmp/ggg2/.git git pull
또한 유사한 질문에 대한 이 답변을 참조하십시오. 이 답변은 다음과 같습니다.--git-dir
그리고.--work-tree
깃발들
bash 스크립트 또는 git 별칭으로 래핑할 수 있습니다.
cd /X/Y && git pull && cd -
이 게시물은 조금 오래되어 버그가 있을 수 있고 수정되었지만, 저는 그냥 이렇게 했습니다.
git --work-tree=/X/Y --git-dir=/X/Y/.git pull origin branch
그리고 그것은 성공하였다.도트 파일과 상위 디렉터리(표준 설정에서는 항상 상위/하위이지만 모든 설정에서는 그렇지 않으므로 명시적으로 지정해야 함)를 확인하는 데 1분이 걸렸습니다.
일부 서버가 이전 Ubuntu LTS 버전이기 때문에 Git를 최신 버전(일부 답변에 설명된 대로 -C 옵션을 지원함)으로 쉽게 업그레이드할 수 없습니다.
이 방법은 특히 시작한 디렉터리와 다른 디렉터리에 있는 다른 대답의 부작용이 없기 때문에 저에게 효과적입니다.
pushd /X/Y
git pull
popd
또는 원라이너로 수행:
pushd /X/Y; git pull; popd
Linux 및 Windows에는 pushd 및 popd 명령이 있습니다.
사용하기pushd
,git pull
그리고.popd
다음과 같은 기능을 수행할 수 있습니다.
pushd <path-to-git-repo> && git pull && popd
예:
pushd "E:\Fake Directory\gitrepo" && git pull && popd
다음과 같은 스크립트를 작성할 수 있습니다.
cd /X/Y
git pull
당신은 그것을 다음과 같은 이름으로 지을 수 있습니다.gitpull
.
만약 당신이 그것이 대신 임의의 디렉토리를 하도록 하고 싶다면./X/Y
:
cd $1
git pull
그럼 그걸로 전화하시면 됩니다.gitpull /X/Z
마지막으로 리포지토리를 찾아 볼 수 있습니다.나는 있습니다~/git
리포지토리가 들어 있는 폴더이며, 이 폴더를 사용하여 모든 리포지토리를 풀링할 수 있습니다.
g=`find /X -name .git`
for repo in ${g[@]}
do
cd ${repo}
cd ..
git pull
done
원격 서버에서 Drush(Drupal Shell) 명령을 통해 이 작업을 수행하려고 했던 저와 같은 사용자는 작업 디렉토리에 CD를 저장해야 하는 솔루션을 사용할 수 없습니다.
대신 풀을 가져오기 및 병합으로 분할하는 솔루션을 사용해야 합니다.
drush @remote exec git --git-dir=/REPO/PATH --work-tree=/REPO/WORKDIR-PATH fetch origin
drush @remote exec git --git-dir=/REPO/PATH --work-tree=/REPO/WORKDIR-PATH merge origin/branch
이는 유사한 문제일 수도 있지만 명령을 체인으로 연결할 수도 있습니다.예를 들어
한 줄로
cd ~/Sites/yourdir/web;git pull origin master
또는 SSH를 통해.
ssh username@atyourserver.com -t "cd ~/Sites/thedir/web;git pull origin master"
언급URL : https://stackoverflow.com/questions/5083224/git-pull-while-not-in-a-git-directory
'programing' 카테고리의 다른 글
Git Cherry-pick vs 병합 워크플로우 (0) | 2023.05.14 |
---|---|
"instantiated"와 "initialized"의 차이는 무엇입니까? (0) | 2023.05.14 |
지난 10일의 날짜가 포함된 기록을 나열하는 방법은 무엇입니까? (0) | 2023.05.14 |
절인 개체를 로드할 수 없습니다. (0) | 2023.05.14 |
C# 또는 . 최악의 gotchain입니다.NET? (0) | 2023.05.14 |