VCS (Git, Mercurial, SVN)를 기반으로 디렉토리로 정렬 된 저장소 세트가 있습니다. Subversion을 사용하면 svn update *
부모 디렉토리에서 실행할 수 있었고 각 디렉토리를 반복하고 각 저장소를 예상대로 업데이트합니다. Git 또는 Mercurial의 경우에는 해당되지 않습니다.
내가 디렉토리를 통해 하나 정확히, 루프를 수행하기 위해 실행할 수있는 bash는 스크립트를 마련하려는 git pull
또는 hg pull
각. 나는 bash 스크립팅 경험이별로 없다.
답변
for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
답변
재귀 적이어야하는 경우 :
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;
이것은 현재 디렉토리 아래의 모든 디렉토리로 내려 가고 .git 디렉토리가있는 하위 디렉토리에 대해 git pull을 수행합니다 (으로 제한 할 수 있음 -maxdepth
).
답변
GNU Parallel http : // www.gnu.org/software/parallel/을 설치 한 경우 다음을 수행 할 수 있습니다.
cd ~/projects/git/; ls | parallel 'cd {} && git pull'
이것은 병렬로 실행되므로 일부 git 서버의 네트워크 연결이 느리면 속도가 빨라질 수 있습니다.
자세한 내용은 GNU Parallel 소개 비디오를 참조하십시오 .
http://www.youtube.com/watch?v=OpaiGYxkSuQ
답변
이 작동합니다
find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
답변
그것을 할 수있는 재귀 사용하지 않고 find
있지만,forloop
for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done