後で追加できるスクリプトを作成しようとしています。デフォルトでは、私のホームディレクトリは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