我的主目录中有许多受 git 版本控制的文件。
我的 emacs 设置、zsh 源文件、博士论文等。
所有内容都位于主目录根目录下的一个巨大 git repo 中。(当然,文件本身位于许多不同的目录中。)
我正在考虑使用filter-branch
拆分 repo 来这样我的论文提交就不会被我的.emacs
提交所污染,等等。
总的来说,这是一个好主意吗?我不想丢失任何历史记录。
我是否必须将我的.gitconfig
文件复制到获得 repo 的每个目录中?
而且,如果我不小心git add foo.txt
进入了之前的目录git init
,它会在 git 在我的目录树中漫游时被暂存到第一个找到的仓库中吗?或者可以预防这种情况吗?
答案1
如果您想将您的存储库拆分为几个新的存储库,那么您将无法使用filter-branch
,因为它基本上是一个rebase
在单个存储库内运行的强大功能。
您无法拥有多个存储库,同时仍保留历史记录,因为历史记录由涉及原始存储库中所有版本文件的提交组成。因此,恐怕您别无选择,只能从头开始创建多个存储库。当然,您可以存档原始存储库,以备不时之需。
我绝对会避免在工作目录中的任何地方创建 Git 存储库,即git init
在 Git 中已经版本化的目录中创建。虽然这是可能的,但需要对--git-dir
and/or--work-tree
参数格外小心。相反,在创建多个存储库之前,将目录移动$HOME/.git
到其他不会被版本控制的目录在不同的目录中。
该.gitconfig
文件是您的每个用户的Git 配置文件默认情况下,它位于您的$HOME
。由于您的主目录是您的工作目录,您可能认为每个工作目录都需要一个这样的文件,但实际上不需要。每个存储库的配置文件是.git/config
。