0

我只想从 gitlab 中检出一个文件夹,而没有它的父文件夹和层次结构中的其他父文件夹。
我们的 gitlab 存储库结构是这样的hybris/bin/custom/asamp。还有其他与asamp文件夹平行的文件夹。我只想签出 asamp文件夹
我一直在尝试此链接上给出的解决方案 -如何仅克隆 Git 存储库的子目录?但我无法仅下载asamp文件夹,它还下载完整的层次结构,即我可以hybris/bin/custom/asamp在本地存储库中看到。请注意,其他文件夹是asamp的同级文件夹当我进行稀疏检出时没有下载,但是我不想要完整的层次结构被检出。我只想下载asamp文件夹而不是其父文件夹。
我正在使用 gitlab。

4

2 回答 2

0
git clone -n --depth 1 --filter=tree:0 u://r/l asamp; cd $_
git read-tree -um @:hybris/bin/custom/asamp
git reset --soft $(git commit-tree -p @ -m "just asamp" `git write-tree`)

将为您提供该目录的最小下载结帐。Git(但不是,我认为,像 github 这样的子集/超集替代品)甚至可以将它与最小结帐合并和-s subtree合并策略合并回来。

要将您的工作重新插入上游历史记录,您需要使用该子树合并策略。git branch会告诉你你开始的分支的名称,我假设它是master.

$ git branch
* asamp
  master
$

现在制作一个无签出的临时克隆,并将您的工作合并到上游主服务器而不签出:

git clone -nsb master -o local `mktemp -d`; cd $_
git reset -q
git merge -s subtree asamp

将其推回您的本地仓库:

git push local master
cd -

并将其推回您的上游:

git push origin master
于 2020-12-02T22:20:20.343 回答
0

在您链接的帖子中:答案使用了一些--filter=blob:none需要 git服务器支持的选项(即:) 。

这个答案的作者强调Github现在支持它,而且它的支持似乎是最近的——提到“Github支持它”是作者在2020-09-18(两个月前)添加的,我没有扫描github 的变更日志以查看他们添加支持的确切日期。

您必须检查 Gitlab(或 Gitlab 社区版,如果您使用的是该版本)是否特别支持此功能。如果没有:仅通过 git 命令下载“仅该文件夹”将没有简单的方法。


另一方面,常规 Gitlab 的 Web GUI 允许您浏览到任何提交中的任何子目录,并下载该子目录(“克隆”按钮旁边的下载图标,然后选择“下载此目录”选项)。

弄清楚下载 url 是如何构建的,您可以使用任何 Web 客户端下载相同的存档(例如:curlwget...)

于 2020-12-02T13:16:32.810 回答