我只想从 gitlab 中检出一个文件夹,而没有它的父文件夹和层次结构中的其他父文件夹。
我们的 gitlab 存储库结构是这样的hybris/bin/custom/asamp
。还有其他与asamp文件夹平行的文件夹。我只想签出 asamp文件夹
我一直在尝试此链接上给出的解决方案 -如何仅克隆 Git 存储库的子目录?但我无法仅下载asamp文件夹,它还下载完整的层次结构,即我可以hybris/bin/custom/asamp
在本地存储库中看到。请注意,其他文件夹是asamp的同级文件夹当我进行稀疏检出时没有下载,但是我不想要完整的层次结构被检出。我只想下载asamp文件夹而不是其父文件夹。
我正在使用 gitlab。
2 回答
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
在您链接的帖子中:答案使用了一些--filter=blob:none
需要 git服务器支持的选项(即:) 。
这个答案的作者强调Github现在支持它,而且它的支持似乎是最近的——提到“Github支持它”是作者在2020-09-18(两个月前)添加的,我没有扫描github 的变更日志以查看他们添加支持的确切日期。
您必须检查 Gitlab(或 Gitlab 社区版,如果您使用的是该版本)是否特别支持此功能。如果没有:仅通过 git 命令下载“仅该文件夹”将没有简单的方法。
另一方面,常规 Gitlab 的 Web GUI 允许您浏览到任何提交中的任何子目录,并下载该子目录(“克隆”按钮旁边的下载图标,然后选择“下载此目录”选项)。
弄清楚下载 url 是如何构建的,您可以使用任何 Web 客户端下载相同的存档(例如:curl
,wget
...)