首页 > 解决方案 > 如何在不下载其父文件夹的情况下签出或克隆文件夹

问题描述

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

标签: gitversion-controlgitlabgitlab-cesparse-checkout

解决方案


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

推荐阅读