如何将Git仓库子目录检出到当前目录?Web主机同步配置指引
实现Web主机文件夹跟踪远程Git仓库指定子目录
这是个非常典型的场景——只想同步远程仓库里的特定子目录到本地指定文件夹,而且完全不需要向远程推送内容。下面提供两种可靠的方法,你可以根据自己的偏好选择:
方法一:使用Git Subtree(推荐,直接将子目录内容同步到目标文件夹根目录)
这种方法能直接把远程仓库的directory2子目录内容拉取到/path/public_html的根目录,后续更新也很方便:
- 进入目标文件夹并初始化Git仓库:
cd /path/public_html git init
- 添加远程仓库地址(替换成你的实际远程仓库URL):
git remote add origin <你的远程Git仓库URL>
- 首次拉取
directory2的内容到当前目录:
git subtree add --prefix=./ origin main:directory2 --squash
--prefix=./:指定把远程子目录拉取到当前目录(也就是public_html根目录)main:替换成远程仓库的实际分支名(比如master)directory2:远程仓库中你要跟踪的子目录路径--squash:可选参数,用来压缩提交历史,避免拉取过多冗余历史记录
- 后续要更新
public_html到远程directory2的最新版本时,只需执行:
git subtree pull --prefix=./ origin main:directory2 --squash
方法二:使用Git稀疏检出(保留目录结构,适合需要保留原目录层级的场景)
如果你希望public_html里保留directory2文件夹(即public_html/directory2/对应远程的directory2/),可以用稀疏检出:
- 进入目标文件夹并初始化Git仓库:
cd /path/public_html git init
- 添加远程仓库地址:
git remote add origin <你的远程Git仓库URL>
- 启用稀疏检出功能:
git config core.sparseCheckout true
- 指定要跟踪的子目录,写入稀疏检出配置文件:
echo "directory2/" >> .git/info/sparse-checkout
- 末尾的斜杠
/确保只匹配目录,避免和同名文件混淆
- 首次拉取远程分支内容:
git pull origin main
拉取完成后,public_html里只会出现directory2文件夹,里面的内容和远程仓库一致。
- 后续更新时,直接执行拉取命令即可:
git pull origin main
注意事项
- 如果你不需要保留Git历史,可以在拉取后删除
.git文件夹,但这样就无法用Git后续更新了,不推荐。 - 确保Web主机环境已经安装了Git,且你有操作
/path/public_html目录的权限。
内容的提问来源于stack exchange,提问作者Gleb Varenov
相关产品推荐
相关产品推荐

