From 9a75af656eaf0fd66097dc2f31fe338d0ad3d76f Mon Sep 17 00:00:00 2001 From: Janik von Rotz Date: Wed, 10 Jun 2026 12:03:54 +0200 Subject: [PATCH] feat(merge-git-remote): refactor remote fetch and merge logic for clarity and robustness --- bin/merge-git-remote | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/bin/merge-git-remote b/bin/merge-git-remote index 670eac1..7c82222 100755 --- a/bin/merge-git-remote +++ b/bin/merge-git-remote @@ -16,7 +16,8 @@ merge-git-remote() { key=$(echo "$line" | awk '{print $1}') value=$(echo "$line" | awk '{print $2}') remote_name="${key##remotes.$git_folder.}" - echo " Adding remote '$remote_name' -> $value" + + echo "Adding remote '$remote_name' -> $value" git -C "$git_folder" remote add "$remote_name" "$value" 2>/dev/null || \ git -C "$git_folder" remote set-url "$remote_name" "$value" git -C "$git_folder" fetch -q "$remote_name" @@ -35,17 +36,27 @@ merge-git-remote() { git -C "$git_folder" fetch -q origin fi + # Fetch the refs from remote while IFS= read -r line; do local key merge_ref remote_name tmp_ref key=$(echo "$line" | awk '{print $1}') merge_ref=$(echo "$line" | awk '{print $2}') remote_name="${key##merge.$git_folder.}" - echo " Merging $remote_name/$merge_ref" + + echo "Fetch ref $merge_ref from $remote_name" + git -C "$git_folder" fetch "$remote_name" "$merge_ref:$merge_ref" + + done < <(git config -f .gitmodules --get-regexp "merge\.$git_folder\.") + + # Merge refs into merge branch + while IFS= read -r line; do + local key merge_ref remote_name tmp_ref + key=$(echo "$line" | awk '{print $1}') + merge_ref=$(echo "$line" | awk '{print $2}') + remote_name="${key##merge.$git_folder.}" + + echo "Merging ref $merge_ref" tmp_ref="refs/merge-tmp/${remote_name}-$(echo "$merge_ref" | tr '/' '-')" - if ! git -C "$git_folder" fetch -q "$remote_name" "$merge_ref:$tmp_ref"; then - echo " !! Could not fetch $merge_ref from $remote_name — skipping" - continue - fi if ! git -C "$git_folder" merge -q --no-edit "$tmp_ref"; then echo " !! Merge conflict in $git_folder ($remote_name/$merge_ref) — resolve manually" fi