나중에 추가할 수 있는 스크립트를 작성하려고 합니다. 기본적으로 내 홈 디렉토리는 git 저장소 모음으로 가득 차 있습니다. 해당 위치의 마스터 목록을 유지한 다음 모든 위치를 통해 스크립트를 실행하고 명령 git up
등 을 실행하고 싶습니다 git pull
.
cd
업데이트를 위해 모든 것을 혼자서 처리 해야 하는 것에 지쳤습니다 . 한 번에 모든 작업을 수행하고 싶지만 배치에 대한 운율이나 이유가 없으며 일부 스크립트 작업을 수용하기 위해 홈 폴더 트리를 재구성할 필요가 없습니다.
시간이 지남에 따라 필요에 따라 파일 시작 부분에 더 많은 디렉터리를 추가할 수 있는 구성과 유사한 구성 파일이 있어서 매우 기쁩니다.
편집하다:
제가 있는 곳은 다음과 같습니다.
CWD="$(pwd)";
cd ;
dir1="$HOME/FW/foo";
dir2="$HOME/FW/bar";
for repo in $dir1, $dir2;
do
cd "$repo"
git up
done
cd $CWD
아, 그리고 저는 bash가 아닌 ZSH를 사용하고 있습니다.
답변1
#!/bin/bash
# This will attempt to do a `git pull` in any directories found in the
# present working directory.
for d in *; do
if [[ -d "$d"/.git ]]; then
( cd $d; git pull )
fi
done
답변2
실제로 사용하기 위해 디렉토리를 git 저장소로 변경할 필요는 없습니다 git
.git
-C path
저장소 목록을 유지하려면 배열을 사용하는 것이 좋습니다.
repos=(
$HOME/somedir/repo1
"$HOME/somedir/with space/repo2"
)
for repo in $repos; do
git -C $repo $@
done
name 으로 스크립트에 넣으면 매개변수가 passad with 이기 때문에 어떤 명령이라도 실행할 multigit
수 있습니다 . 예를 들어 .git
$@
multigit pull
저장소 목록 구성에 관심이 없다면 zsh
다음과 같이 모두 찾아볼 수도 있습니다.
for repo in **/.git(/N); do
git -C ${repo:h} $@
done
**/.git(/N)
지정된 디렉토리는 재귀적으로 검색되며 .git
경로 ${repo:h}
의 마지막 요소는 제거됩니다. 이 경우 .git
저장소 경로는 그대로 유지됩니다.
Tab보너스: 새로운 명령을 완성 할 수도 있습니다 :
compdef '_dispatch git git' multigit