I made git-dupe to solve the problem where I have notes, skills, and agent instructions that are part of my personal workflow, so I do not want them committed to the public repo, but at the same time, I want them to be in the project at the correct locations (e.g., AGENTS.md file locations matter), and these files cannot be simply gitignored because I want versioning for them.
The solution that I've come upon is versioning those agent files in another repo, say <private-repo> (this repo is private to me and holds the history for my agent files). The project itself is open to the public in another <public-repo>. I overlap the two repos to solve the problem (i.e., they share the same worktree).
$ git status --short # the public repo
?? AGENTS.md
?? notes/
$ git dupe init # the private repo
Initialized empty Git repository in /home/brian/code/project/.git/dupe/
$ git dupe add notes/ AGENTS.md # the private repo
hint: notes is now hidden from the project's Git; run from the root, 'git dupe unhide -- notes' stops hiding it
$ git dupe commit -m "Notes and agent instructions" # the private repo
[main (root-commit) 3eb3af9] Notes and agent instructions
3 files changed, 3 insertions(+)
create mode 100644 .gitdupe
create mode 100644 AGENTS.md
create mode 100644 notes/todo.md
$ git status --short # the public repo: nothing
$ git dupe log --oneline # the private repo: your files
3eb3af9 Notes and agent instructions
In short, git-dupe allows two Git repos to share the same worktree, while using native Git for most operations. Most git-dupe commands behave just like normal Git commands, operating on the private repo instead.git-dupe currently supports Linux and macOS, and is under the MIT License; the git-dupe repo contains much more extensive technical documentation documentation for those who are interested. If you have any feedback/questions about git-dupe, feel free to message. I hope it helps!
Fun fact: the git-dupe project itself is using git-dupe for versioning.