You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拉取和推送Git仓库中的指定目录?

实现Git仅拉取/推送指定目录的方案

当然有办法!针对你这种需要让同事仅操作项目中web/themes/templates/目录、无需拉取整个大项目的场景,我给你整理了几个Git原生支持的实用方案:

方案一:稀疏检出(Sparse Checkout)—— 最便捷的原生方案

这是Git官方提供的功能,专门用来只拉取仓库中指定的目录,完全不需要修改原项目结构。

操作步骤(同事端):

  1. 创建本地工作目录并初始化Git:
mkdir templates-workspace
cd templates-workspace
git init
git remote add origin <你的项目仓库完整URL>
  1. 开启稀疏检出模式:
git config core.sparseCheckout true
  1. 配置要拉取的目标目录:
    把需要跟踪的目录路径写入Git的稀疏检出配置文件:
echo "web/themes/templates/" >> .git/info/sparse-checkout

提示:如果需要多个目录,直接换行追加其他路径即可

  1. 拉取远程分支的内容:
git pull origin main  # 替换成你的主分支名称,比如master

推送修改的方法:

修改完web/themes/templates/下的文件后,正常提交推送即可,Git会自动识别该目录的变更并同步到远程仓库对应位置:

git add web/themes/templates/
git commit -m "更新XX模板内容"
git push origin main

方案二:将目录转为子模块(Submodule)—— 适合长期独立维护场景

如果后续这个模板目录需要单独迭代、多人专门维护,或者希望它有独立的版本历史,可以把它拆成独立的Git子模块。

操作步骤(你的维护端):

  1. 先把web/themes/templates/目录单独提取成一个新的Git仓库,推送到远程代码托管平台(比如新建一个project-templates仓库)。

  2. 在原项目中移除该目录的Git跟踪,添加子模块:

# 进入原项目根目录
git rm -r web/themes/templates/
git commit -m "移除templates目录,转为子模块管理"
git submodule add <新的templates仓库URL> web/themes/templates/
git commit -m "添加templates子模块"
git push origin main

同事端操作:

同事只需要克隆这个独立的子模块仓库即可,完全不用接触原项目:

git clone <新的templates仓库URL> templates-workspace
# 修改文件后正常提交推送:
git add .
git commit -m "调整模板样式"
git push origin main

提示:如果原项目需要同步子模块的更新,你只需要在原项目中执行git submodule update --remote即可拉取最新的模板内容。

注意事项

  • 稀疏检出模式下,如果远程仓库的目录结构发生变化(比如目录重命名),需要同步更新.git/info/sparse-checkout文件的路径。
  • 子模块方案需要同事了解基本的子模块操作逻辑,避免误操作影响原项目。

内容的提问来源于stack exchange,提问作者Ivan Baranuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:10:49