From 052a838bc1b9fea3aedc3da9c73378fe90373f4f Mon Sep 17 00:00:00 2001 From: Speculator55005 <50082482+fas89@users.noreply.github.com> Date: Mon, 14 Sep 2026 21:48:13 +0200 Subject: [PATCH] fix: untrack a node_modules symlink carrying an absolute local path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `node_modules` was committed as a **symlink** (mode 120000) whose content is an absolute path on one contributor's machine. A fresh clone therefore gets a dangling link pointing at a directory that does not exist, and the path itself is published. `.gitignore` already had `node_modules/`. The trailing slash matches a DIRECTORY, and this is a symlink with that name, so the ignore rule never applied and `git add -A` picked it up. Both forms are now listed. How it got here, since the mechanism matters more than the file: the docs branches were built in parallel `git worktree` checkouts, and each worktree had `node_modules` symlinked to the main checkout so the VuePress build would run without a second install. `git add -A` in one of those worktrees then staged the link. The lesson is not "be careful with add -A" but that the ignore rule was shaped for the wrong object type all along — any contributor doing the same thing would have hit it. No history rewrite: the path is a local directory name, not a credential, and rewriting a public repo's history invalidates every clone and fork. --- .gitignore | 1 + node_modules | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 120000 node_modules diff --git a/.gitignore b/.gitignore index 1fdaaad..b4abbe3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Dependencies node_modules/ +node_modules # VuePress build output docs/.vuepress/dist/ diff --git a/node_modules b/node_modules deleted file mode 120000 index 4305c92..0000000 --- a/node_modules +++ /dev/null @@ -1 +0,0 @@ -/Users/speculator55005/Documents/open-source-community/forge_docs/node_modules \ No newline at end of file