From 64e82710c35b22c38566f8cde391041b5546f79b Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:39:19 +0300 Subject: [PATCH 01/26] docs: add bare repositories recipe to playbook Covers creating, cloning, converting, and using bare repos as local remotes. Includes layout comparison, push-to-non-bare gotcha, and practical multi-developer walkthrough. Closes #172 Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/07-playbook.md | 1 + chapters/recipes/bare-repositories.md | 146 ++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 chapters/recipes/bare-repositories.md diff --git a/chapters/07-playbook.md b/chapters/07-playbook.md index 758e197..cfaa6b5 100644 --- a/chapters/07-playbook.md +++ b/chapters/07-playbook.md @@ -39,6 +39,7 @@ For definitions, see [Glossary](09-glossary.md). | [Remote Operations](playbook/remote-operations.md) | Push, pull, force push safely, sync forks | | [Remote Management](playbook/remote-management.md) | Add, rename, remove remotes, switch URL, SSH setup | | [SSH Setup](playbook/ssh-setup.md) | Key generation, agent, GitHub registration, troubleshooting | +| [Bare Repositories](playbook/bare-repositories.md) | Create, clone, convert, and use bare repos as local remotes | ## Project Structure diff --git a/chapters/recipes/bare-repositories.md b/chapters/recipes/bare-repositories.md new file mode 100644 index 0000000..61d46eb --- /dev/null +++ b/chapters/recipes/bare-repositories.md @@ -0,0 +1,146 @@ +--- +title: "Bare Repositories" +description: "Git recipes for creating, cloning, and working with bare repositories — the standard layout for central and shared repositories." +section: "playbook/bare-repositories" +order: 93 +--- + +## Bare Repositories + +A bare repository has no working tree — only the Git internals (objects, +refs, config). It is the standard layout for central repositories that +multiple developers push to. Hosting services like GitHub and GitLab +store every repository as bare on the server. + +For the theory behind bare vs non-bare repositories, see +[Building Blocks](../02-building-blocks.md#bare-repository). + +### Create a bare repository + +```text +$ git init --bare project.git +Initialized empty Git repository in /home/user/project.git/ +``` + +The `.git` suffix is a convention, not a requirement — it signals that +the directory is a bare repository. + +### Compare the layouts + +```text +# Bare — no working tree, internals at the top level +project.git/ +├── HEAD +├── config +├── hooks/ +├── objects/ +└── refs/ + +# Non-bare — working tree + .git folder +project/ +├── .git/ +│ ├── HEAD +│ ├── config +│ ├── hooks/ +│ ├── objects/ +│ └── refs/ +└── README.md +``` + +In a bare repository, what normally lives inside `.git/` sits at the +top level. There is no place to check out files. + +### Use a bare repository as a local remote + +This is the most common use case — simulate a central server on your +own machine for practice or local collaboration. + +```text +# 1. Create the bare (central) repository +$ git init --bare /tmp/central.git + +# 2. Clone it into a working copy +$ git clone /tmp/central.git /tmp/dev-alice +$ cd /tmp/dev-alice + +# 3. Make a commit and push +$ echo "Hello" > greeting.txt +$ git add greeting.txt +$ git commit -m "Add greeting" +$ git push origin main + +# 4. Clone again to simulate a second developer +$ git clone /tmp/central.git /tmp/dev-bob +$ cd /tmp/dev-bob +$ cat greeting.txt +Hello +``` + +Both clones push to and pull from the same bare repository, exactly +like working with GitHub. + +### Convert a non-bare repository to bare + +```text +$ git clone --bare project project.git +``` + +This copies only the Git data — no working tree files. The result is +a bare repository you can use as a central remote. + +You can also convert in place: + +```text +$ cd project +$ mv .git ../project.git +$ cd .. +$ rm -rf project +$ cd project.git +$ git config --bool core.bare true +``` + +### Clone a bare repository + +```text +$ git clone --bare https://github.com/user/project.git +``` + +Useful for creating mirrors or backup copies that do not need a +working tree. + +### Push to a non-bare repository (and why it fails) + +Pushing to a non-bare repository is rejected by default: + +```text +$ git push /tmp/dev-alice main +remote: error: refusing to update checked out branch: refs/heads/main +``` + +Git refuses because the push would change the branch that the working +tree is based on, leaving the working tree out of sync. This is +exactly why central repositories are bare — they have no working tree +to desynchronize. + +If you need to accept pushes on a non-bare repository (rare), you +can enable it: + +```text +$ git config receive.denyCurrentBranch updateInstead +``` + +This tells Git to update both the branch and the working tree on push. +Use this only for special setups like deployment targets — not for +regular development. + +### Gotchas + +- **You cannot run `git add` or `git commit` in a bare repository** — + there is no working tree to stage files from. All changes must arrive + via `git push` from another repository. +- **The `.git` suffix is convention only.** Git does not require it, + but omitting it makes the directory harder to identify. +- **Bare does not mean read-only.** A bare repository accepts pushes, + runs hooks, and stores the same history as a non-bare one. +- **`git clone` of a bare repository produces a non-bare clone by + default.** Use `git clone --bare` if you want another bare copy. From dbf62adf06022fa9b9a03d8e9e80c316eb84a0b6 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:43:15 +0300 Subject: [PATCH 02/26] docs: flatten bare/non-bare headings into section flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove H3 headings for bare and non-bare repositories in Chapter 2 — they interrupted the section flow. Bold lead-in text replaces them. Update cross-reference anchor in the bare-repositories recipe. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 16 ++++++---------- chapters/recipes/bare-repositories.md | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index edabfbe..a076452 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -37,15 +37,13 @@ A repository can be **local** (on your machine) or **remote** (on a server like GitHub). Git treats both as equals — you can push to and pull from any repository you have access to. -Git supports two repository layouts: +Git supports two repository layouts — **bare** and **non-bare**. -### Bare Repository - -A **bare repository** is a Git repository without a working tree — it -contains only the `.git` internals (objects, refs, config) and no -checked-out files. Hosting services like GitHub and GitLab store repositories as bare -on the server. When you edit a file through GitHub's web interface, -GitHub creates a commit directly — it does not use a working tree. +A **bare repository** has no working tree — only the Git internals +(objects, refs, config) and no checked-out files. Hosting services like +GitHub and GitLab store repositories as bare on the server. When you +edit a file through GitHub's web interface, GitHub creates a commit +directly — it does not use a working tree. > **Note:** "bare" and "remote" are not the same thing. A remote is any > repository you connect to via URL. Remotes are *usually* bare, but a @@ -65,8 +63,6 @@ PROJECT.GIT/ └───tags # Tag references ``` -### Non-bare Repository - A **non-bare repository** (also called a regular or working repository) is what you get when you clone or run `git init`. It has a working tree where you create, edit and delete files, plus a hidden `.git` folder diff --git a/chapters/recipes/bare-repositories.md b/chapters/recipes/bare-repositories.md index 61d46eb..f0fe0ed 100644 --- a/chapters/recipes/bare-repositories.md +++ b/chapters/recipes/bare-repositories.md @@ -13,7 +13,7 @@ multiple developers push to. Hosting services like GitHub and GitLab store every repository as bare on the server. For the theory behind bare vs non-bare repositories, see -[Building Blocks](../02-building-blocks.md#bare-repository). +[Building Blocks](../02-building-blocks.md#2-repository). ### Create a bare repository From 044a6436946d7f739805abe45f66b8342addc44e Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:45:17 +0300 Subject: [PATCH 03/26] docs: explain why bare repos exist and why pushing to non-bare fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add paragraph connecting the structural difference to the practical consequence — bare repos accept pushes because there is no working tree to desynchronize; non-bare repos reject pushes to protect the checked-out files. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index a076452..c2f88a5 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -88,6 +88,19 @@ The `.git` folder contains the same structure as a bare repository. The difference is that a non-bare repository also has a working tree next to it — the place where you do your actual work. +A bare repository is designed to be a shared hub — it accepts pushes +from other repositories. You cannot run `git add` or `git commit` +inside it because there is no working tree to stage files from. All +changes must arrive via `git push` from another repository. + +Pushing to a non-bare repository is rejected by default. The reason: +a push updates the branch reference, but it does not touch the working +tree. If Git allowed it, the person working in that repository would +have files from the old commit while the branch points to the new one — +their working tree and their branch would be out of sync, and any +staged work could be silently lost. Bare repositories avoid this +problem entirely because there is no working tree to desynchronize. + ## 3. Object Model Every time you commit, Git takes a **snapshot** — a complete picture of From 7ea2d733136421fb8573063255898a6828e6ce12 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:47:16 +0300 Subject: [PATCH 04/26] docs: remove forward references from bare/non-bare explanation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace paragraph that used push, branch reference, and staged — terms not introduced until later chapters. Keep the explanation to structure and purpose only. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index c2f88a5..c605147 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -88,18 +88,11 @@ The `.git` folder contains the same structure as a bare repository. The difference is that a non-bare repository also has a working tree next to it — the place where you do your actual work. -A bare repository is designed to be a shared hub — it accepts pushes -from other repositories. You cannot run `git add` or `git commit` -inside it because there is no working tree to stage files from. All -changes must arrive via `git push` from another repository. - -Pushing to a non-bare repository is rejected by default. The reason: -a push updates the branch reference, but it does not touch the working -tree. If Git allowed it, the person working in that repository would -have files from the old commit while the branch points to the new one — -their working tree and their branch would be out of sync, and any -staged work could be silently lost. Bare repositories avoid this -problem entirely because there is no working tree to desynchronize. +A bare repository is designed to be a shared hub. Because it has no +working tree, nobody edits files in it directly — it only receives +changes sent from other repositories. A non-bare repository is the +opposite: it is where you do your day-to-day work — editing files, +recording snapshots, and browsing history. ## 3. Object Model From bf9f555f5661c9230b0a26a56e6bbfccd3bb7192 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:50:26 +0300 Subject: [PATCH 05/26] docs: step-by-step explanation of why pushing to non-bare fails Replace one-sentence summary with Alice-and-Bob scenario showing how a push would desync the working tree and cause lost work. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/recipes/bare-repositories.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/chapters/recipes/bare-repositories.md b/chapters/recipes/bare-repositories.md index f0fe0ed..5190445 100644 --- a/chapters/recipes/bare-repositories.md +++ b/chapters/recipes/bare-repositories.md @@ -117,10 +117,25 @@ $ git push /tmp/dev-alice main remote: error: refusing to update checked out branch: refs/heads/main ``` -Git refuses because the push would change the branch that the working -tree is based on, leaving the working tree out of sync. This is -exactly why central repositories are bare — they have no working tree -to desynchronize. +To understand why, imagine two developers — Alice and Bob — where +Alice's repository is non-bare and Bob tries to push to it: + +1. Alice clones a repository and checks out `main`. Her working tree + has the files from commit `A`. +2. Alice edits `report.txt` but has not committed yet. +3. Bob pushes a new commit `B` to Alice's repository. Git updates + Alice's `main` branch to point to `B`. +4. Now Alice's branch says `B`, but her working tree still has the + files from `A` — plus her uncommitted edits. Git has no way to + merge Bob's changes into Alice's working tree automatically. +5. If Alice runs `git status`, she sees phantom differences — her + files look changed relative to `B`, even though she never touched + them. Her real edits are mixed in with the noise, and she could + lose work. + +Git prevents step 3 entirely. A bare repository avoids this problem +because there is no working tree and no one editing files in it — +updating the branch is always safe. If you need to accept pushes on a non-bare repository (rare), you can enable it: From d91bc080287d3154af98e1fd6a885b77ff0f0ae1 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:54:52 +0300 Subject: [PATCH 06/26] docs: clarify push-to-non-bare explanation Make explicit that a push only updates the branch reference, not the working tree. Show the broken state with HEAD vs working tree diagram. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/recipes/bare-repositories.md | 32 ++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/chapters/recipes/bare-repositories.md b/chapters/recipes/bare-repositories.md index 5190445..cdc15c6 100644 --- a/chapters/recipes/bare-repositories.md +++ b/chapters/recipes/bare-repositories.md @@ -117,25 +117,31 @@ $ git push /tmp/dev-alice main remote: error: refusing to update checked out branch: refs/heads/main ``` -To understand why, imagine two developers — Alice and Bob — where -Alice's repository is non-bare and Bob tries to push to it: +To understand why, remember that a push only updates the branch +reference inside `.git/` — it does **not** touch the working tree. +These are two separate operations, and only the first one happens. + +Imagine Alice and Bob, where Alice's repository is non-bare and Bob +tries to push to it: 1. Alice clones a repository and checks out `main`. Her working tree has the files from commit `A`. 2. Alice edits `report.txt` but has not committed yet. -3. Bob pushes a new commit `B` to Alice's repository. Git updates - Alice's `main` branch to point to `B`. -4. Now Alice's branch says `B`, but her working tree still has the - files from `A` — plus her uncommitted edits. Git has no way to - merge Bob's changes into Alice's working tree automatically. -5. If Alice runs `git status`, she sees phantom differences — her - files look changed relative to `B`, even though she never touched - them. Her real edits are mixed in with the noise, and she could - lose work. +3. Bob pushes a new commit `B` to Alice's repository. The push + updates the reference `.git/refs/heads/main` to point to `B` — + but Alice's working tree is not updated. Her files on disk are + still from commit `A`, plus her uncommitted edits. +4. Alice's repository is now in a broken state: + - `HEAD` → `main` → commit `B` (moved by the push) + - Working tree → files from commit `A` + uncommitted edits (untouched) +5. If Alice runs `git status`, Git compares her working tree against + commit `B`. Every file Bob changed shows up as a difference — + mixed in with Alice's real edits. She cannot tell which changes + are hers and which are artifacts of the branch moving under her. Git prevents step 3 entirely. A bare repository avoids this problem -because there is no working tree and no one editing files in it — -updating the branch is always safe. +because there is no working tree — updating the branch reference is +always safe when there are no files to desynchronize. If you need to accept pushes on a non-bare repository (rare), you can enable it: From ea296d41f70648a7f25feb2f825e9d10794e17b4 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:55:49 +0300 Subject: [PATCH 07/26] docs: clarify direct push scenario in bare repo recipe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make explicit that Bob pushes directly to Alice's machine (not via a server), so no fetch is needed — the push writes straight into her .git/ directory. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/recipes/bare-repositories.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/chapters/recipes/bare-repositories.md b/chapters/recipes/bare-repositories.md index cdc15c6..74ade8b 100644 --- a/chapters/recipes/bare-repositories.md +++ b/chapters/recipes/bare-repositories.md @@ -121,16 +121,20 @@ To understand why, remember that a push only updates the branch reference inside `.git/` — it does **not** touch the working tree. These are two separate operations, and only the first one happens. -Imagine Alice and Bob, where Alice's repository is non-bare and Bob -tries to push to it: - -1. Alice clones a repository and checks out `main`. Her working tree - has the files from commit `A`. +Imagine Alice and Bob working on the same local network. Bob has +Alice's repository configured as a remote (pointing directly at her +machine, not at a server like GitHub). This means Bob can push +commits straight into Alice's `.git/` directory — no fetch required +on Alice's side. + +1. Alice checks out `main`. Her working tree has the files from + commit `A`. 2. Alice edits `report.txt` but has not committed yet. -3. Bob pushes a new commit `B` to Alice's repository. The push - updates the reference `.git/refs/heads/main` to point to `B` — - but Alice's working tree is not updated. Her files on disk are - still from commit `A`, plus her uncommitted edits. +3. Bob runs `git push alice-machine main`, which writes his new + commit `B` directly into Alice's `.git/` and updates her + reference `.git/refs/heads/main` to point to `B` — but Alice's + working tree is not updated. Her files on disk are still from + commit `A`, plus her uncommitted edits. 4. Alice's repository is now in a broken state: - `HEAD` → `main` → commit `B` (moved by the push) - Working tree → files from commit `A` + uncommitted edits (untouched) From 5a73524b39784acc80f9296621c815c2fd6241c0 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 09:57:23 +0300 Subject: [PATCH 08/26] docs: clarify no-bare-repo setup in push scenario MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit State explicitly that there is no bare repo, no GitHub, no central server — just two non-bare repos pushing directly to each other. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/recipes/bare-repositories.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/chapters/recipes/bare-repositories.md b/chapters/recipes/bare-repositories.md index 74ade8b..7a4eb60 100644 --- a/chapters/recipes/bare-repositories.md +++ b/chapters/recipes/bare-repositories.md @@ -121,11 +121,10 @@ To understand why, remember that a push only updates the branch reference inside `.git/` — it does **not** touch the working tree. These are two separate operations, and only the first one happens. -Imagine Alice and Bob working on the same local network. Bob has -Alice's repository configured as a remote (pointing directly at her -machine, not at a server like GitHub). This means Bob can push -commits straight into Alice's `.git/` directory — no fetch required -on Alice's side. +Imagine Alice and Bob working on the same network with **no bare +repository in between** — no GitHub, no central server. Bob has +Alice's non-bare repository configured as his remote, so he pushes +directly into her `.git/` directory. 1. Alice checks out `main`. Her working tree has the files from commit `A`. From a92a9c2165114233c4b9d8515f83801ee26e3cf2 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:09:03 +0300 Subject: [PATCH 09/26] docs: add bare repo motivation with before/after diagrams Chapter 2 now explains why bare repos exist using an Alice-and-Bob scenario: direct push desynchronizes the working tree, bare repo in the middle decouples developers. ASCII diagrams inline, draw.io sources in assets/drawio/ (PNG export pending). Recipe trimmed to cross-reference the chapter for the full explanation. Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/drawio/git-bare-after.drawio | 61 ++++++++++++++++++++++++++ assets/drawio/git-bare-before.drawio | 46 +++++++++++++++++++ chapters/02-building-blocks.md | 63 ++++++++++++++++++++++++--- chapters/recipes/bare-repositories.md | 33 +++----------- 4 files changed, 170 insertions(+), 33 deletions(-) create mode 100644 assets/drawio/git-bare-after.drawio create mode 100644 assets/drawio/git-bare-before.drawio diff --git a/assets/drawio/git-bare-after.drawio b/assets/drawio/git-bare-after.drawio new file mode 100644 index 0000000..5b93c95 --- /dev/null +++ b/assets/drawio/git-bare-after.drawio @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/drawio/git-bare-before.drawio b/assets/drawio/git-bare-before.drawio new file mode 100644 index 0000000..bdfd83b --- /dev/null +++ b/assets/drawio/git-bare-before.drawio @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index c605147..227ac71 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -88,11 +88,64 @@ The `.git` folder contains the same structure as a bare repository. The difference is that a non-bare repository also has a working tree next to it — the place where you do your actual work. -A bare repository is designed to be a shared hub. Because it has no -working tree, nobody edits files in it directly — it only receives -changes sent from other repositories. A non-bare repository is the -opposite: it is where you do your day-to-day work — editing files, -recording snapshots, and browsing history. +### Why bare repositories exist + +Imagine two developers — Alice and Bob — working on the same project +over a local network. Each has a non-bare repository with a working +tree. There is no central server — Bob has Alice's repository set as +his remote and sends changes directly into her `.git/` directory. + +```text + Alice (non-bare) Bob (non-bare) + ┌──────────────────┐ ┌──────────────────┐ + │ Working Tree │ │ Working Tree │ + │ files from A │ │ │ + │ + uncommitted │ │ │ + ├──────────────────┤ ├──────────────────┤ + │ .git/ │ git push │ .git/ │ + │ main → B ───────│◄────────────│ main → B │ + │ (moved by push) │ │ │ + └──────────────────┘ └──────────────────┘ + ⚠ OUT OF SYNC + branch says B, files say A +``` + +The problem: when Bob sends his changes, Git updates the branch +inside Alice's `.git/` to point to Bob's latest commit. But Alice's +working tree is **not** updated — her files still reflect the old +commit, plus whatever edits she has in progress. Alice's branch and +her working tree are now out of sync. If she commits at this point, +she unknowingly **reverts Bob's changes** — because her files do not +contain them. + +Git prevents this by refusing to accept changes sent to a non-bare +repository that has the target branch checked out. + +The solution is to place a **bare repository** between the two +developers. A bare repository has no working tree — it holds only +objects and references. Because nobody edits files in it, updating a +branch is always safe. + +```text + Alice (non-bare) Shared hub (bare) Bob (non-bare) + ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ + │ Working Tree │ │ │ │ Working Tree │ + │ │ │ objects + refs │ │ │ + ├──────────────────┤ │ no working tree │ ├──────────────────┤ + │ .git/ │ │ │ │ .git/ │ + │ │◄───│ │◄───│ │ + └──────────────────┘ └──────────────────┘ └──────────────────┘ + pull push + (when ready) +``` + +With a bare repository in the middle, each developer works +independently. Bob sends his changes to the bare repository whenever +he is ready. Alice commits her own work first, then downloads Bob's +changes from the bare repository when **she** is ready. No one +reaches into anyone else's working tree. This is exactly how +hosting services like GitHub and GitLab work — every repository on +the server is bare. ## 3. Object Model diff --git a/chapters/recipes/bare-repositories.md b/chapters/recipes/bare-repositories.md index 7a4eb60..8471cb2 100644 --- a/chapters/recipes/bare-repositories.md +++ b/chapters/recipes/bare-repositories.md @@ -117,34 +117,11 @@ $ git push /tmp/dev-alice main remote: error: refusing to update checked out branch: refs/heads/main ``` -To understand why, remember that a push only updates the branch -reference inside `.git/` — it does **not** touch the working tree. -These are two separate operations, and only the first one happens. - -Imagine Alice and Bob working on the same network with **no bare -repository in between** — no GitHub, no central server. Bob has -Alice's non-bare repository configured as his remote, so he pushes -directly into her `.git/` directory. - -1. Alice checks out `main`. Her working tree has the files from - commit `A`. -2. Alice edits `report.txt` but has not committed yet. -3. Bob runs `git push alice-machine main`, which writes his new - commit `B` directly into Alice's `.git/` and updates her - reference `.git/refs/heads/main` to point to `B` — but Alice's - working tree is not updated. Her files on disk are still from - commit `A`, plus her uncommitted edits. -4. Alice's repository is now in a broken state: - - `HEAD` → `main` → commit `B` (moved by the push) - - Working tree → files from commit `A` + uncommitted edits (untouched) -5. If Alice runs `git status`, Git compares her working tree against - commit `B`. Every file Bob changed shows up as a difference — - mixed in with Alice's real edits. She cannot tell which changes - are hers and which are artifacts of the branch moving under her. - -Git prevents step 3 entirely. A bare repository avoids this problem -because there is no working tree — updating the branch reference is -always safe when there are no files to desynchronize. +Git refuses because a push updates the branch reference but not the +working tree — this would leave the two out of sync and could cause +the recipient to unknowingly revert the pushed changes on their next +commit. For a full walkthrough of the problem, see +[Building Blocks — Why bare repositories exist](../02-building-blocks.md#why-bare-repositories-exist). If you need to accept pushes on a non-bare repository (rare), you can enable it: From 74cb19a166e13539568e388a776b840f5b701e9d Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:28:43 +0300 Subject: [PATCH 10/26] docs: fix typos and add push-rejection line in bare repo section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix missing space, "thumb rule" → "rule of thumb", and restore the line explaining that Git refuses the push to prevent desync. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 108 ++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 49 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 227ac71..5a1271d 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -37,20 +37,37 @@ A repository can be **local** (on your machine) or **remote** (on a server like GitHub). Git treats both as equals — you can push to and pull from any repository you have access to. -Git supports two repository layouts — **bare** and **non-bare**. +Typically, the layout of a **local** repository has a .git +folder with all the internals, and a working tree with your project. This type +of layout is called a **non-bare repository**. The `.git` folder stores the +full history and configuration. When you clone a repository, you get a regular +repository with both the working tree and the `.git` folder. -A **bare repository** has no working tree — only the Git internals -(objects, refs, config) and no checked-out files. Hosting services like -GitHub and GitLab store repositories as bare on the server. When you -edit a file through GitHub's web interface, GitHub creates a commit -directly — it does not use a working tree. +```text +git clone project.git + +PROJECT/ +│ readme.md # Working tree — your editable files +└───.git # Repository internals (same as bare) + ├───hooks # Event scripts + ├───info # Repository metadata + ├───objects # All Git objects + │ ├───info # Object storage metadata + │ └───pack # Compressed object packs + └───refs # Named references + ├───heads # Branch tips + └───tags # Tag references +``` -> **Note:** "bare" and "remote" are not the same thing. A remote is any -> repository you connect to via URL. Remotes are *usually* bare, but a -> remote can also be a regular repository on another machine. +In contrast, the layout of remote repositories on hosting services like GitHub +and GitLab is a little bit different — they are **bare repositories**. A +**bare repository** has no working tree — only the Git internals +(objects, refs, config) and no checked-out files. When you edit a file through +GitHub's web interface, GitHub creates a commit directly — it does not use a +working tree. ```text -git init --bare project.git +git clone --bare project.git PROJECT.GIT/ ├───hooks # Scripts that run on events (pre-commit, post-merge, etc.) @@ -63,31 +80,22 @@ PROJECT.GIT/ └───tags # Tag references ``` -A **non-bare repository** (also called a regular or working repository) -is what you get when you clone or run `git init`. It has a working tree -where you create, edit and delete files, plus a hidden `.git` folder -that stores the full history and configuration. +As a rule of thumb, if you see a `.git` folder, it's a regular repository with +a working tree. If you see a folder that ends with `.git` but has no `.git` +inside it, it's a bare repository. + +Both git clone and git init can create either type of repository. By default, +they create regular repositories with a working tree. To create a bare +repository, use the `--bare` flag: ```text -git clone project.git +# creates a bare repository from a remote +$ git clone --bare -PROJECT/ -│ readme.md # Working tree — your editable files -└───.git # Repository internals (same as bare) - ├───hooks # Event scripts - ├───info # Repository metadata - ├───objects # All Git objects - │ ├───info # Object storage metadata - │ └───pack # Compressed object packs - └───refs # Named references - ├───heads # Branch tips - └───tags # Tag references +# creates a new bare repository locally +$ git init --bare ``` -The `.git` folder contains the same structure as a bare repository. -The difference is that a non-bare repository also has a working tree -next to it — the place where you do your actual work. - ### Why bare repositories exist Imagine two developers — Alice and Bob — working on the same project @@ -102,36 +110,33 @@ his remote and sends changes directly into her `.git/` directory. │ files from A │ │ │ │ + uncommitted │ │ │ ├──────────────────┤ ├──────────────────┤ - │ .git/ │ git push │ .git/ │ - │ main → B ───────│◄────────────│ main → B │ + │ .git/ │ git push │ .git/ │ + │ main → B ───────│◄─────────────│ main → B │ │ (moved by push) │ │ │ └──────────────────┘ └──────────────────┘ ⚠ OUT OF SYNC branch says B, files say A ``` -The problem: when Bob sends his changes, Git updates the branch -inside Alice's `.git/` to point to Bob's latest commit. But Alice's -working tree is **not** updated — her files still reflect the old -commit, plus whatever edits she has in progress. Alice's branch and -her working tree are now out of sync. If she commits at this point, -she unknowingly **reverts Bob's changes** — because her files do not -contain them. - -Git prevents this by refusing to accept changes sent to a non-bare -repository that has the target branch checked out. +The problem: when Bob pushes his changes, Git updates the branch +inside Alice's `.git/` to point to Bob's latest commit immediately. But Alice's +working tree is **not** updated — her files still reflect the old commit, plus +whatever edits she has in progress. Alice's branch and her working tree are +now out of sync. If she commits at this point, she unknowingly **reverts Bob's +changes** — because her files do not contain them. Git prevents this by +refusing to accept a push to a non-bare repository that has the target +branch checked out. -The solution is to place a **bare repository** between the two -developers. A bare repository has no working tree — it holds only -objects and references. Because nobody edits files in it, updating a -branch is always safe. +A popular solution to this kind of synchronization problem is to decouple the +direct push/pull between two developers and introduce an intermediary +repository that both developers push to and pull from. ```text Alice (non-bare) Shared hub (bare) Bob (non-bare) ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ Working Tree │ │ │ │ Working Tree │ - │ │ │ objects + refs │ │ │ - ├──────────────────┤ │ no working tree │ ├──────────────────┤ + │ │ │ objects + refs │ │ │ + ├──────────────────┤ │ no working tree │ ├──────────────────┤ │ .git/ │ │ │ │ .git/ │ │ │◄───│ │◄───│ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ @@ -139,9 +144,14 @@ branch is always safe. (when ready) ``` +This is called a **shared hub**. The shared hub is a bare repository — it has no +working tree, only the Git internals. Its purpose is to hold commits and +references, not to be edited directly. Because nobody edits files in it, +updating a branch is always safe. + With a bare repository in the middle, each developer works independently. Bob sends his changes to the bare repository whenever -he is ready. Alice commits her own work first, then downloads Bob's +he is ready. Alice commits her own work first, then pulls Bob's changes from the bare repository when **she** is ready. No one reaches into anyone else's working tree. This is exactly how hosting services like GitHub and GitLab work — every repository on From 00e49cacad619e3221a478de9e134682bcb15c41 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:30:43 +0300 Subject: [PATCH 11/26] docs: simplify bare repo explanation for undergrad clarity Replace push/pull/commit with sends/downloads/snapshots to avoid forward references. Soften "target branch checked out" to "where someone is actively working". Add transition question before the solution diagram. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 35 +++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 5a1271d..f1e969a 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -100,8 +100,8 @@ $ git init --bare Imagine two developers — Alice and Bob — working on the same project over a local network. Each has a non-bare repository with a working -tree. There is no central server — Bob has Alice's repository set as -his remote and sends changes directly into her `.git/` directory. +tree. There is no central server — Bob sends his changes directly +into Alice's `.git/` directory. ```text Alice (non-bare) Bob (non-bare) @@ -110,7 +110,7 @@ his remote and sends changes directly into her `.git/` directory. │ files from A │ │ │ │ + uncommitted │ │ │ ├──────────────────┤ ├──────────────────┤ - │ .git/ │ git push │ .git/ │ + │ .git/ │ sends │ .git/ │ │ main → B ───────│◄─────────────│ main → B │ │ (moved by push) │ │ │ └──────────────────┘ └──────────────────┘ @@ -118,18 +118,19 @@ his remote and sends changes directly into her `.git/` directory. branch says B, files say A ``` -The problem: when Bob pushes his changes, Git updates the branch -inside Alice's `.git/` to point to Bob's latest commit immediately. But Alice's -working tree is **not** updated — her files still reflect the old commit, plus -whatever edits she has in progress. Alice's branch and her working tree are -now out of sync. If she commits at this point, she unknowingly **reverts Bob's -changes** — because her files do not contain them. Git prevents this by -refusing to accept a push to a non-bare repository that has the target -branch checked out. +The problem: when Bob sends his changes, Git updates the branch +inside Alice's `.git/` to point to Bob's latest commit immediately. +But Alice's working tree is **not** updated — her files still reflect +the old commit, plus whatever edits she has in progress. Alice's +branch and her working tree are now out of sync. If she records a +snapshot at this point, she unknowingly **reverts Bob's changes** — +because her files do not contain them. Git prevents this by refusing +to accept changes into a repository where someone is actively working. -A popular solution to this kind of synchronization problem is to decouple the -direct push/pull between two developers and introduce an intermediary -repository that both developers push to and pull from. +What if the two developers never touch each other's repositories +directly? A popular solution to this kind of synchronization problem +is to introduce an intermediary repository that both developers send +changes to and download changes from. ```text Alice (non-bare) Shared hub (bare) Bob (non-bare) @@ -140,7 +141,7 @@ repository that both developers push to and pull from. │ .git/ │ │ │ │ .git/ │ │ │◄───│ │◄───│ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ - pull push + download send (when ready) ``` @@ -151,8 +152,8 @@ updating a branch is always safe. With a bare repository in the middle, each developer works independently. Bob sends his changes to the bare repository whenever -he is ready. Alice commits her own work first, then pulls Bob's -changes from the bare repository when **she** is ready. No one +he is ready. Alice records her own snapshots first, then downloads +Bob's changes from the bare repository when **she** is ready. No one reaches into anyone else's working tree. This is exactly how hosting services like GitHub and GitLab work — every repository on the server is bare. From 821c7f09028520399c4ee7dc1182adee30cc8ec8 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:34:39 +0300 Subject: [PATCH 12/26] docs: restore push/pull terminology in bare repo section Push and pull are introduced in Chapter 1, so safe to use here. Replaces sends/downloads/snapshots with push/pull/commit throughout. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index f1e969a..42eb13e 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -37,6 +37,9 @@ A repository can be **local** (on your machine) or **remote** (on a server like GitHub). Git treats both as equals — you can push to and pull from any repository you have access to. + +### Repository Layouts + Typically, the layout of a **local** repository has a .git folder with all the internals, and a working tree with your project. This type of layout is called a **non-bare repository**. The `.git` folder stores the @@ -100,7 +103,7 @@ $ git init --bare Imagine two developers — Alice and Bob — working on the same project over a local network. Each has a non-bare repository with a working -tree. There is no central server — Bob sends his changes directly +tree. There is no central server — Bob pushes his changes directly into Alice's `.git/` directory. ```text @@ -110,7 +113,7 @@ into Alice's `.git/` directory. │ files from A │ │ │ │ + uncommitted │ │ │ ├──────────────────┤ ├──────────────────┤ - │ .git/ │ sends │ .git/ │ + │ .git/ │ git push │ .git/ │ │ main → B ───────│◄─────────────│ main → B │ │ (moved by push) │ │ │ └──────────────────┘ └──────────────────┘ @@ -118,19 +121,19 @@ into Alice's `.git/` directory. branch says B, files say A ``` -The problem: when Bob sends his changes, Git updates the branch +The problem: when Bob pushes his changes, Git updates the branch inside Alice's `.git/` to point to Bob's latest commit immediately. But Alice's working tree is **not** updated — her files still reflect the old commit, plus whatever edits she has in progress. Alice's -branch and her working tree are now out of sync. If she records a -snapshot at this point, she unknowingly **reverts Bob's changes** — -because her files do not contain them. Git prevents this by refusing -to accept changes into a repository where someone is actively working. +branch and her working tree are now out of sync. If she commits at +this point, she unknowingly **reverts Bob's changes** — because her +files do not contain them. Git prevents this by refusing to accept +a push into a repository where someone is actively working. What if the two developers never touch each other's repositories directly? A popular solution to this kind of synchronization problem -is to introduce an intermediary repository that both developers send -changes to and download changes from. +is to introduce an intermediary repository that both developers push +to and pull from. ```text Alice (non-bare) Shared hub (bare) Bob (non-bare) @@ -141,19 +144,19 @@ changes to and download changes from. │ .git/ │ │ │ │ .git/ │ │ │◄───│ │◄───│ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ - download send + pull push (when ready) ``` This is called a **shared hub**. The shared hub is a bare repository — it has no working tree, only the Git internals. Its purpose is to hold commits and -references, not to be edited directly. Because nobody edits files in it, +references, not to be edited directly. Because nobody edits files in it, updating a branch is always safe. With a bare repository in the middle, each developer works -independently. Bob sends his changes to the bare repository whenever -he is ready. Alice records her own snapshots first, then downloads -Bob's changes from the bare repository when **she** is ready. No one +independently. Bob pushes his changes to the bare repository whenever +he is ready. Alice commits her own work first, then pulls Bob's +changes from the bare repository when **she** is ready. No one reaches into anyone else's working tree. This is exactly how hosting services like GitHub and GitLab work — every repository on the server is bare. From 0ecb23e299357b905462e5fa40472dd95b77de51 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:37:21 +0300 Subject: [PATCH 13/26] docs: clarify that silent revert has no error or warning Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 42eb13e..47c2bea 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -126,8 +126,8 @@ inside Alice's `.git/` to point to Bob's latest commit immediately. But Alice's working tree is **not** updated — her files still reflect the old commit, plus whatever edits she has in progress. Alice's branch and her working tree are now out of sync. If she commits at -this point, she unknowingly **reverts Bob's changes** — because her -files do not contain them. Git prevents this by refusing to accept +this point, she unknowingly **reverts Bob's changes** without any +error or warning — because her files do not contain them. Git prevents this by refusing to accept a push into a repository where someone is actively working. What if the two developers never touch each other's repositories From cc7df7d3b4a4b1d8c44cd6ad84011729c730b7fe Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:40:14 +0300 Subject: [PATCH 14/26] docs: add ASCII diagram showing silent revert of Bob's changes Shows how Alice's commit C has B as parent but its snapshot comes from A's files, effectively undoing Bob's work in commit B. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 47c2bea..dd9e64c 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -125,10 +125,32 @@ The problem: when Bob pushes his changes, Git updates the branch inside Alice's `.git/` to point to Bob's latest commit immediately. But Alice's working tree is **not** updated — her files still reflect the old commit, plus whatever edits she has in progress. Alice's -branch and her working tree are now out of sync. If she commits at -this point, she unknowingly **reverts Bob's changes** without any -error or warning — because her files do not contain them. Git prevents this by refusing to accept -a push into a repository where someone is actively working. +branch and her working tree are now out of sync. + +If she commits at this point, she unknowingly **reverts Bob's changes** +without any error or warning — because her files do not contain them. + +```text + Commit A Commit B Commit C + (original) (Bob's work) (Alice's commit) +┌───────────┐ ┌───────────┐ ┌───────────┐ +│ readme.md │ │ readme.md │ │ readme.md │ +│ config.txt│ │ config.txt│ ←── │ config.txt│ Bob's changes +│ │ │ (changed) │ ⚠ │ │ silently gone +└───────────┘ └───────────┘ └───────────┘ + + A ◄─────────── B ◄─────────── C + (Bob) (Alice) + main ──→ C +``` + +Alice's commit `C` is based on commit `B`, but its snapshot comes +from Alice's working tree — which still has the files from `A`. The +result: commit `C` contains Alice's edits but none of Bob's. Bob's +changes from `B` are effectively undone. + +Git prevents this by refusing to accept a push into a repository +where someone is actively working. What if the two developers never touch each other's repositories directly? A popular solution to this kind of synchronization problem From 05b286ec0958be1ce1daed877f91f95f78a1a735 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:40:51 +0300 Subject: [PATCH 15/26] Revert "docs: add ASCII diagram showing silent revert of Bob's changes" This reverts commit cc7df7d3b4a4b1d8c44cd6ad84011729c730b7fe. --- chapters/02-building-blocks.md | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index dd9e64c..47c2bea 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -125,32 +125,10 @@ The problem: when Bob pushes his changes, Git updates the branch inside Alice's `.git/` to point to Bob's latest commit immediately. But Alice's working tree is **not** updated — her files still reflect the old commit, plus whatever edits she has in progress. Alice's -branch and her working tree are now out of sync. - -If she commits at this point, she unknowingly **reverts Bob's changes** -without any error or warning — because her files do not contain them. - -```text - Commit A Commit B Commit C - (original) (Bob's work) (Alice's commit) -┌───────────┐ ┌───────────┐ ┌───────────┐ -│ readme.md │ │ readme.md │ │ readme.md │ -│ config.txt│ │ config.txt│ ←── │ config.txt│ Bob's changes -│ │ │ (changed) │ ⚠ │ │ silently gone -└───────────┘ └───────────┘ └───────────┘ - - A ◄─────────── B ◄─────────── C - (Bob) (Alice) - main ──→ C -``` - -Alice's commit `C` is based on commit `B`, but its snapshot comes -from Alice's working tree — which still has the files from `A`. The -result: commit `C` contains Alice's edits but none of Bob's. Bob's -changes from `B` are effectively undone. - -Git prevents this by refusing to accept a push into a repository -where someone is actively working. +branch and her working tree are now out of sync. If she commits at +this point, she unknowingly **reverts Bob's changes** without any +error or warning — because her files do not contain them. Git prevents this by refusing to accept +a push into a repository where someone is actively working. What if the two developers never touch each other's repositories directly? A popular solution to this kind of synchronization problem From 0f7372a864fc7ce0f0d1cd3e98224a06516d2c3d Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:42:34 +0300 Subject: [PATCH 16/26] docs: add draw.io diagram for silent overwrite of commit B Three commit cards (A, B, C) showing file snapshots side by side. Green highlights Bob's change in B, red highlights the same file reverted in C. Legend explains the markers. Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/drawio/git-bare-overwrite.drawio | 79 +++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 assets/drawio/git-bare-overwrite.drawio diff --git a/assets/drawio/git-bare-overwrite.drawio b/assets/drawio/git-bare-overwrite.drawio new file mode 100644 index 0000000..2c820c2 --- /dev/null +++ b/assets/drawio/git-bare-overwrite.drawio @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From de362addecc7347ec520dc2fd9381b716007056f Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:44:37 +0300 Subject: [PATCH 17/26] =?UTF-8?q?docs:=20fix=20overwrite=20diagram=20?= =?UTF-8?q?=E2=80=94=20all=20commit=20cards=20gray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Color now only at file level: green = changed, red = reverted. Commit cards are all neutral gray so the two meanings don't clash. Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/drawio/git-bare-overwrite.drawio | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/drawio/git-bare-overwrite.drawio b/assets/drawio/git-bare-overwrite.drawio index 2c820c2..664ede4 100644 --- a/assets/drawio/git-bare-overwrite.drawio +++ b/assets/drawio/git-bare-overwrite.drawio @@ -23,7 +23,7 @@ - + @@ -37,7 +37,7 @@ - + From b8defbd4a9bd0c36ebb38a588e896c2d93ef33a5 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:46:21 +0300 Subject: [PATCH 18/26] docs: rebuild before/after draw.io diagrams Consistent gray for .git/ boxes across both diagrams. Before diagram uses red arrow and desync label. After diagram uses neutral arrows with push/pull labels and "(when ready)" for Alice's pull. Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/drawio/git-bare-after.drawio | 46 +++++++++++++++++----------- assets/drawio/git-bare-before.drawio | 40 ++++++++++++++---------- 2 files changed, 52 insertions(+), 34 deletions(-) diff --git a/assets/drawio/git-bare-after.drawio b/assets/drawio/git-bare-after.drawio index 5b93c95..0d50fc4 100644 --- a/assets/drawio/git-bare-after.drawio +++ b/assets/drawio/git-bare-after.drawio @@ -1,59 +1,69 @@ - + - + + + - + - + - - + + + + - + - + - - + + + + - + - + - - + + + + - + + + - - + + - + diff --git a/assets/drawio/git-bare-before.drawio b/assets/drawio/git-bare-before.drawio index bdfd83b..6c46b42 100644 --- a/assets/drawio/git-bare-before.drawio +++ b/assets/drawio/git-bare-before.drawio @@ -1,44 +1,52 @@ - + - + + + - + - + - - + + + + + + + + + - + - + - + - - + + - + + + - - - - + From 068c85d5a57893bb12a5dd29ec8ece7127de2da5 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:50:27 +0300 Subject: [PATCH 19/26] docs: export PNGs and replace ASCII diagrams with images Export all three bare repo diagrams from draw.io at 2x scale. Replace ASCII art in Chapter 2 with image references. The overwrite diagram PNG is ready for use when the text references it. Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/images/git-bare-after.png | Bin 0 -> 36790 bytes assets/images/git-bare-before.png | Bin 0 -> 47061 bytes assets/images/git-bare-overwrite.png | Bin 0 -> 43541 bytes chapters/02-building-blocks.md | 28 ++------------------------- 4 files changed, 2 insertions(+), 26 deletions(-) create mode 100644 assets/images/git-bare-after.png create mode 100644 assets/images/git-bare-before.png create mode 100644 assets/images/git-bare-overwrite.png diff --git a/assets/images/git-bare-after.png b/assets/images/git-bare-after.png new file mode 100644 index 0000000000000000000000000000000000000000..78e1fd3db81ddb4454a38b5b922b191d692c65f6 GIT binary patch literal 36790 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 literal 0 HcmV?d00001 diff --git a/assets/images/git-bare-before.png b/assets/images/git-bare-before.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0a55718dab21f0ff2321e436b2be62f2941307 GIT binary patch literal 47061 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 Kugc~A{_t=6e+E(j literal 0 HcmV?d00001 diff --git a/assets/images/git-bare-overwrite.png b/assets/images/git-bare-overwrite.png new file mode 100644 index 0000000000000000000000000000000000000000..056e7fc892fcce1d65c5c0ceff0d57e793a099d7 GIT binary patch literal 43541 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�VBWUWcI$zc{tSO0@2h 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 Date: Sun, 26 Apr 2026 11:53:30 +0300 Subject: [PATCH 20/26] docs: add overwrite diagram after silent revert explanation Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 6085906..144b90d 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -114,8 +114,9 @@ But Alice's working tree is **not** updated — her files still reflect the old commit, plus whatever edits she has in progress. Alice's branch and her working tree are now out of sync. If she commits at this point, she unknowingly **reverts Bob's changes** without any -error or warning — because her files do not contain them. Git prevents this by refusing to accept -a push into a repository where someone is actively working. +error or warning — because her files do not contain them. + +![Silent overwrite of commit B](../assets/images/git-bare-overwrite.png) What if the two developers never touch each other's repositories directly? A popular solution to this kind of synchronization problem @@ -127,7 +128,7 @@ to and pull from. This is called a **shared hub**. The shared hub is a bare repository — it has no working tree, only the Git internals. Its purpose is to hold commits and references, not to be edited directly. Because nobody edits files in it, -updating a branch is always safe. +updating a branch is always safe. With a bare repository in the middle, each developer works independently. Bob pushes his changes to the bare repository whenever From 91f6ee12f2352abb9cb66df4df8b6967e7331505 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:56:00 +0300 Subject: [PATCH 21/26] docs: explain core.bare flag as the protection mechanism Replace vague "refuses to accept a push" with concrete explanation of the core.bare config flag and how it controls push acceptance. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 144b90d..c3a7f9d 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -118,6 +118,12 @@ error or warning — because her files do not contain them. ![Silent overwrite of commit B](../assets/images/git-bare-overwrite.png) +Git prevents this with a configuration flag called `core.bare`. When +a repository is not bare, Git rejects incoming pushes to protect the +working tree. Only bare repositories — where `core.bare` is set to +`true` — accept pushes, because there is no working tree to +desynchronize. + What if the two developers never touch each other's repositories directly? A popular solution to this kind of synchronization problem is to introduce an intermediary repository that both developers push From d63e2abd693bba80c8ce06d8db9d86ffa1ce2f91 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:56:55 +0300 Subject: [PATCH 22/26] docs: show core.bare flag in config file dump Add ASCII output of a bare repo's config file so the reader can see where the flag lives and what it looks like. Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index c3a7f9d..4779dfc 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -118,11 +118,21 @@ error or warning — because her files do not contain them. ![Silent overwrite of commit B](../assets/images/git-bare-overwrite.png) -Git prevents this with a configuration flag called `core.bare`. When -a repository is not bare, Git rejects incoming pushes to protect the -working tree. Only bare repositories — where `core.bare` is set to -`true` — accept pushes, because there is no working tree to -desynchronize. +Git prevents this with a configuration flag called `core.bare`, stored +inside the repository's config file: + +```text +$ cat project.git/config +[core] + repositoryformatversion = 0 + filemode = true + bare = true +``` + +When `bare = true`, Git accepts incoming pushes — there is no working +tree to desynchronize. When `bare = false` (the default for non-bare +repositories), Git rejects pushes to protect the working tree. The +`git init --bare` command sets this flag automatically. What if the two developers never touch each other's repositories directly? A popular solution to this kind of synchronization problem From aa070aab06c10374b24934b54c6c139aa2667f7d Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 11:58:41 +0300 Subject: [PATCH 23/26] =?UTF-8?q?docs:=20invert=20core.bare=20explanation?= =?UTF-8?q?=20=E2=80=94=20lead=20with=20false=20rejects=20push?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 4779dfc..0da776f 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -118,22 +118,6 @@ error or warning — because her files do not contain them. ![Silent overwrite of commit B](../assets/images/git-bare-overwrite.png) -Git prevents this with a configuration flag called `core.bare`, stored -inside the repository's config file: - -```text -$ cat project.git/config -[core] - repositoryformatversion = 0 - filemode = true - bare = true -``` - -When `bare = true`, Git accepts incoming pushes — there is no working -tree to desynchronize. When `bare = false` (the default for non-bare -repositories), Git rejects pushes to protect the working tree. The -`git init --bare` command sets this flag automatically. - What if the two developers never touch each other's repositories directly? A popular solution to this kind of synchronization problem is to introduce an intermediary repository that both developers push @@ -154,6 +138,24 @@ reaches into anyone else's working tree. This is exactly how hosting services like GitHub and GitLab work — every repository on the server is bare. +Git prevents this by design via a configuration flag called `core.bare`, stored +inside the repository's config file: + +```text +$ cat project.git/config +[core] + repositoryformatversion = 0 + filemode = true + bare = true +``` + +In a non-bare repository, `bare = false` — the default. Git checks +this flag when receiving a push: if it is `false`, the push is +rejected to protect the working tree. Only bare repositories have +`bare = true`, which tells Git there is no working tree and pushes +are safe to accept. The `git init --bare` command sets this flag +automatically. + ## 3. Object Model Every time you commit, Git takes a **snapshot** — a complete picture of From 8b276e1e7d4ae30e566ca1a5b132aca347ccb05b Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 12:00:26 +0300 Subject: [PATCH 24/26] docs: add H3 heading for core.bare flag section Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 0da776f..f496d16 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -138,7 +138,9 @@ reaches into anyone else's working tree. This is exactly how hosting services like GitHub and GitLab work — every repository on the server is bare. -Git prevents this by design via a configuration flag called `core.bare`, stored +### The core.bare flag + +Git controls this with a configuration flag called `core.bare`, stored inside the repository's config file: ```text From 03e75f5b776530a17a66ef9419c44465d3d366ee Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 12:03:55 +0300 Subject: [PATCH 25/26] =?UTF-8?q?docs:=20fix=20direction=20of=20overwrite?= =?UTF-8?q?=20=E2=80=94=20Alice=20overwrites=20Bob,=20not=20vice=20versa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index f496d16..75cb501 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -158,6 +158,14 @@ rejected to protect the working tree. Only bare repositories have are safe to accept. The `git init --bare` command sets this flag automatically. +Now, when Bob pushes to Alice's repository, Git checks `core.bare` and +rejects the push because it is not a bare repository. This prevents +Alice from silently overwriting Bob's changes on her next commit. + +Bob must push to a shared hub (a bare repository) instead, and Alice must +pull from it. This way, both developers have control over when they receive +each other's changes, and there are no surprises. + ## 3. Object Model Every time you commit, Git takes a **snapshot** — a complete picture of From ad4531b1ae6d0f978530ac4e3080b14779ee2767 Mon Sep 17 00:00:00 2001 From: Branimir Georgiev Date: Sun, 26 Apr 2026 12:07:53 +0300 Subject: [PATCH 26/26] =?UTF-8?q?docs:=20polish=20repository=20section=20?= =?UTF-8?q?=E2=80=94=20trailing=20spaces,=20repetition,=20wording?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove trailing spaces, reduce .git folder repetition in opening paragraph, replace "checked-out files" with "editable files". Co-Authored-By: Claude Opus 4.6 (1M context) --- chapters/02-building-blocks.md | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/chapters/02-building-blocks.md b/chapters/02-building-blocks.md index 75cb501..46a7148 100644 --- a/chapters/02-building-blocks.md +++ b/chapters/02-building-blocks.md @@ -37,21 +37,20 @@ A repository can be **local** (on your machine) or **remote** (on a server like GitHub). Git treats both as equals — you can push to and pull from any repository you have access to. - ### Repository Layouts -Typically, the layout of a **local** repository has a .git +Typically, the layout of a **local** repository has a `.git` folder with all the internals, and a working tree with your project. This type -of layout is called a **non-bare repository**. The `.git` folder stores the -full history and configuration. When you clone a repository, you get a regular -repository with both the working tree and the `.git` folder. +of layout is called a **non-bare repository**. The `.git` folder stores the +full history and configuration. When you clone a repository, you get a +non-bare repository by default. ```text git clone project.git PROJECT/ │ readme.md # Working tree — your editable files -└───.git # Repository internals (same as bare) +└───.git # Repository internals ├───hooks # Event scripts ├───info # Repository metadata ├───objects # All Git objects @@ -62,15 +61,15 @@ PROJECT/ └───tags # Tag references ``` -In contrast, the layout of remote repositories on hosting services like GitHub -and GitLab is a little bit different — they are **bare repositories**. A +In contrast, the layout of remote repositories on hosting services like GitHub +and GitLab is different — they are **bare repositories**. A **bare repository** has no working tree — only the Git internals -(objects, refs, config) and no checked-out files. When you edit a file through -GitHub's web interface, GitHub creates a commit directly — it does not use a +(objects, refs, config) and no editable files. When you edit a file through +GitHub's web interface, GitHub creates a commit directly — it does not use a working tree. ```text -git clone --bare project.git +git init --bare project.git PROJECT.GIT/ ├───hooks # Scripts that run on events (pre-commit, post-merge, etc.) @@ -87,8 +86,8 @@ As a rule of thumb, if you see a `.git` folder, it's a regular repository with a working tree. If you see a folder that ends with `.git` but has no `.git` inside it, it's a bare repository. -Both git clone and git init can create either type of repository. By default, -they create regular repositories with a working tree. To create a bare +Both `git clone` and `git init` can create either type of repository. By default, +they create regular repositories with a working tree. To create a bare repository, use the `--bare` flag: ```text @@ -128,7 +127,7 @@ to and pull from. This is called a **shared hub**. The shared hub is a bare repository — it has no working tree, only the Git internals. Its purpose is to hold commits and references, not to be edited directly. Because nobody edits files in it, -updating a branch is always safe. +updating a branch is always safe. With a bare repository in the middle, each developer works independently. Bob pushes his changes to the bare repository whenever @@ -162,7 +161,7 @@ Now, when Bob pushes to Alice's repository, Git checks `core.bare` and rejects the push because it is not a bare repository. This prevents Alice from silently overwriting Bob's changes on her next commit. -Bob must push to a shared hub (a bare repository) instead, and Alice must +Bob must push to a shared hub (a bare repository) instead, and Alice must pull from it. This way, both developers have control over when they receive each other's changes, and there are no surprises.