자식 디렉토리에없는 동안 자식 풀
/X/Y
git 저장소 인 디렉토리가 있다고 가정 해 봅시다 . git pull
inside 와 같은 명령을 호출 할 수는 /X
있지만 /X/Y
디렉토리를 대상으로 할 수 있습니까?
편집 : 나는 특별히 궁금한 것 같아요 : git 명령을 사용하여 디렉토리를 변경할 필요없이 이것을 할 수 있습니까?
참고 : 이전 옵션보다 훨씬 우아하기 때문에 VonC의 답변 을 수락 했습니다. 1.8.5보다 오래된 Git을 사용하는 사람들은 아래의 bstpierre의 답변을 참조하십시오 .
시작 자식 1.8.5 (Q4 2013) , 당신은 "하지만 디렉토리를 변경하지 않고도 망할 놈의 명령을 사용"할 수있을 것입니다.
"
make -C <directory>
" 와 마찬가지로 , "git -C <directory> ...
"는 Git에게 다른 일을하기 전에 그곳에 가라고 말한다 .
참조 44e1e4 커밋 에 의해 Nazri Ramliy :
현재 디렉토리를 떠나지 않고 다른 디렉토리에서 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
힘내 2.3.4 (3 월 2015 년), 그리고 이후 6a536e2을 투입 하여 KARTHIK 나약 ( KarthikNayak
) , git
"취급 git -C '<path>'
A와" 때 무 조작 <path>
비어 있습니다.
'
git -C ""
'는 오류 "Cannot change to ''
" 와 함께 도움이되지 않고 죽지 만, 쉘은 "" "를 no-op로 취급합니다.
쉘의 동작을 선례로 삼아git
-C "" '를 no-op로 취급하도록 가르치십시오 .
4 년 후, Git 2.23 (Q3 2019)에 ' git -C ""
'가 작동하고 디렉토리를 변경하지 않는 문서
6a536e2 이후로 동작했습니다. (
git
: 비어 있으면 "git -C '<path>'
"를 no-op로 처리하십시오<path>
, 2015-03-06, Git v2.3.4).
'
<path>
'가 있지만 비어있는 경우 (예 :)-C ""
현재 작업중인 디렉토리는 변경되지 않습니다.
편집 :
에 버그가 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)
.
자식 man 페이지는 어떤 변수들이 도움이 될 것처럼 보인다 ( "힘내 저장소"참조) 지정하지만 나는 그들이 (내 저장소에 / tmp를 / ggg2에) 잘 작동 할 수 없습니다 :
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가 / po 업데이트 인 동안 아래 명령을 실행하면 업데이트 된 파일이 작업 트리 / tmp / ggg2 대신 / tmp에 나타납니다.
GIT_DIR=/tmp/ggg2/.git git pull
and 질문 을 보여주는 유사한 질문에 대한이 답변을 참조하십시오 .--git-dir
--work-tree
bash 스크립트 또는 자식 별칭으로 래핑 할 수 있습니다.
cd /X/Y && git pull && cd -
이 게시물은 약간 낡았으므로 버그가있을 수 있으며 수정되었습니다.
git --work-tree=/X/Y --git-dir=/X/Y/.git pull origin branch
그리고 효과가있었습니다. 닷 파일과 부모 디렉토리가 필요하다는 것을 알기 위해 잠시 시간을 보냈습니다 (표준 설정에서는 항상 부모 / 자식이지만 모든 설정은 아니므로 명시 적으로 지정해야합니다.
내 서버 중 일부가 이전 Ubuntu LTS 버전에 있으므로 git을 최신 버전으로 쉽게 업그레이드 할 수 없습니다 (일부 답변에 설명 된 -C 옵션을 지원함).
이 트릭은 나를 위해 잘 작동합니다. 특히 시작한 곳과 다른 디렉토리에 다른 응답의 부작용이 없기 때문에 특히 효과적입니다.
pushd /X/Y
git pull
popd
또는 단일 라이너로 수행하십시오.
pushd /X/Y; git pull; popd
Linux와 Windows 모두 푸시 및 팝 명령을 수행했습니다.
다음과 같은 스크립트를 작성할 수 있습니다.
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
조합을 사용하여 pushd
, git pull
그리고 popd
우리가이 기능을 달성 할 수있다 :
pushd <path-to-git-repo> && git pull && popd
예를 들면 다음과 같습니다.
pushd "E:\Fake Directory\gitrepo" && git pull && popd
이것은 비슷한 문제 일 수 있지만 단순히 명령을 연결할 수도 있습니다. 예 :
한 줄에
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
'IT' 카테고리의 다른 글
jQuery : 텍스트로 요소 찾기 (0) | 2020.03.21 |
---|---|
Visual Studio가 다음 오류 바로 가기로 이동합니까? (0) | 2020.03.21 |
Android M-런타임 권한 확인-사용자가 "다시 묻지 않음"을 확인했는지 확인하는 방법은 무엇입니까? (0) | 2020.03.21 |
부모 확장 (0) | 2020.03.21 |
첫 번째 직계 자녀만을위한 CSS 선택기가 있습니까? (0) | 2020.03.21 |