Robert Foss
August 27, 2018
Reading time:
Working with a git based project that has a defacto upstream repository means that you perioducally want to fetch the canonical master branch. This can be simplified with a .gitconfig alias.
robertfoss@xps9570 ~/work/libdrm $ git ru remote: Counting objects: 234, done. remote: Compressing objects: 100% (233/233), done. remote: Total 234 (delta 177), reused 0 (delta 0) Receiving objects: 100% (234/234), 53.20 KiB | 939.00 KiB/s, done. Resolving deltas: 100% (177/177), completed with 36 local objects. From git://anongit.freedesktop.org/mesa/drm cb592ac8166e..bcb9d976cd91 master -> upstream/master * [new tag] libdrm-2.4.93 -> libdrm-2.4.93 * [new tag] libdrm-2.4.94 -> libdrm-2.4.94
The idea here is that we by issuing a single short command can fetch the latest master branch from the upstream repository of the codebase we're working on and set our local master branch to point to the most recent upstream/master one.
This works by looking for a remote called upstream
(or falling back to origin
if it isn't found). And resetting the local master branch to point at the upstream/master branch.
Add this snippet under the [alias]
section of your ~/.gitconfig
file.
[alias] ru = "!f() { \ REMOTES=$(git remote); \ REMOTE=\"origin\"; \ case \"$REMOTES\" in \ *upstream*) \ REMOTE=\"upstream\"; \ ;; \ esac; \ git fetch $REMOTE; \ git update-ref refs/heads/master refs/remotes/$REMOTE/master; \ git checkout master >/dev/null 2>&1; \ git reset --hard $REMOTE/master >/dev/null 2>&1; \ git checkout - >/dev/null 2>&1; \ }; f
If you have a closer look, you'll notice that the upstream
remote is used if has been added, otherwise the origin
remote is used. This selection is done using git running a shell script.
This is what git ru
might look like when used.
robertfoss@xps9570 ~/work/libdrm $ git remote -v origin git@gitlab.collabora.com:robertfoss/libdrm.git (fetch) origin git@gitlab.collabora.com:robertfoss/libdrm.git (push) upstream git://anongit.freedesktop.org/mesa/drm (fetch) upstream git://anongit.freedesktop.org/mesa/drm (push) robertfoss@xps9570 ~/work/libdrm $ git log --pretty=log --abbrev-commit cb592ac8166e - (HEAD -> master, upstream/master, tag: libdrm-2.4.92) bump version for release (4 months ago) c5a656818492 - freedreno: add fd_pipe refcounting (4 months ago) 1ac3ecde2f2c - intel: add support for ICL 11 (4 months ago) bc9c789073c8 - amdgpu: Deinitialize vamgr_high{,_32} (4 months ago) [snip] robertfoss@xps9570 ~/work/libdrm $ git ru remote: Counting objects: 234, done. remote: Compressing objects: 100% (233/233), done. remote: Total 234 (delta 177), reused 0 (delta 0) Receiving objects: 100% (234/234), 53.20 KiB | 939.00 KiB/s, done. Resolving deltas: 100% (177/177), completed with 36 local objects. From git://anongit.freedesktop.org/mesa/drm cb592ac8166e..bcb9d976cd91 master -> upstream/master * [new tag] libdrm-2.4.93 -> libdrm-2.4.93 * [new tag] libdrm-2.4.94 -> libdrm-2.4.94 robertfoss@xps9570 ~/work/libdrm $ git log --pretty=log --abbrev-commit cb9d976cd91 - (HEAD -> master, upstream/master) xf86drm: fallback to normal path when realpath fails (4 hours ago) 8389c5454804 - (tag: libdrm-2.4.94) Bump to version 2.4.94 (19 hours ago) f0c642e8df41 - libdrm: add msm drm uapi header (25 hours ago) [snip]
This post has been a part of work undertaken by my employer Collabora.
Visit Robert's blog.
14/03/2024
In continuation with our series about Kernel Integration we'll go into more detail about how regression detection, processing, and tracking…
21/02/2024
Now included in our Debian images & available via our GitLab, you can build a complete, working BL31 (Boot Loader stage 3.1), and replace…
19/02/2024
Back in 2022, after a series of issues were found in its design, I made the call to rework some of WirePlumber's fundamentals in order to…
08/02/2024
Continuing our Kernel Integration series, we're excited to introduce DRM-CI, a groundbreaking solution that enables developers to test their…
23/01/2024
This is the fourth and final part in a series on persian-rug, a Rust crate for interconnected objects. We've touched on the two big limitations:…
16/01/2024
One of the key high-level challenges of building Mesa drivers these days is figuring out how to best share code between a Vulkan driver…
Comments (1)
Lucas Magasweran:
Sep 04, 2018 at 07:18 PM
Thanks! I added it to my git custom commands https://github.com/lucasrangit/git-bin .
Reply to this comment
Reply to this comment
Add a Comment