0

我想使用 Git 存储库或子存储库,例如 Mercurial Share 扩展

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

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

我怎样才能初始化一个 repoanother以便它与 repo 共享存储库orig

我需要这个用于我想作为子存储库包含的大型库。回购有数百兆,所以我想重用一些文件夹。

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

4

2 回答 2

2

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

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

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

repo-copy1和存储库中的大多数文件repo-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 等价物似乎也被称为 that

于 2011-11-16T12:03:05.873 回答
1

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

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吗?

于 2011-11-16T11:19:47.047 回答