@@ -47,9 +47,222 @@ This edition covers what happened during the month of November 2020.
4747### Support
4848-->
4949
50- <!-- -
51- ## Developer Spotlight:
52- -->
50+ ## Developer Spotlight: Felipe Contreras
51+
52+ * Who are you and what do you do?
53+
54+ I'm a software engineer who has worked in all areas of software
55+ development. These days they use the term "full stack developer" for a
56+ developer that works on all areas of web development, which I have
57+ done, but I've also worked on Linux kernel development, middleware,
58+ UI; you name it.
59+
60+ Right now I'm a freelancer offering services to local companies doing
61+ mostly web development, but not quite.
62+
63+ It's hard to pigeonhole me because I not only do software development,
64+ I also write a blog (which is not only about software), I've moderated
65+ online communities, and I read a lot from intellectuals regarding the
66+ ongoing culture war, and so on.
67+
68+ I guess you could say I'm a jack of all trades (but I've actually
69+ mastered a few).
70+
71+ * What would you name your most important contribution to Git?
72+
73+ That's very hard to tell because I've worked all over the place, so
74+ most of my changes are minor improvements. But I guess the one with
75+ the biggest impact to users would have to be ` git-remote-hg ` ; a
76+ bidirectional bridge between Git and Mercurial.
77+
78+ Ironically I've never had to use Mercurial, nor worked on a project
79+ that uses Mercurial. However, I did work on projects that used
80+ Subversion and CVS back in 2005, when Git started, and I found it
81+ useful that there existed tools to use Git while working with other
82+ version control systems.
83+
84+ I used to contribute to Pidgin (the MSN protocol parts), who used
85+ Monotone, and I refused to work on such a horrendous VCS, so I started
86+ to work on scripts to convert Monotone repositories to Git, and I
87+ contributed my patches back through Bugzilla (like all other
88+ contributors).
89+
90+ This gave me insight into the inner workings of Git, and eventually
91+ when the Pidgin project decided to move to Mercurial (an obvious
92+ mistake in my opinion), I started surveying the tools to convert from
93+ Git to Mercurial, and I found lots of areas of improvement.
94+
95+ Regarding these tools I would be remiss if I didn't give attribution
96+ to Rocco Rutte, who created the first ` fast-export ` script, which I used
97+ as inspiration for ` git-remote-hg ` , but unfortunately died of cancer in
98+ 2009 . Without his work I might not have started this particular
99+ journey.
100+
101+ Using Rocco Rutte's program, I had the idea to take that approach, but
102+ hide it inside Git's remote-helper infrastructure, which was
103+ surprisingly easy. Everything else that came after was fine-tuning,
104+ adding features, and improving Git's infrastructure to make such
105+ features possible.
106+
107+ In response to some pushback that I received from more established Git
108+ developers--who claimed that some of these changes were specific to
109+ ` git-remote-hg ` --I decided to create ` git-remote-bzr ` as a proof of
110+ concept to interact with Bazaar (again, I never personally had to use
111+ Bazaar), but it turned out there was a huge demand for such a tool, so
112+ I kept working on it.
113+
114+ Some GNU Emacs developers loved ` git-remote-bzr ` , and it probably helped
115+ in the eventual move to Git, even though Richard Stallman initially
116+ pushed back hard against it.
117+
118+ So, even though I never really used ` git-remote-hg ` , or ` git-remote-bzr ` I
119+ kept working at them because clearly other people did. I understand
120+ all too well the frustration of working on a VCS that is foreign and
121+ suboptimal, especially when you know Git has everything you need; it's
122+ like being stranded.
123+
124+ * What are you doing on the Git project these days, and why?
125+
126+ A lot of things. I stopped working on the Git project for many years,
127+ but right now I have motivation to work on it again, and there's
128+ literally dozens of features I'm working on. Unfortunately my patches
129+ have a tendency to not be accepted, so many of these will not end up
130+ helping the end users, but I'm thinking of ways to make these
131+ available outside of Git.
132+
133+ The main one is improvements to "git pull". Initially there was a
134+ complaint from a Red Hat employee about an annoying warning added
135+ recently, which prompted me to look back at work I did in 2013 which
136+ solves all this, but was never merged. Back then the "git pull" code
137+ was written in shell script, now it's in C, so I had to rewrite all
138+ this functionality.
139+
140+ It's a lot of work because there's many different workflows,
141+ configurations, and options that affect the way "git pull" works. I
142+ think the bulk of the code is mostly done, but there's a few options I
143+ would like to explore that I haven't mentioned yet in the mailing
144+ list, since the current patch series is controversial as it is.
145+
146+ Part of the work is reading back old mail threads which go back to
147+ 2008 . A lot of problems and suggestions have been mentioned throughout
148+ the years, and my patch series tries to compile all of those, in
149+ addition to the comments from 2020.
150+
151+ The story of these changes is interesting enough that I have been
152+ writing a blog post about it, which is going to be enormous, but a lot
153+ more work is needed to finish it properly. Hopefully it will be ready
154+ for the next edition of Git Rev News.
155+
156+ In another irony; I don't even use "git pull" (I use "git fetch" +
157+ "git merge" / "git rebase").
158+
159+ * If you could get a team of expert developers to work full time
160+ on something in Git for a full year, what would it be?
161+
162+ I would split Git into a library, and a command line interface.
163+
164+ Clearly there's a need for a stand-alone library, since there is
165+ libgit2, but Git doesn't use libgit2, so one has to always catch up
166+ with the other.
167+
168+ Recently Ævar Arnfjörð Bjarmason mentioned a thought about somehow
169+ splitting the porcelain and plumbing of Git; the part that is for
170+ typical end users, and the part that is for advanced users or scripts.
171+ Splitting the command line from the library would allow us to more
172+ easily see what part belongs where. Plus, I would split the command
173+ line into two; ` git ` and ` git-tool ` . The ` git ` command should be
174+ for typical end users, and the documentation about those commands
175+ should not include any implementation details, or plumbing.
176+
177+ I believe having a clean command line, which hides implementation
178+ details and plumbing, would be of great benefit to the average Git
179+ user, and in addition would help developers visualize what changes are
180+ more likely to affect the end user, plus where the focus of improving
181+ documentation should be.
182+
183+ Oh, and one person on the team should be not a developer, but a copy
184+ editor, and his job would be to rewrite * all* the documentation. It's
185+ probably incontrovertible that Git's documentation can be improved a
186+ lot.
187+
188+ * If you could remove something from Git without worrying about
189+ backwards compatibility, what would it be?
190+
191+ I don't think I would remove anything from Git.
192+
193+ Plus, I don't believe any good developer should stop worrying about
194+ backwards compatibility, ever. I'm of the opinion that there's always
195+ a way to implement changes that are incompatible with previous
196+ versions, but there's a series of steps. First you add the new
197+ functionality, then you add a deprecation period, then you make the
198+ new functionality the default, but always allowing the user to access
199+ the old functionality.
200+
201+ It's a lot more work, and takes a lot more time, which is why many bad
202+ projects don't do it, but I think you always need to worry about
203+ backwards compatibility, and it's a good thing Git developers do worry
204+ about that.
205+
206+ OK, maybe ` merge.defaultToUpstream ` , nobody uses that.
207+
208+ * What is your favorite Git-related tool/library, outside of Git itself?
209+
210+ I don't really use anything outside of Git.
211+
212+ I find Git vanilla to be mostly good enough to do everything I need,
213+ and when I don't; I try to introduce that directly into Git itself.
214+
215+ I created a fork of Git called ` git-fc ` with all the features I didn't
216+ manage to land into Git upstream, but I have not updated it in some
217+ years (it's in my endless to-do list), and even though I miss those
218+ features a lot, I can manage.
219+
220+ I also have a bunch of projects that add other functionality, like
221+ [ ` git-related ` ] ( https://github.com/felipec/git-related ) ,
222+ [ ` git-reintegrate ` ] ( https://github.com/felipec/git-reintegrate ) ,
223+ and [ ` git-send-series ` ] ( https://github.com/felipec/git-send-series ) ,
224+ but I could live fine without those.
225+
226+ I think the only tool I would find very hard to live without is
227+ [ ` git-smartlist ` ] ( https://github.com/felipec/git-smartlist ) . Since
228+ I use gitk a lot to visualize commit history, very often I just want
229+ to see the history from the master branch to the current branch I'm
230+ at, and while usually you can do that with ` master..@ ` , that's not
231+ always the case and "git smartlist" helps a lot in telling gitk
232+ exactly what I want to see.
233+
234+ I think this would be a good additional question:
235+
236+ * Outside of code, is there anything you would like to change about
237+ the Git project?
238+
239+ I think there's a disconnection between users and developers. Recently
240+ I've been talking about the curse of knowledge; the better you know
241+ something, the less you remember about how hard it was to learn. It's
242+ very typical for experts to underestimate how hard it is to understand
243+ something, because they've had many years of experience with it.
244+
245+ One example is rebasing. Basically all Git developers are very
246+ familiar with rebasing, so they can't imagine what it must be like for
247+ a user to not know how to rebase, or worse; to not know what a rebase
248+ is. But feedback from people whose job is to train users tells us the
249+ vast majority of new users have no idea what a rebase is.
250+
251+ Of course the Git developers care about the users, but many times we
252+ have to imagine hypothetical users and their needs, and it's not rare
253+ that these don't match the needs of real users.
254+
255+ That's why [ Git Users' Surveys] ( https://public-inbox.org/git/577E6F32.7020007%40gmail.com/ )
256+ are so important. Unfortunately they haven't been made in many years,
257+ and to be honest I don't see much point in them if the developers
258+ are not going to trust the results and use them to guide the project.
259+
260+ In all the users' surveys the number one and two areas of improvement
261+ without fail are: user-interface, and documentation, and I believe
262+ those are the two areas that are neglected the most.
263+
264+ I would take this feedback seriously, and as a project make a real
265+ effort to try to improve in these areas.
53266
54267## Releases
55268
0 commit comments