<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git on Roberto Selbach</title><link>https://rselbach.com/tags/git/</link><description>Recent content in Git on Roberto Selbach</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 22 Apr 2005 19:35:00 +0000</lastBuildDate><atom:link href="https://rselbach.com/tags/git/index.xml" rel="self" type="application/rss+xml"/><item><title>Watching Linux History Move to Git</title><link>https://rselbach.com/watching-linux-history-move-to-git/</link><pubDate>Fri, 22 Apr 2005 19:35:00 +0000</pubDate><guid>https://rselbach.com/watching-linux-history-move-to-git/</guid><description>&lt;p&gt;The interesting part of Git this week is no longer that it exists. Kernel developers are beginning to use it for actual Linux work, which changes the test from “can these objects be written?” to “can people exchange and trust history under pressure?”&lt;/p&gt;
&lt;p&gt;I tried to imitate the old centralized habit by treating one repository as the place where truth lived and every other copy as a temporary client. That misses Git&amp;rsquo;s shape. Each repository can hold commits and their parent relationships. Fetching obtains objects and updates selected references; merging combines lines of development rather than asking a central server to manufacture history.&lt;/p&gt;
&lt;p&gt;The kernel workflow makes the reason concrete. Maintainers can collect changes for their subsystem, preserve those commits, and pass a resulting line of history upward. The top-level maintainer can inspect and merge it. Signed e-mail and established review practices still matter; a fast object database does not decide whether a patch is wise.&lt;/p&gt;
&lt;p&gt;I also learned not to confuse content identity with human trust. A hash can reveal that an object changed. It cannot tell me whether the author understood locking or whether I fetched from the person I intended. Technical integrity and project trust reinforce one another, but they are not synonyms.&lt;/p&gt;
&lt;p&gt;Performance is already part of the appeal. Operations over the kernel tree need to be quick enough that developers use them freely. Cheap local history and branches encourage smaller experiments because recording work does not require a conversation with a remote machine.&lt;/p&gt;
&lt;p&gt;That changes behavior as much as speed. A maintainer can inspect and organize work before publishing it instead of using the shared repository as a scratch pad.&lt;/p&gt;
&lt;p&gt;The interface remains under construction, and I would not recommend that every project switch during lunch. Linux has an urgent need, unusually capable maintainers, and a willingness to work close to the machinery. That is a special environment, not a universal migration plan.&lt;/p&gt;
&lt;p&gt;But adoption by the kernel gives Git a severe and useful proving ground. If it can preserve a large, branching C codebase while maintainers exchange changes independently, the design will have earned attention. I am keeping my test repository now. Calling it comfortable would be generous; calling it merely a toy would already be unfair.&lt;/p&gt;</description></item><item><title>Git Starts With Objects</title><link>https://rselbach.com/git-starts-with-objects/</link><pubDate>Fri, 08 Apr 2005 22:10:00 +0000</pubDate><guid>https://rselbach.com/git-starts-with-objects/</guid><description>&lt;p&gt;The Linux kernel suddenly needs a new revision control system, and Linus has started writing one. That sentence sounds like the opening of either an excellent engineering story or a very efficient disaster. I downloaded Git to understand what was actually being built.&lt;/p&gt;
&lt;p&gt;My naive attempt was to look for a familiar source-control interface. This first version doesn&amp;rsquo;t have one. It makes more sense as a handful of low-level programs over a content-addressed object store, plus an index used to assemble the next tree.&lt;/p&gt;
&lt;p&gt;A file&amp;rsquo;s contents become a blob identified by its SHA-1 name. A tree names blobs and other trees. A commit object can point to a tree, identify a parent, and carry metadata. At this stage those raw objects are the useful thing to inspect; convenient names and comfortable workflows haven&amp;rsquo;t arrived yet.&lt;/p&gt;
&lt;p&gt;The index is the interesting bit between the working directory and a tree object. &lt;code&gt;update-cache&lt;/code&gt; records paths and their current object names in the index. &lt;code&gt;write-tree&lt;/code&gt; turns that prepared index into a tree. It won&amp;rsquo;t quietly infer a polished commit operation from whatever happens to be in my directory.&lt;/p&gt;
&lt;p&gt;I added a small file with &lt;code&gt;update-cache&lt;/code&gt;, wrote the tree, and used &lt;code&gt;cat-file&lt;/code&gt; to inspect what had been stored. The blob held content; the tree supplied the filename and mode. Changing one file produced a new blob and tree while unchanged blobs kept the same names. That reuse falls straight out of immutable, content-named objects.&lt;/p&gt;
&lt;p&gt;I am not ready to entrust ordinary work to it. The commands are young, rough, and obviously aimed at solving the kernel project&amp;rsquo;s immediate emergency. Anyone claiming the user experience is finished has perhaps enjoyed too much &lt;code&gt;fsck&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Still, the mechanism is compelling. &lt;code&gt;commit-tree&lt;/code&gt; can wrap a prepared tree in a commit object, but the machinery remains exposed. It&amp;rsquo;s a very C-like start: small primitives, explicit input, and an operator who&amp;rsquo;s expected to pay attention.&lt;/p&gt;
&lt;p&gt;For now I&amp;rsquo;m experimenting in a disposable directory and looking at &lt;code&gt;.dircache/objects&lt;/code&gt; and the index rather than pretending this is a finished tool. Two days in, the raw storage model is already worth watching.&lt;/p&gt;</description></item></channel></rss>