From 020c1e77489b772f854bb3288b9c8d2818a6bf9d Mon Sep 17 00:00:00 2001
From: EuAndreh <eu@euandre.org>
Date: Fri, 18 Apr 2025 02:17:12 -0300
Subject: git mv src/content/* src/content/en/

---
 src/content/en/tils/2020/08/14/browse-git.adoc | 76 ++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 src/content/en/tils/2020/08/14/browse-git.adoc

(limited to 'src/content/en/tils/2020/08/14/browse-git.adoc')

diff --git a/src/content/en/tils/2020/08/14/browse-git.adoc b/src/content/en/tils/2020/08/14/browse-git.adoc
new file mode 100644
index 0000000..6b3ff6d
--- /dev/null
+++ b/src/content/en/tils/2020/08/14/browse-git.adoc
@@ -0,0 +1,76 @@
+= Browse a git repository at a specific commit
+:categories: git
+
+I commonly use tools like `git log` together with `git show` when inspecting
+past changes in a repository:
+
+[source,sh]
+----
+git log
+# search for a the commit I'm looking for
+git show <my-commit>
+# see the diff for the commit
+----
+
+But I also wanted to not only be able to look at the diff of a specific commit,
+but to browse the whole repository at that specific commit.
+
+I used to accomplish it the "brute force" way: clone the whole repository in
+another folder and checkout the commit there:
+
+[source,sh]
+----
+git clone <original-repo> /tmp/tmp-repo-clone
+cd /tmp-repo-clone
+git checkout <my-commit>
+----
+
+But git itself allows we to specific the directory of the checkout by using the
+`--work-tree` global git flag.  This is what `man git` says about it:
+
+[source,text]
+----
+--work-tree=<path>
+    Set the path to the working tree. It can be an absolute path or a path relative to the current working
+    directory. This can also be controlled by setting the GIT_WORK_TREE environment variable and the
+    core.worktree configuration variable (see core.worktree in git-config(1) for a more detailed
+    discussion).
+----
+
+So it allows us to set the desired path of the working tree.  So if we want to
+copy the contents of the current working tree into `copy/`:
+
+[source,sh]
+----
+mkdir copy
+git --work-tree=copy/ checkout .
+----
+
+After that `copy/` will contain a replica of the code in HEAD.  But to checkout
+a specific, we need some extra parameters:
+
+[source,sh]
+----
+git --work-tree=<dir> checkout <my-commit> -- .
+----
+
+There's an extra `-- .` at the end, which initially looks like we're sending
+Morse signals to git, but we're actually saying to `git-checkout` which sub
+directory of `<my-commit>` we want to look at.  Which means we can do something
+like:
+
+[source,sh]
+----
+git --work-tree=<dir> checkout <my-commit> -- src/
+----
+
+And with that `<dir>` will only contain what was inside `src/` at `<commit>`.
+
+After any of those checkouts, you have to `git reset .` to reset your current
+staging area back to what it was before the checkout.
+
+== References
+
+:so-link: https://stackoverflow.com/a/16493707
+
+. {so-link}[GIT: Checkout to a specific folder] (StackOverflow)
-- 
cgit v1.2.3

