-
-
Save douglas/1287372 to your computer and use it in GitHub Desktop.
#!/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" |
thanks
Thank you, very helpful. 👍
Simplest solution to fetch all remotes:
$ find . -name .git -type d -exec git --git-dir '{}' fetch --all ';'
For all find commands -prune will help save time by not searching inside of .git folders. (find man page mentions this).
find ~/GIT-REPOSITORIES ( -exec test -d '{}'/.git ; ) -print -prune
Pipe from there or so
find ~/GIT-REPOSITORIES ( -exec test -d '{}'/.git ; ) -print -prune | xargs -n1 -I% git --git-dir=%/.git --work-tree=%/ pull --all
This is the variation I use:
#To Pull
#!/usr/bin/env bash for repo in $(find . -name ".git" | cut -c 3- | sed 's/.git//g'); do current_branch=git -C ${repo} branch\|grep '*'\|cut -d' ' -f2
;echo -e "Pulling repo: ${repo} \t on branch: ${current_branch}"; git -C $repo pull done
#To View
#!/usr/bin/env bash for repo in $(find . -name ".git" | cut -c 3- | sed 's/.git//g'); do current_branch=git -C ${repo} branch\|grep '*'\|cut -d' ' -f2
;echo -e "repo: ${repo} \t on branch: ${current_branch}" done
dmhowcroft,
Legally anything released without a copyright notice is public domain, the notice contains a year range. If you release something with a year range then a few years later you make changes without updating the copyright notice, then those changes are public domain.
It was nice of you to ask the author :)
Actually that's not 100% true but fairly close. Its not possible for Australians or Germans to release anything public domain as neither counties allow citizens to give away their rights. Its one of the reasons its so important to license things.
My version: https://github.com/joeytwiddle/jsh/blob/master/code/shellscript/git/git-update-all-repos.sh
I run it in a weekly cron job.
find . -maxdepth 8 -name '.git' -prune -type d -printf '%h\n' | parallel --eta 'echo {} && git -C {} pull'
remove echo and --eta if not needed.
Works perfectly. Thanks!
Thanks!
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
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
👍
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.
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?
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'
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 👍
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! :)
Had to replace all echo
with printf
for ANSI color output to work on Fedora 41
Very helpful! Thank you