是否可以 git clone 某个目录而不是克隆整个存储库?

是否可以 git clone 某个目录而不是克隆整个存储库?

目的是克隆https://github.com/opower/sensu-metrics-relay/tree/master/lib/sensu/extensions而不是整个目录。

git clone https://github.com/opower/sensu-metrics-relay/tree/master/lib/sensu/extensions

结果是:

Cloning into 'extensions'...
fatal: repository 'https://github.com/opower/sensu-metrics-relay.git/lib/' not found

答案1

不,不是的。

为了减少下载大小,您可以截断历史而是使用--depth=1

答案2

现代的git“子树”功能可以实现这一点。

它将创建一个新的分支,重新创建所有提交(因此有新的 ID),以便从存储库中过滤掉仅一个目录。

然后,您可以将存储库添加为远程存储库,并仅使用该分支。

您可以在以下位置找到详细说明https://medium.com/@porteneuve/mastering-git-subtrees-943d29a798ec但请注意,自从写下这些内容以来,git 中的内容已经发生了变化,现在子树是一个核心功能。

该功能的完整 git 文档位于https://git.kernel.org/pub/scm/git/git.git/plain/contrib/subtree/git-subtree.txt

第三个例子几乎正是您所需要的:

EXAMPLE 3. Extract a subtree using branch
-----------------------------------------
Suppose you have a source directory with many files and
subdirectories, and you want to extract the lib directory to its own
git project. Here's a short way to do it:

First, make the new repository wherever you want:

    $ <go to the new location>
    $ git init --bare

Back in your original directory:

    $ git subtree split --prefix=lib --annotate="(split)" -b split

Then push the new branch onto the new empty repository:

    $ git push <new-repo> split:master

但请注意,无论你做什么,你的问题在 git“意识形态”中都很奇怪,所以它有点像 XY 问题。你应该分享更多细节,说明你为什么认为你需要这样做,因为无论如何,你可能走错了路。

相关内容