Skip to content

Instantly share code, notes, and snippets.

@douglas
Created October 14, 2011 15:04
Show Gist options
  • Save douglas/1287372 to your computer and use it in GitHub Desktop.
Save douglas/1287372 to your computer and use it in GitHub Desktop.
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"
@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'

@Andrei-Fogoros
Copy link

Hello @douglas,

Under which license is the above code released?

Thanks in advance! :)

@douglas
Copy link
Author

douglas commented Jan 2, 2024

Hello folks!

New year and just had to use it again - thanks for letting me know about GNU parallel =)

About the license, it is public domain - do whatever you want with it provided the gist is not used in a malicious context 👍

@Andrei-Fogoros
Copy link

Hello folks!

New year and just had to use it again - thanks for letting me know about GNU parallel =)

About the license, it is public domain - do whatever you want with it provided the gist is not used in a malicious context 👍

Thank you very much, Douglas!
Happy New Year! :)

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