要将任何目录转换为Git存储库,我们运行:
$ git init
Initialized empty Git repository in .git/
这是否意味着仅为单个目录创建了git存储库?
我可以为根目录/
之外的多个不必共享祖先目录的目录创建git存储库吗?例如,我们可以为~/dir1/dir2/dir3
和~/dir4/dir5
创建存储库吗?我们可以为~/dir1/dir2/dir3
和/dir4/dir5
创建存储库吗?
谢谢。
答案 0 :(得分:1)
不。或严格来说,一个git存储库维护着一个目录树,因此它不能有多个“根目录”。
您有很多解决方案,但是所有这些都打破了拥有一个存储库的想法。例如,
/
变成存储库,并根据需要忽略所有内容但是,最后,为什么要将文件放到同一存储库中,同时又将它们放在不同的位置?
答案 1 :(得分:1)
是的,您只需要告诉Git您正在做什么,这与通常的设置不同,您已经提供了不寻常的位,但是很简单。
Git不需要将存储库或其工作树放在任何地方。如果您没有明确告诉它,它有一种通常的查找方法,但是您说您想要主目录的这两个子目录的历史记录。对于一次性,通常使用命令选项将Git指向零件比较容易,当您做很多事情时,可以轻松地将Git覆盖进来。所以:
myrepo=~/d123-d45-archive
git init --bare "$myrepo"
GIT_WORK_TREE=~ git -C "$myrepo" add dir1/dir2/dir3 dir4/dir5
GIT_WORK_TREE=~ git -C "$myrepo" commit -m 'Initial commit of dir1/dir2/dir3 and dir4/dir5'
现在:在该裸仓库外没有任何迹象表明Git跟踪了您主目录中某些内容的数据,因此,当您要使用它时,必须告诉Git块在哪里。相当于上面的GIT_WORK_TREE
的参数是--work-tree ~
,相当于-C "$myrepo"
的环境是GIT_DIR=$myrepo
,如果要对它们进行批处理,例如
( export GIT_DIR=$myrepo GIT_WORK_TREE=~
git add dir1/dir2/dir3 dir4/dir5
git commit -m 'new snapshot'
)
有很多方法可以使这个变得方便,您可以添加一个git别名来自动使用该对
git config --global alias.homedir \!'git -C ~/d123-d45-archive --work-tree ~'
,然后您可以git homedir diff
。要设置存储库以使自反git add .
不会自动添加所有内容,最简单的方法是
mkdir info
printf >info/exclude %s\\n '*' '!*/' '!dir1/dir2/dir3/**' '!dir4/dir5/**'
该回购中的。您可以有多个存储库以这种方式跟踪任何树的不同甚至重叠部分,这意味着您可以自己跟踪所有部分,要小心一点。
请注意,像这样将Git明确指向上下文会绕过其所有合理上下文检查,Git通常只会对文件系统进行合理的操作。您在这里处于“半合理”的境地,人们会这样做,例如跟踪/etc
目录,而无需触摸/etc
目录本身,这既简单又有用,但是会出错clean
不能清空/etc
的未跟踪部分,因为您不能这样做,这不是错误的。您的主目录并非如此。
在某些时候,您需要设置一个仓库来跟踪特定于git的dotfile。可以说这是正确的方法:-)