@@ -29,9 +29,83 @@ This edition covers what happened during the month of April 2021.
2929### Support
3030-->
3131
32- <!-- -
33- ## Developer Spotlight:
34- -->
32+ ## Developer Spotlight: Patrick Steinhardt
33+
34+ * Who are you and what do you do?
35+
36+ I'm a software developer working at GitLab, more specifically in the
37+ team working on Gitaly. Gitaly is our RPC interface to all Git
38+ repositories, so it is the backbone to all things Git at GitLab.
39+
40+ In my own free time, I love to tinker with my Gentoo-based systems and
41+ tailor them to my own needs, which results in occasional drive-by
42+ patches to all kinds of open source projects to scratch my own itches.
43+
44+ * What would you name your most important contribution to Git?
45+
46+ To me, this is the introduction of the reference-transaction hook, which
47+ gets executed whenever a reference is about to be updated. This allows
48+ tight control over all reference updates happening in a given repository
49+ in a command-agnostic way. At GitLab, we use this hook to coordinate
50+ reference updates across multiple replicas of the same repository such
51+ that we can be sure that all nodes have the same state and move to the
52+ same state.
53+
54+ My most important contributions I'd not locate in the Git project itself
55+ though, but instead in libgit2. While I unfortunately haven't found the
56+ time to contribute to it lately, I've done a lot more work on libgit2
57+ than I did on Git. And there it's probably the initial introduction of
58+ support for worktrees, maintenance of the CMake build system and work on
59+ the gitconfig subsystem.
60+
61+ * What are you doing on the Git project these days, and why?
62+
63+ My current work is mostly focussed on tuning performance of some areas
64+ we have found to be slow for gitlab.com. This has motivated the recent
65+ introduction of a new git-rev-list(1) filter which allows to filter by
66+ object type via ` --filter=object:type=<type> ` . This makes it easy to
67+ find for example all blobs introduced between two revisions.
68+
69+ And right now I'm trying to devise a new implementation of the object
70+ connectivity check performed by git-receive-pack(1) whenever a push gets
71+ accepted on the server side. Depending on the repository's shape, the
72+ current implementation can be a major bottleneck and take dozens of
73+ seconds to compute even for small pushes. You may have noticed this
74+ check when it says "Checking connectivity" on a push.
75+
76+ * If you could get a team of expert developers to work full time on
77+ something in Git for a full year, what would it be?
78+
79+ I'm obviously biased coming from the libgit2 project, but I'd really
80+ love to further push the libification of Git. There has been great
81+ progress on this front already to make internal C interfaces look more
82+ like the typical interfaces you'd see from a linkable library. But my
83+ dream would be to merge the efforts of Git and libgit2 such that Git
84+ also provides an official library which can be linked against in your
85+ own program.
86+
87+ * If you could remove something from Git without worrying about
88+ backwards compatibility, what would it be?
89+
90+ Tough question. There's many user-facing commands which could benefit
91+ from a more consistent design, but my take is that these probably could
92+ provide an improved user interface while still retaining backwards
93+ compatibility.
94+
95+ But what I'd really love to get rid of is the file-based reference
96+ backend. It works reasonably well to represent references as file paths
97+ in smallish repositories, but even there it imposes limitations which
98+ are only a result of its implementation. It's also inefficient for
99+ bigger repositories and does not really allow for atomic modification of
100+ multiple references at once. There luckily is ongoing work on the
101+ reftable backend, which fixes many of the shortcomings, but it will
102+ likely still take some time to land.
103+
104+ * What is your favorite Git-related tool/library, outside of Git itself?
105+
106+ I guess the answer to that question is going to be obvious by now:
107+ libgit2.
108+
35109
36110## Releases
37111
0 commit comments