Refresh local git repositories
I keep all my software that is under version control below a few directories only. E.g. OpenSource projects I cloned to learn from them live below ~/OpenSource
. Keeping up with updates requires to pull them all.
Pulling the main branch
My little helper does:
- change into each first level sub directory
- check if it is under version control
- capture the current branch
- switch to
main
ormaster
branch, depending on which one is there - capture the name of the tracked remote
- fetch all remotes
- pull the tracked remote
- switch back to the branch it was in
The script does not check if the current branch is dirty (preventing checkout) or pushing back changes. Enjoy
#!/bin/bash
# Pull all repos below the current working directory
do_the_sync() {
for f in *; do
if [ -d $f -a ! -h $f ]; then
cd -- "$f";
if [ -d ".git" ]; then
curBranch=$(git branch --show-current)
mainBranch=nn
echo "Working on $f";
if [ "`git branch --list main`" ]; then
mainBranch=main
else
mainBranch=master
fi
remoteBranch=$(git rev-parse --abbrev-ref ${mainBranch}@{upstream})
IFS='/' read -r remoteSrv string <<< "$remoteBranch"
echo "working on $mainBranch tracking $remoteSrv"
git fetch --all
git pull $remoteSrv
git checkout $curBranch
fi
cd ..
fi;
done;
};
do_the_sync
echo "DONE!"
As usual YMMV
Posted by Stephan H Wissel on 23 December 2021 | Comments (0) | categories: GitHub Software