모든 하위 디렉터리에 대해 git 풀 실행
git 합니까?cd
각 리포의 루트 디렉토리에 접속할 수 있습니까?아래는 모두 개별 git 저장소(서브모듈이 아님)입니다.
/plugins/cms
/plugins/admin
/plugins/chart
한 번에 업데이트하거나 최소한 현재 워크플로우를 단순화할 수 있습니다.
cd ~/plugins/admin
git pull origin master
cd ../chart
git pull
기타.
디렉토리에서 합니다.plugins
에러:
find . -type d -depth 1 -exec git --git-dir={}/.git --work-tree=$PWD/{} pull origin master \;
명확히 하기 위해:
find .
는, 합니다.-type d
이 아닌 검색하다-depth 1
의 서브디렉토리1의 는, 「」를 참조해 주세요.-exec {} \;
는 검색마다 합니다.git --git-dir={}/.git --work-tree=$PWD/{} pull
.
find를 기기기 to to to to to to를 사용하는 것을 합니다.echo
후에-exec
예를 들어 다음과 같습니다.
find . -type d -depth 1 -exec echo git --git-dir={}/.git --work-tree=$PWD/{} status \;
★★의 :-depth 1
을 사용할 수 . 사용해보십시오. 시도해 보십시오.-mindepth 1 -maxdepth 1
.
ls | xargs -I{} git -C {} pull
병렬로 하려면:
ls | xargs -P10 -I{} git -C {} pull
Leo의 솔루션보다 조금 더 낮은 기술:
for i in */.git; do ( echo $i; cd $i/..; git pull; ); done
그러면 작업 디렉토리에 있는 모든 Git 저장소가 업데이트됩니다.명시적으로 이름(cms, "admin", "chart")을 나열할 필요가 없습니다.cd 명령어는 서브셸에만 영향을 줍니다(괄호 사용).
에는 git repo를 실, 약, rep, 장, 장, 장, 장, 장, 장, 장, 장, 장, 장, 장, 은, 은, 은, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, actually, find
다음 중 하나:
find . -type d -name .git -exec git --git-dir={} --work-tree=$PWD/{}/.. pull origin master \;
PowerShell은 다음과 같습니다.
Get-ChildItem -Recurse -Directory -Hidden -Filter .git | ForEach-Object { & git --git-dir="$($_.FullName)" --work-tree="$(Split-Path $_.FullName -Parent)" pull origin master }
이거 쓰겠습니다.
find . -name ".git" -type d | sed 's/\/.git//' | xargs -P10 -I{} git -C {} pull
유니버설:현재 디렉토리 아래에 있는 모든 git 저장소를 업데이트합니다.
상위 5개의 답변 중 어느 것도 나에게 효과가 없었고, 그 질문은 디렉토리에 관한 것이었다.
이것은 효과가 있었다:
for d in *; do pushd $d && git pull && popd; done
cms, admin 및 차트가 모두 저장소의 일부인 경우 이 작업은 자동으로 수행됩니다.
이러한 플러그인이 각각 git 서브모듈이라는 문제가 있을 수 있습니다.
실행합니다.git help submodule
자세한 정보는.
편집
bash에서 이 작업을 수행하는 경우:
cd plugins
for f in cms admin chart
do
cd $f && git pull origin master && cd ..
done
mr
유틸리티(일명.k.a., )는 이 문제에 대한 뛰어난 해결책을 제공합니다.마음에 드는 패키지 매니저를 사용하여 설치하거나mr
기투브에서 직접 대본을 써서 넣다$HOME/bin
다른 수도 있고PATH
cd
plugins
는 폴더를 """를 ..mrconfig
음음음음을을필필필필필필필필을을을을을을URL))
# File: .mrconfig
[cms]
checkout = git clone 'https://<username>@github.com/<username>/cms' 'cms'
[admin]
checkout = git clone 'https://<username>@github.com/<username>/admin' 'admin'
[chart]
checkout = git clone 'https://<username>@github.com/<username>/chart' 'chart'
다음에 '아, 아, 아, 아, 아, 아, 아, 아, 하다'를 실행하면 됩니다.mr up
최고위층부터plugins
각 저장소에서 업데이트를 가져올 폴더입니다(대상 작업 복사본이 아직 존재하지 않는 경우 초기 복제도 수행됩니다).실행할 수 있는 기타 명령어는 다음과 같습니다.mr st
,mr push
,mr log
,mr diff
, etc: 실행mr help
가능한 것을 찾아보세요.이 있습니다.mr run
에서 직접 지원되지 않는 VCS 명령에 액세스할 수 있도록 하는 패스스루 역할을 하는 명령어mr
그 자체(예:mr run git tag STAGING_081220015
또한 모든 저장소를 대상으로 셸 스크립트의 임의의 비트를 실행하는 커스텀명령어를 작성할 수도 있습니다.
mr
는 여러 저장소를 처리하는 데 매우 유용한 도구입니다.그 이후로는plugins
폴더는 홈디렉토리에 있습니다.에 관심이 있을 수도 있습니다.와 함께mr
모든 컨피규레이션파일을 관리하기 위한 강력한 메커니즘을 제공합니다.개요에 대해서는, 토마스 페리스 니콜라이센의 블로그 투고를 참조해 주세요.
모든 서브디어가 git 저장소라고 가정하는 가장 콤팩트한 방법:
ls | parallel git -C {} pull
라고 하는 나의 겸손한 구조
- 에 현재 경로를 나타냅니다(python을 사용하면 편리하고 기능합니다.파일 전체 경로를 얻는 방법 참조).
- 직접 찾다
.git
subfolder(서브폴더): 비서브폴더에서 git 명령어를 내보낼 가능성이 낮다. - 몇 가지 경고를 없애다
find
다음과 같습니다.
find . \
-maxdepth 2 -type d \
-name ".git" \
-execdir python -c 'import os; print(os.path.abspath("."))' \; \
-execdir git pull \;
물론 다른 git 명령어를 추가할 수도 있습니다.-execdir
에서 "display"find
예를 들어 브랜치를 표시합니다.
find . \
-maxdepth 2 -type d \
-name ".git" \
-execdir python -c 'import os; print(os.path.abspath("."))' \; \
-execdir git branch \;
-execdir git pull \;
이거 드셔보세요
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;
또한 & & 인수를 하나 더 추가하여 맞춤 출력을 추가할 수 있습니다.
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull && git status" \;
gitfox
는 모든 입니다.
npm install gitfox -g
g pull
몇 가지 코멘트와 답변의 포인트를 정리했습니다.
find . -maxdepth 1 -type d -name .git -execdir git pull \;
나는 이것을 사용한다.
for dir in $(find . -name ".git")
do cd ${dir%/*}
echo $PWD
git pull
echo ""
cd - > /dev/null
done
2010년 오리지널 답변:
이들 디렉토리가 모두 별도의 git repo일 경우 서브모듈로 참조해야 합니다.
'이 '원점이 '원점'이죠.plugins
는 하위 대한 하고 있습니다.cms
, ' , 'admin
, ' , 'chart
A git pull
에 '아예'가 붙습니다.git submodule update
을 사용하다
2016년 1월 갱신:
2(2016년에서는 Git 2.8(2016년 1월)과 수 .git fetch --recurse-submodules -j2
.
"git clone --recursive를 사용하여 git 서브모듈 다운로드 속도를 높이거나 병렬화하는 방법"을 참조하십시오.
git 저장소가 있는 서브디어가 많으면 병행 사용 가능
ls | parallel -I{} -j100 '
if [ -d {}/.git ]; then
echo Pulling {}
git -C {} pull > /dev/null && echo "pulled" || echo "error :("
else
echo {} is not a .git directory
fi
'
언급URL : https://stackoverflow.com/questions/3497123/run-git-pull-over-all-subdirectories
'programing' 카테고리의 다른 글
MVVM을 사용하여 WPF ListView 항목에서 더블 클릭 이벤트 실행 (0) | 2023.04.11 |
---|---|
EPplus를 사용한 Excel 문서 열기 (0) | 2023.04.11 |
WPF에서 x:Name 속성과 Name 속성의 차이점은 무엇입니까? (0) | 2023.04.11 |
웹 양식 필드/입력 태그에서 브라우저 자동 완성을 해제하려면 어떻게 해야 합니까? (0) | 2023.04.11 |
Windows 7, 64비트, DLL 문제 (0) | 2023.04.11 |