Doesn't appear to push to multiple remotes, unlike `git push`
Describe the bug I have multiple git remotes, as described in https://seirdy.one/posts/2020/11/18/git-workflow-1/
The repo in question is https://git.sr.ht/~skyfaller/twentyeleven-skyfaller
My .git/config looks like this:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:~skyfaller/twentyeleven-skyfaller
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected]:skyfaller/twentyeleven-skyfaller.git
url = [email protected]:skyfaller/twentyeleven-skyfaller.git
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "gh_mirror"]
url = [email protected]:skyfaller/twentyeleven-skyfaller.git
fetch = +refs/heads/*:refs/remotes/gh_mirror/*
[remote "cb_mirror"]
url = [email protected]:skyfaller/twentyeleven-skyfaller.git
fetch = +refs/heads/*:refs/remotes/cb_mirror/*
When I make changes to my git repo, and use gitui to Push [p], it only pushes to one remote, in this case GitHub / gh_mirror.
It appears it pushes to the remote which is listed last. This doesn't parallel git's behavior, git prioritizes the URL that is listed first when pulling:
> git pull origin -v
From git.sr.ht:~skyfaller/twentyeleven-skyfaller
= [up to date] master -> origin/master
= [up to date] static -> origin/static
Already up to date.
But since gitui should push to all of the URLs rather than picking one anyway, this isn't important.
When I use git push after using gitui to push, I see:
> git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 468 bytes | 468.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
To git.sr.ht:~skyfaller/twentyeleven-skyfaller
e714d73..0370dee master -> master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 468 bytes | 468.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To codeberg.org:skyfaller/twentyeleven-skyfaller.git
e714d73..0370dee master -> master
Everything up-to-date
As you can see, git push is successfully pushing to the other remotes that gitui did not.
Expected behavior
I expect the behavior of git push and gitui's "Push" function to be identical.
Context (please complete the following information):
- OS/Distro + Version: Fedora Linux 36 (Workstation Edition) x86_64
- GitUI Version: gitui 0.21.0 (installed from Linuxbrew)
oh wow I had no idea I could have it push to two remotes at the same time. TIL
If you're curious, it doesn't appear to make a difference if I use pushurl instead, as suggested in https://brandonrozek.com/blog/git-pushing-multiple-remotes/. Something like this still results in gitui only pushing to one of the remotes:
[remote "origin"]
url = [email protected]:Brandon-Rozek/website.git
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = [email protected]:Brandon-Rozek/website.git
pushurl = [email protected]:~brandonrozek/website
I personally prefer to have them all as url, it saves one duplicated line in the config and aesthetically I like them all looking equal, but if the ultimate fix required pushurl for some reason, I'm sure I would get over it.
Open for PRs :)
This issue has been automatically marked as stale because it has not had any activity half a year. It will be closed in 14 days if no further activity occurs. Thank you for your contributions.
I've learned that I can fetch updates from all my remotes with:
> git pull --all
Fetching origin
Fetching cb_mirror
Fetching gh_mirror
Already up to date.
This doesn't actually pull from more than one remote, it's only fetching updates from the non-"origin" remotes, but I don't usually use git fetch in my workflow so this is easier to remember, and then at least I'll see if there are updates in other remotes which I can then integrate into the "origin".
I also usually push with:
> git push --all
Everything up-to-date
Everything up-to-date
Everything up-to-date
It's easy to forget to push other branches when working with multiple remotes, so even if git push --all shouldn't be necessary for pushing the branch I'm working on to other remotes, this helps make sure I keep the remotes in sync.
Frankly I don't fully understand Seirdy's (excessively complex?) git aliases and I don't use them.
Would love to see functionality for pushing to multiple remote branches implemented. Like @skyfaller, I have projects with multiple remotes, but gitui seems unable to work with them (it crashes with pushing in these projects).
My ideal behavior would be: Press p to push changes and receive a dialog box asking which remote to push to.
But minimal desirable behavior would be something like @skyfaller suggests: git push --all as default behavior.
unfortunatelty libgit2 does not seem to support remotes with multiple url or pushurl: https://libgit2.org/libgit2/#HEAD/group/remote/git_remote_set_pushurl
This assumes the common case of a single-url remote and will otherwise return an error.
we have to add that upstream first