git - 如何在不下载其父文件夹的情况下签出或克隆文件夹
问题描述
我只想从 gitlab 中检出一个文件夹,而没有它的父文件夹和层次结构中的其他父文件夹。
我们的 gitlab 存储库结构是这样的hybris/bin/custom/asamp
。还有其他与asamp文件夹平行的文件夹。我只想签出 asamp文件夹
我一直在尝试此链接上给出的解决方案 -如何仅克隆 Git 存储库的子目录?但我无法仅下载asamp文件夹,它还下载完整的层次结构,即我可以hybris/bin/custom/asamp
在本地存储库中看到。请注意,其他文件夹是asamp的同级文件夹当我进行稀疏检出时没有下载,但是我不想要完整的层次结构被检出。我只想下载asamp文件夹而不是其父文件夹。
我正在使用 gitlab。
解决方案
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
推荐阅读
- android - 如何将 CameraX 与 Camera2 API 一起使用?
- excel - Excel 索引匹配最后一条记录
- javascript - Javascript比较UTC时间和本地时间
- c++ - const_cast 的仁慈案例?
- qt - QT如何获取进程的ico
- python - 在 Python 中将列表转换为集合!我究竟做错了什么?
- sql - 读取 SQL 表中的列,这些列是另一个查询的结果
- php - Laravel 5.8 - 凭证与我们的记录不匹配/尝试登录函数总是返回 false
- swiftui - 在不使用 SwiftUI 生命周期的情况下,无法对 URL、NSUserActivity 和其他外部事件使用场景方法
- kubernetes - 在 kubernetes 中使用 redis sentinel 时将 master 暴露给集群外部地址