Update metadata and transcripts through end of July 2026
Refreshed episodes/hosts/comments/series from hpr.sql, and added official HPR transcripts for the 180 episodes aired since the last sync (hpr4516-hpr4695).
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
Episode: 4591
|
||||
Title: A Bit of Git
|
||||
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4591/hpr4591.mp3
|
||||
Transcribed: 2026-07-31 16:14:39 (official HPR transcript)
|
||||
|
||||
---
|
||||
|
||||
This is Hacker Public Radio Episode 4591, for 2026-03-09
|
||||
Today's show is entitled, "A Bit of Git"
|
||||
The host is Lee and the duration is 00:14:13
|
||||
The flag is Clean, and the license is CC-BY-SA
|
||||
The summary is "Lee relates the git adventure that occurred while working on a work logging project"
|
||||
Hello, I'm Leigh.
|
||||
Style be relating the experience with the distributed version to troll system, called Get,
|
||||
that happened this afternoon, 26th of December, we call that day here, Boxing Day.
|
||||
Phone when it doesn't know, Get was crash by Linda Spenderdick to Vowd's, who is a finish
|
||||
in the American software developer.
|
||||
It's also known for being the craternly developer of the Lynette's kernel, which is running
|
||||
on about 70% of the world's computing devices.
|
||||
So, this afternoon I sat down and browsed onto the online repository of a project I've been
|
||||
working on.
|
||||
The project was a simple work session logger with both desktop and web versions.
|
||||
The web version uses.net core, which is an open source framework, a little similar to Java,
|
||||
and the desktop version uses Kirigami, a GUI development framework based on the KDA
|
||||
management environment, but with libraries that allow the app to run in other environments.
|
||||
The code hosting service, Get Hub, reminded me I had two outstanding issues to work on.
|
||||
I sat about addressing those, a did by Claude Code, a professional coding tool that can
|
||||
be conversed with in-chat, and is able to help with common software development tasks such
|
||||
as writing debugging and testing code.
|
||||
And it's just one of a number of such tools available that became possible with advances
|
||||
in low-cost parallel computing, the accumulation of large amounts of human-produced digital
|
||||
data and developments in computer science.
|
||||
In particular, what is known as the Transformer architecture that weighs how different
|
||||
words in text are related to each other statistically, and by doing this can build a massive
|
||||
new data set known as a large language model, which can then be used to understand a process
|
||||
both natural language and computer languages.
|
||||
Today I made seven changes to the code of my work logging project, each one deserving
|
||||
a commit, that's when you save the state of the code to the version control system.
|
||||
First change, add some padding beneath the list of days to left pane, so when a scroll
|
||||
down to the most recent, it's in the middle rather than hard to reach the bomb.
|
||||
This was for both the web app and desktop app, then commit.
|
||||
Second change, in the web app, stop code blocks in the word description going off the right
|
||||
hand-edge, this requires some CSS tweaks, CSS being short for cascading style sheets,
|
||||
it's the language that lets you change all the visual style of a web page without having
|
||||
to adjust all the contents, then commit.
|
||||
Third change, increase that padding for the web app, because it wasn't as much as I
|
||||
typed, then commit.
|
||||
Fourth change, get the web app to render work session notes as marked down rather than plain
|
||||
text.
|
||||
It was not even difficult, as a text component has that as an option, then commit.
|
||||
Fifth change, fixing the Cloud Sync screen, which should regress, to splatting its contents
|
||||
all over the window, instead of containing them in a mobile dialogue box.
|
||||
A long bell should have been ringing for me at this point, so I distinctly remembered
|
||||
fixing this once already.
|
||||
I kind of assume maybe somehow I'd unfixed it with what I'd just been doing.
|
||||
Anyway, despite my spy-desense tingling, commit this as well.
|
||||
Sixth change, I just CSS layout a bit more, as the code blocks were still not responsive
|
||||
when the browser window was narrowed.
|
||||
Then commit.
|
||||
Fifth change, adjust the CSS layout even more, for when the window is very narrow, like
|
||||
on a mobile phone, then commit.
|
||||
That was all I wanted to do for the day, it had not taken very long.
|
||||
These changes were tested, both the web-based and desktop-based versions of the app, both
|
||||
looked okay, and were behaving well.
|
||||
So, the next step was to push my changes to the public repository.
|
||||
This is a place where others can access the source code, download it, and make use of
|
||||
it themselves, if they want to.
|
||||
It's not like code hosting platform called GitHub.
|
||||
There are other such platforms such as GitLab and BitBuckit, so name just a couple.
|
||||
It is managed by the provider, and for small projects like my one, a free or low-cost
|
||||
use.
|
||||
There are also alternative ones like Gitty that can be hosted on your own infrastructure
|
||||
if you want to have more control over things.
|
||||
When I tried to push my changes, I got an error though.
|
||||
I found out my branch had diverged from where I was pushing it to.
|
||||
This was a classic mistake, I not pulled the code from the public repository prior to
|
||||
starting work on it.
|
||||
I just assumed I was working on the latest version of the code.
|
||||
Then I remembered what had happened a few days ago, Monday to be precise, this been Friday.
|
||||
I've been using my Dell laptop.
|
||||
I had a synchronization software called Resilio Sync running on it and seeking all my files
|
||||
between the mesh of different PC, servers, and laptops I use, and I thought this would
|
||||
have updated things for me, but apparently I had not done so on this occasion.
|
||||
So doing a fetch and looking at the log of commits in Graph Form, showed there was already
|
||||
a fixed and a mode of dialogue issue in the public repository.
|
||||
Even the fixed and previously was slightly better, because it explicitly made the Sync
|
||||
dialogue not visible into it needed to be displayed rather than relying on any assumptions.
|
||||
So two branches of the project had diverged.
|
||||
At this point, if I had reason to believe other people were working on this code, it would
|
||||
be necessary to start from the remote version and merge in my changes as new commits.
|
||||
That would end up with quite a messy history, but there was another way that would keep
|
||||
the history clean and easy to understand when looking back at these changes.
|
||||
The operation to be performed was called a rebase.
|
||||
This let's local commits be replayed one by one on top of the remote branch.
|
||||
Plato talks about it in an episode of HPR, 2573 for June 13th, 2019, called Foundations
|
||||
of Git Rebase.
|
||||
So stepping through my commits, and I got to the one with the modal Sync dialogue box,
|
||||
this had to be staged but the commits skipped since the fix I mentioned was already in place.
|
||||
Having done this, the log of commits was very examined and looked now correct, so I pushed
|
||||
this to GitHub.
|
||||
At first I thought this was all fine now.
|
||||
On closer inspection I could see attribution messages had been added, mentioning co-authorship
|
||||
by the Claude Code to I'd been using.
|
||||
Normally that would be fine by a reason for pause.
|
||||
This was because the desktop version of this app, in the cart down form, had been deployed
|
||||
on flat hub, which is the most common source for obtaining flat packed packages.
|
||||
These are a new generation of software packages used to install software and Linux distributions.
|
||||
This type of packaging system has two main advantages, first it's agnostic as to which particular
|
||||
Linux distribution you're installing the software on, because it includes important dependency
|
||||
libraries bundled with it.
|
||||
Secondly, it incorporates sandboxing that limits the privileges the application has on the
|
||||
system it's installed on.
|
||||
This reduces potential side effects with the caveat that when privileged access of some
|
||||
kind is required, this must be allowed for explicitly.
|
||||
An example might be writing a file onto your home directory, which by default a sandbox
|
||||
program would not be allowed to do.
|
||||
Why was I bothered?
|
||||
Well I remember that flat hub has deliberate policies around distributing code produced
|
||||
by generative artificial intelligence systems.
|
||||
And this is for good reason, on my still commercial large language models have been trained
|
||||
from massive amounts of data that came from the public internet, especially source code
|
||||
repository such as GitHub.
|
||||
Arguably systems like Claude have used this information to learn how to program, which
|
||||
is skill, but it's still plausible it remembers for baitum some of its training material.
|
||||
In the same way that I remember punished by heart I was taught at the school, even though
|
||||
I've primarily exposed to those texts to learn the pan's fan different forms of literature
|
||||
and skills of comprehension and discourse.
|
||||
If I produced a piece of writing and included word for word, some verse I'd remember
|
||||
without attributing it to the offer this would be considered intellectual theft.
|
||||
In the same way, large language models generally use a knowledge of programming to generate
|
||||
completely new code put together a new ways.
|
||||
If we exclude trivial common repetitions or idioms, it's likely to be distinct from anything
|
||||
that existed before.
|
||||
There's still the danger and LLM-Y output large amounts of someone's work exactly as it was
|
||||
remembered.
|
||||
Even open source licenses often demand proper attribution for the original program's work,
|
||||
so it's basically not okay to redistribute something very close to what they wrote without proper
|
||||
attribution.
|
||||
This leads to a legal grey area between what is copying code someone else wrote and what is
|
||||
termed fair use.
|
||||
Saying all this, I don't think I've stolen someone else's code, but ering on the side of
|
||||
both caution and pragmatism, I don't want to advertise too much in the public repository
|
||||
what tools I've used if there are policy implications.
|
||||
To fix this required rewriting the git history again,
|
||||
it includes a way of doing this called filter branch, which could be combined with a text
|
||||
replacement program called said.
|
||||
That's SCD.
|
||||
And speaking of said, I have a repurposed anti-region enclosure.
|
||||
I got it out of the valves and put an old Android tablet in the face.
|
||||
It shows a world clock, the weather, and foca flashcards in Dutch and Spanish,
|
||||
so as well as a Latin conjunction, I know said means thirst in Spanish.
|
||||
The English command line term said is a program that takes in some input text,
|
||||
then a pattern, which is basically a string of text that encodes some rules it must apply,
|
||||
and it produces output having applied those rules.
|
||||
Unfortunately, the filter branch command that was tried didn't do anything.
|
||||
The second attempt used the git command called rebase again, along with an exact parameter,
|
||||
telling it to commit with amendment, a version of the original message,
|
||||
using said to remove the unwanted mention of Claude.
|
||||
Looking at the git log provided assurance this had worked.
|
||||
I thought now this would be all resolved, but no, the history was still divergent
|
||||
from the remote repository.
|
||||
Changing the commit messages had again made it look like the changes were on the different branch,
|
||||
even though the changes themselves were identical.
|
||||
A normal git push would not work.
|
||||
Luckily there's a way of overriding this problem by doing what's called a force push.
|
||||
This is not something that anyone typically should do when the remote repository is shared
|
||||
or public, since it will invalidate version control for anyone else working on this code.
|
||||
Because this was quite a new project, and I was pretty sure I was the only person working on it,
|
||||
and the divergence has happened only recently, I decided to go ahead and update the remote
|
||||
repository this way anyway.
|
||||
Finally, there was both for clean history and the commit messages stated just for each change
|
||||
was not what tools I used.
|
||||
Here's what I learned about git.
|
||||
First, rebasing lets you replay commits.
|
||||
If two branches diverge, you can replay your commits on top of the remote branch,
|
||||
and keep the history simple.
|
||||
Second, if conflicts occur with the rebase, they can be solved,
|
||||
as you have the option to continue skip or abort entirely.
|
||||
Third, with interactive rebasing, you can do powerful things like run arbitrary commands and each commit.
|
||||
Useful for amending commit messages, for example.
|
||||
Fourth, rewriting history changes commit hashes.
|
||||
So even if the file changed is identical, the history has changed, so this needs to be born in mind.
|
||||
A force push will rewrite the remote history, but it should be done with caution.
|
||||
Only few are the only person working on the branch.
|
||||
You're okay with the published history changing, and you've checked your changes are correct.
|
||||
Six, using filter branch and said can be a bit tricky.
|
||||
This is why I did the interactive rebase instead.
|
||||
Here are the various commands that we used, git status, this checks the current status.
|
||||
It especially tells you if there are any new on modified files and which of those files have been staged.
|
||||
git fetch origin, this fetch is the latest history from the remote repository.
|
||||
git log dash dash one line dash dash graph dash dash all dash dash the correct dash 15.
|
||||
This draws a graph of the commit history.
|
||||
git show origin slash main dash dash that or git show some hash and some file name.
|
||||
Ever of these will show details of the commit, git rebase origin slash main.
|
||||
This rebase is local commits onto the remote branch.
|
||||
git add some file, stages of particular file, git rebase dash dash skip, this
|
||||
skips the next commit when rebasing, git show dash dash, step capital HAAD, or git log dash dash format
|
||||
equals in double quotes per cent capital B dash one capital HAAD, either of these will check commit message.
|
||||
git rebase dash i sum hash dash dash exec in single quotes sum command, this runs a command like
|
||||
git commit dash dash amend when rebasing, git push dash dash force, this does a force push.
|
||||
I'm to put a reference to these in the show notes.
|
||||
That's all for now, thanks for listening, bye bye.
|
||||
You have been listening to Hacker Public Radio at Hacker Public Radio.org.
|
||||
Today's show was contributed by a HPR listener like yourself.
|
||||
If you ever thought of recording podcast, click on our upload link
|
||||
to find out how easy it is.
|
||||
Hosting for HPR has been kindly provided by an AnHonestHost.com, the Internet Archive,
|
||||
rsync.net, and our mirror network.
|
||||
Unless otherwise stated, today's show is released under a Creative Commons
|
||||
Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.
|
||||
Reference in New Issue
Block a user