<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Github on t0ul</title><link>https://t0ul.com/tags/github/</link><description>Recent content in Github on t0ul</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 18 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://t0ul.com/tags/github/index.xml" rel="self" type="application/rss+xml"/><item><title>Introducing Git and GitHub the Safe Way</title><link>https://t0ul.com/blog/introducing-git-and-github-the-safe-way/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/introducing-git-and-github-the-safe-way/</guid><description>&lt;p&gt;Most git tutorials teach you to type the commands. This one teaches you the commands and the four habits that the commands alone do not give you. It is for people who have just started to code, or who have been coding for years and still feel that git is a thing that happens to them.&lt;/p&gt;
&lt;h2 id="the-four-promises"&gt;The four promises&lt;/h2&gt;
&lt;p&gt;By the end of nine short chapters you will be able to keep these, on your own projects and on anyone else&amp;rsquo;s:&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 1: Snapshots, Not Sync</title><link>https://t0ul.com/blog/git-safe-way-1-snapshots-not-sync/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-1-snapshots-not-sync/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;People get into trouble with git because they think it is something it is not. Three wrong pictures account for most of the pain, and it is worth naming them before learning a single command.&lt;/p&gt;
&lt;h2 id="three-things-git-is-not"&gt;Three things git is not&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;It is not a sync folder.&lt;/strong&gt; Dropbox and iCloud copy whatever is in a folder, continuously, whether you meant it or not. git copies nothing until you ask, and it copies exactly what you asked for. That is the whole point: a secret that is in your folder is not in git until you put it there, and a change you did not mean to make is not in the history until you commit it. Everything in chapters 3 and 4 depends on that gap.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 2: Setup That Lasts</title><link>https://t0ul.com/blog/git-safe-way-2-setup-that-lasts/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-2-setup-that-lasts/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Twenty minutes, once per machine. Everything here is written to a file in your home folder called &lt;code&gt;.gitconfig&lt;/code&gt;, and at the end of the chapter you will read that file and understand every line. Nothing in it is hard; most people simply never do it, and then spend years typing a password for every push and wondering why their commits show up under the wrong name.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 3: The Daily Loop</title><link>https://t0ul.com/blog/git-safe-way-3-the-daily-loop/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-3-the-daily-loop/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Chapter 1 said safety is mostly looking before each step. This chapter is the loop those looks live in. If you know &lt;code&gt;add&lt;/code&gt; and &lt;code&gt;commit&lt;/code&gt; already, the new parts are staging &lt;em&gt;part&lt;/em&gt; of a file, writing a message that will still mean something next year, and the one habit that stops most secrets at the door.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 4: Secrets Never Go In</title><link>https://t0ul.com/blog/git-safe-way-4-secrets/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-4-secrets/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Promise one. A committed secret is the most expensive mistake in this book, because it is the only one git cannot undo: a key that was public for four minutes may already be in someone&amp;rsquo;s scraper, in a fork, in a CI log. So the work happens before the commit, in layers, and the last layer is knowing what to do when all the others failed.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 5: Branches and Pull Requests</title><link>https://t0ul.com/blog/git-safe-way-5-branches-and-pull-requests/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-5-branches-and-pull-requests/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Until now every commit went straight onto &lt;code&gt;main&lt;/code&gt;. That is fine alone, on a project nobody depends on. The moment a second person, or a deployed copy, or a future you depends on &lt;code&gt;main&lt;/code&gt; being right, changes need somewhere to live while they are half done and somewhere to be read before they count. That is a branch, and a pull request is the reading.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 6: Protecting main</title><link>https://t0ul.com/blog/git-safe-way-6-protecting-main/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-6-protecting-main/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Chapter 5 described a way of working: branch, pull request, review, merge. This chapter makes GitHub insist on it. Promise three, nothing changes on &lt;code&gt;main&lt;/code&gt; by surprise, is a setting, not a resolution, and it takes ten minutes.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 7: Reading a Pull Request Like a Security Person</title><link>https://t0ul.com/blog/git-safe-way-7-reading-a-pull-request/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-7-reading-a-pull-request/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Chapter 6 made a review mandatory. A review is only worth what the reviewer actually reads, and most pull requests are approved after a scroll. This chapter is how a security-minded person reads one, which turns out to be the same way a careful engineer reads one, with the order of attention changed.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 8: When It Goes Wrong</title><link>https://t0ul.com/blog/git-safe-way-8-when-it-goes-wrong/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-8-when-it-goes-wrong/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Promise two was that no work is ever lost. This chapter is how git keeps it. There is an undo for every stage a change can be in, and the trick is matching the rung to the mistake. Climb no higher than you need: each rung up rewrites a little more, and the top rungs rewrite history that other people may already have.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way, Ch. 9: GitHub Hygiene</title><link>https://t0ul.com/blog/git-safe-way-9-github-hygiene/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-9-github-hygiene/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Promise four: nobody acts as you. Everything in the previous chapters assumed that a push from your account was you. This chapter is the settings that make that true, and the few repository switches that let GitHub watch your back. Most of it is done once; the last section is a yearly habit. Button names follow GitHub&amp;rsquo;s documentation on the day of writing, linked in each section.&lt;/p&gt;</description></item><item><title>Git and GitHub the Safe Way: The One-Page Cheat Sheet</title><link>https://t0ul.com/blog/git-safe-way-cheat-sheet/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/git-safe-way-cheat-sheet/</guid><description>&lt;p&gt;&lt;em&gt;Part of &lt;a href="https://t0ul.com/blog/introducing-git-and-github-the-safe-way/"&gt;Git and GitHub the Safe Way&lt;/a&gt;, a short book on git, GitHub, and the habits that keep a repository from hurting you.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="setup-once-per-machine-chapter-2"&gt;Setup, once per machine (chapter 2)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Do&lt;/th&gt;
 &lt;th&gt;Command or place&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name and email&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git config --global user.name &amp;quot;Ada Gopher&amp;quot;&lt;/code&gt;, &lt;code&gt;git config --global user.email &amp;quot;ada@example.com&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;start on main&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git config --global init.defaultBranch main&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;an editor you can exit&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git config --global core.editor &amp;quot;code --wait&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;make a key&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ssh-keygen -t ed25519 -C &amp;quot;ada@example.com&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;give GitHub the public key&lt;/td&gt;
 &lt;td&gt;Settings, SSH and GPG keys, New SSH key (once as authentication, once as signing)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;test it&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ssh -T git@github.com&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sign every commit&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git config --global gpg.format ssh&lt;/code&gt;, &lt;code&gt;git config --global user.signingkey ~/.ssh/id_ed25519.pub&lt;/code&gt;, &lt;code&gt;git config --global commit.gpgsign true&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ignore OS and editor junk everywhere&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git config --global core.excludesFile ~/.gitignore_global&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="the-loop-chapter-3"&gt;The loop (chapter 3)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Do&lt;/th&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;what changed&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git status --short&lt;/code&gt;, &lt;code&gt;git diff&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;stage part of a file&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git add -p file&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;what the next commit will contain&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git diff --staged&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;commit&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git commit -m &amp;quot;Do one thing&amp;quot;&lt;/code&gt; (add &lt;code&gt;-m &amp;quot;why&amp;quot;&lt;/code&gt; for a body)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;history&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;git log --oneline&lt;/code&gt;, &lt;code&gt;git log -1 --stat&lt;/code&gt;, &lt;code&gt;git log --oneline --graph --all&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;per-project ignores&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.gitignore&lt;/code&gt;, written before the first &lt;code&gt;git add .&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="secrets-chapter-4"&gt;Secrets (chapter 4)&lt;/h2&gt;
&lt;p&gt;Example keys from a provider&amp;rsquo;s documentation are deliberately ignored by scanners; test with a randomly generated string.&lt;/p&gt;</description></item></channel></rss>