alchi/src/scripts/git-fetch-from-all-remotes.sh

49 lines
1.0 KiB
Bash
Executable File

#!/usr/bin/env bash
git_merge_command_lines=()
function fetch_from_remote() {
local remote="$1"
remote_branches="$(git ls-remote $remote | grep refs/heads/ | sed 's|^.*refs/heads/||')"
echo
echo "remote $remote: fetching branches:" $remote_branches
git fetch $remote $remote_branches
# the "origin" remote gives
# merge: remotes/origin/master - not something we can merge
if [[ "$remote" != "origin" ]]; then
git_merge_command_lines+=("")
for branch in $remote_branches; do
git_merge_command_lines+=("git merge --ff-only --into-name $branch remotes/$remote/$branch")
done
fi
}
remote_list="$(git remote show)"
# fetch from "origin" first
if echo "$remote_list" | grep -q -x origin; then
remote_list="$(echo "$remote_list" | grep -v -x origin)"
fetch_from_remote origin
fi
for remote in $remote_list; do
fetch_from_remote $remote
done
echo
echo "TODO: merge commits from remote branches to local branches"
for line in "${git_merge_command_lines[@]}"; do
echo "$line"
done