如何在多个项目中共享.git文件夹?

时间:2011-11-16 11:15:49

标签: git mercurial git-submodules mercurial-subrepos

我想使用Git存储库或子存储库like in Mercurial Share extension

所以,这就是我所拥有的:

mkdir orig
cd orig
echo "osthuaosteh" > abc
git init --shared
git add abc
git commit -m 'init'
cd ..
mkdir another

如何在another中初始化仓库,以便与orig共享存储库?

我需要这个我想要包含在子库中的大型库。 repo重达数百兆,所以我想重用一些文件夹。

更新:我希望能够在不同的工作文件夹中进行不同的修订。

2 个答案:

答案 0 :(得分:2)

我要问你的是:你真的需要共享存储库吗?

与Mercurial一样,当您进行本地克隆时,git会在存储库之间创建硬链接,从而导致额外的磁盘空间消耗很少。 E.g:

git clone http://example.org/repo repo
git clone repo repo-copy1
git clone repo repo-copy2

repo-copy1repo-copy2存储库中的大多数文件都会硬链接到repo,并且不会消耗额外的磁盘空间。只有工作副本中的文件才是实际副本。

您可以像这样确认此行为:

$ df -l
Filesystem    512-blocks      Used Available Capacity  Mounted on
/dev/disk0s2   976101344 217966872 757622472    23%    /
$ git clone --no-checkout repo repo-copy
Cloning into repo-copy...
done.
$ du -cs repo-copy/.git
63528   .
63528   total
$ df -l
Filesystem    512-blocks      Used Available Capacity  Mounted on
/dev/disk0s2   976101344 217967536 757621808    23%    /

正如您所看到的,在克隆了一个65880块存储库(每个512字节)之后,文件系统上的块计数仅减少了664个块。

如果从远程服务器克隆(子)存储库,则可能必须手动创建指向其他本地克隆的硬链接;对于Mercurial,你会使用relink扩展名; git等价物似乎也是called that

答案 1 :(得分:1)

使用路径another中的git-submodules(以及您的示例):

git init # (to make another a git-repo)
git submodule add ../orig orig # to make orig a submodule of another
git commit # to commit the addition of the submodule

。你试过git submodule --help吗?