Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Update all git repositories under a base directory
#!/bin/bash
# store the current dir
CUR_DIR=$(pwd)
# Let the person running the script know what's going on.
echo "\n\033[1mPulling in latest changes for all repositories...\033[0m\n"
# Find all git repositories and update it to the master latest revision
for i in $(find . -name ".git" | cut -c 3-); do
echo "";
echo "\033[33m"+$i+"\033[0m";
# We have to go to the .git parent directory to call the pull command
cd "$i";
cd ..;
# finally pull
git pull origin master;
# lets get back to the CUR_DIR
cd $CUR_DIR
done
echo "\n\033[32mComplete!\033[0m\n"
@lucasmodrich
Copy link

Works perfectly. Thanks!

@valentin9
Copy link

Thanks!

@jazz-it
Copy link

jazz-it commented Sep 7, 2020

find . -maxdepth 8 -name '.git' -prune -type d -printf '%h\n' | parallel --eta 'echo {} && git -C {} pull'

Very simple, yet effective and blazingly fast. Amazing! Thanks, @harisankar-krishna-2015

@douglas
Copy link
Author

douglas commented Oct 19, 2020

Heh! I had this need again after 9 years and was surprised by the amount of comments =)

Thanks for all suggestions - I will update the gist with improvements to run on macos and Linux 👍

@jensthomsenEV
Copy link

jensthomsenEV commented Mar 9, 2021

How will this work in visual studio code with a workspace setup? I would like to be able to do a pull-from in all the repositories in the workspace, followed by a syncronization, except if there is a merge conflict.

@NorkzYT
Copy link

NorkzYT commented Jun 15, 2022

How will this work in visual studio code with a workspace setup? I would like to be able to do a pull-from in all the repositories in the workspace, followed by a syncronization, except if there is a merge conflict.

Did you find a solution to this or an alternative?

@vhristev
Copy link

Here is a solution for MacOSX:
Im running that from my root repo folder ( no .git in that folder )

~/Documents/repos/
~/Documents/repos/repo1
~/Documents/repos/repo2
/usr/bin/find . -maxdepth 1 -type d -print | parallel --eta 'echo {} && git -C {} pull'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment