如何克隆仅Git存储库的子目录
您正在尝试做的事情称为 稀疏克隆(Sparse Checkout模式) ,该功能已添加到 git 1.7.0(2012 年 2 月)中,在Git1.7.0以前,这无法实现。
进行稀疏克隆的步骤如下:
以下所有操作都在自己本机电脑
执行
新建仓库并进入文件夹
此步骤一定要新建一个空的目录
mkdir test && cd test //新建仓库并进入文件夹
git init
git remote add -f origin http://xxxxx.git // 这里换成你要克隆的项目和库
设置允许克隆子目录
git config core.sparsecheckout true //设置允许克隆子目录
在.git目录下,config文件会新增一行代码 sparseCheckout = true
,结果如下。
设置要克隆的仓库的子目录路径
//设置要克隆的仓库的子目录路径 //空格别漏
echo "preview_designeditor/" >> .git/info/sparse-checkout
echo "project-management/" >> .git/info/sparse-checkout
在.git目录下的info文件夹下,会新增一个文件sparse-checkout
,sparse-checkout
文件中内容如下:

下载
git pull origin master
您可能希望查看扩展教程,您应该阅读稀疏结帐的官方文档
作为一个功能:
function git_sparse_clone() (
rurl="$1" localdir="$2" && shift 2
mkdir -p "$localdir"
cd "$localdir"
git init
git remote add -f origin "$rurl"
git config core.sparseCheckout true
# Loops over remaining args
for i; do
echo "$i" >> .git/info/sparse-checkout
done
git pull origin master
)
用法:
git_sparse_clone "http://github.com/tj/n" "./local/location" "/bin"
请注意,这仍将从服务器下载整个存储库 – 只有结帐大小减少.目前,无法仅克隆单个目录.但是,如果您不需要存储库的历史记录,则可以通过创建浅层克隆来至少节省带宽.
扩展 如何使用 git filter-repo 工具来来实现此功能
对不起,我的回答有误。Git本身并没有提供直接克隆仓库子目录的功能。但是你可以通过以下步骤来实现类似的效果:
-
1. 首先,在浏览器中打开仓库的 GitHub 页面或其他 Git 托管平台,并找到子目录的 URL。
-
2. 在本地选择一个合适的目录,打开命令行或终端。
-
3. 使用以下命令进行完整克隆仓库:
git clone <仓库URL>
-
4. 进入克隆下来的仓库目录:
cd <仓库名>
-
5. 使用
git filter-repo
工具来提取子目录。git filter-repo
是一个强大的工具,可以用于过滤和转换 Git 仓库的历史记录。 -
• 如果你还没有安装
git filter-repo
,可以按照官方文档进行安装:https://github.com/newren/git-filter-repo -
6. 运行以下命令来提取子目录:
git filter-repo --path <子目录路径>
其中
<子目录路径>
是你想要提取的子目录在仓库中的相对路径。 -
7. 等待命令执行完毕,你将得到一个只包含指定子目录的新的 Git 仓库。
请注意,这种方法会创建一个新的 Git 仓库,其中只包含指定的子目录,并且不保留原始仓库的提交历史。如果你需要保留完整的提交历史,那么你可能需要考虑其他方法,比如使用 git subtree
或者 git submodule
。
参考文档
-
• https://javaforall.cn/162531.html
原文始发于微信公众号(前端爱好者):如何克隆仅Git存储库的子目录
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/267231.html