git:alias:track: Also list non-tracked remotes

The alias now lists all local *and* all remote branches and displays how
they are linked.
The `sort -uk1,1` deletes all duplicate entries of remote branches as
they could be listed as %(upstream) as well as %(refname) through the
`refs/remotes/`.
TODO:
     This deletes too many entries when multiple local branches track
     the same remote branch. (Why ever you should do that...)
     I guess this could be resolved by using `awk` for the uniqueness.
This commit is contained in:
2021-11-12 15:56:01 +01:00
parent 1fd2c730d9
commit 3297ba81b4

View File

@@ -16,7 +16,7 @@
[alias] [alias]
root = rev-parse --show-toplevel root = rev-parse --show-toplevel
spull = "!__git_spull() { git pull \"$@\" && git submodule sync --recursive && git submodule update --init --recursive; }; __git_spull" spull = "!__git_spull() { git pull \"$@\" && git submodule sync --recursive && git submodule update --init --recursive; }; __git_spull"
track = "!track() { git for-each-ref --format='%(upstream:short) <- %(refname:short)' refs/heads | sort | awk '{ print $3,$2,$1}' | column -t | sed 's/ *<- *$//'; }; track" track = "!track() { git for-each-ref --format='%(upstream)%(if)%(upstream)%(then),%(end)%(refname)' refs/heads refs/remotes | sort -uk1,1 -t, | sed -E 's/(.*),(.*)/\\2,\\1/; s:(heads/[^,]*)$:\\1,:; s:^refs/remotes/:,:; s:refs/[^/]*/::g' | column -ts,; }; track"
[status] [status]
submodulesummary = true submodulesummary = true
[diff] [diff]