前書き
普段テキストエディタでvimを使っています。
いろんなプラグインを使っていますので .vim/pack/**/start/の直下にプラグインごと数多くのサブフォルダが存在しています。
それをターミナル上でいちいちcd coc
git pull
cd ..
みたいな感じでやるのはあまりにも非効率的だと思ったので検索したら下記のようなコマンドを見つかりました。
find . -type d -depth 1 -exec git --git-dir={}/.git --work-tree=$PWD/{} pull origin master \;
commandの解釈
-
find .
: 現在のディレクトリを検索する -
-type d
: その中でファイルではなくディレクトリだけを検索する -
-depth 1
: 検索対象は現在のディレクトリから1つ下の階層のフォルダとする(サブディレクトリ) -
git --git-dir={}/.git --work-tree=$PWD/{} pull origin master \;
: 検索しているディレクトリに.gitのディレクトリが存在するならgitのwork-treeを現在の検索中のディレクトリとし、git pull origin master
のコマンドを実行する
ちょっとした変更
find . -type d -depth 1 -print -exec git -C {} pull \;
- -print : 検索しているディレクトリ名をターミナルに出力する
- -C : gitのver.1.8.5から
--git-dir={}/.git --work-tree=$PWD/{}
の部分の代わりに使えるようです。 - pull : 個人的にはブランチ名をmasterの変わりにmainにしていることと、単純にコマンドをもうちょっと短くしたかったとのことでただ
pull
だけにして使っています。
参考元
Stack Overflow: Run git pull over all subdirectories
Stack Overflow: git pull while not in a git directory