On Fri, Feb 26 2021, Jean-Marie Lemetayer wrote: > Hi folks, > > I created a new "git sync" sub-command a few months ago to deal with the pull > request workflow. > > Its goals are to: > - keep all configured branches synchronized with the remotes (--set-upstream) > - do not touch your wip feature branches (which has diverged from upstream) > - prune the remotes > > As I use it on a daily basis, to synchronize the remotes and then be able to > quickly rebase my pull requests. I think it's worth sharing. What do you think? > > For now it is a simple shell script available here: > https://github.com/jmlemetayer/one-time-setup/blob/main/git-sync > > If you think it's a good idea, I'll propose a series of patches with the new > sub-command, the manual page and the associated tests. Have you seen 'git branch -v' and 'git branch -v --format=*'? There seems to be a high amount of overlap between this wrapper you've written and it. I suspect most of what you have here could be turned into an %(if:*) directive where you emit the pull/push command as appropriate. If you search the internet for "git-sync" there's dozens of such command (and I've personally observed at least two of them being written by co-workers in real time, not sure if either of those is in the Google results). So I think there's probably a worthwhile problem to be solved here that could be turned into patches to git.git, something between "git [clone|push] --mirror" and "git branch -v". I don't think there's any interest in getting new shellscript built-ins in the future. We've been actively migrating away from those. But most of the logic in your script is just calling the ref-filter.c API behind the scenes. B.t.w. you can probably speed up & simplify your script a lot by making use of IFS="" in the shell and not calling N for-each-ref commands when it seems to me that one invocation would do. Just dump the N fields you need split on some token, and split on that token in your loop.