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

如何从私有开发Git仓库创建干净发布仓库并同步更新?

如何从开发Git仓库创建可跟踪更新的发布仓库(排除指定文件)

嘿,这个需求其实挺常见的——既要把核心功能公开,又不想泄露开发版的特性,还得跟着开发仓库同步更新对吧?我给你整理了几个Git原生的靠谱方案,按需选就行:


方案1:用git filter-repo生成干净的发布仓库(推荐,替代老旧的filter-branch)

这个方法会直接生成一个只保留你需要文件的仓库,同时保留和开发仓库的关联,后续拉取更新也很方便。

步骤1:先克隆开发仓库到本地临时目录

别直接动你的开发仓库,先搞个临时副本:

git clone <你的开发仓库地址> dev-temp
cd dev-temp

步骤2:列出要排除的文件/目录

创建一个叫exclude-list.txt的文件,把不需要的内容一行一个列出来:

# 举个例子,这些是要排除的内容
dev-only-features/
debug-tools/
local-dev-config.yml
test-suite/

步骤3:用git filter-repo过滤仓库

这个命令会重写仓库历史,彻底移除你列的那些内容:

git filter-repo --invert-paths --paths-from-file exclude-list.txt

注意:这个操作会修改本地仓库的历史,所以只在临时副本里做,绝对别在你的主开发仓库上执行!

步骤4:推送到你的发布仓库

现在临时仓库已经是干净的发布版本了,把它推到你的公开发布仓库:

# 添加发布仓库作为远程
git remote add publish <你的发布仓库地址>
# 推送主分支(如果你的分支名是master就换成master)
git push publish main --force

步骤5:后续同步开发仓库的更新

每次开发仓库有新变更时,重复以下步骤就行:

  1. 删除旧的临时目录,重新克隆开发仓库
  2. 再次执行git filter-repo过滤
  3. 推送到发布仓库覆盖旧版本

小技巧:把这些步骤写成一个shell脚本,一键执行,省得每次手动敲命令。


方案2:用git subtree split拆分指定目录(适合发布特定子目录)

如果你的发布内容是开发仓库里的几个明确子目录(比如只公开src/和docs/),这个方法更精准,不用列排除列表。

步骤1:在开发仓库中拆分目录为独立分支

# 把src/和docs/这两个目录拆成一个叫release-branch的分支
git subtree split --prefix=src --prefix=docs -b release-branch

步骤2:推送到发布仓库

# 把release-branch推送到发布仓库的main分支
git push <你的发布仓库地址> release-branch:main

步骤3:后续同步更新

每次开发仓库有新变更,重新拆分并推送:

# --rejoin参数会把拆分的分支合并回主分支,方便下次拆分
git subtree split --prefix=src --prefix=docs -b release-branch --rejoin
git push <你的发布仓库地址> release-branch:main --force

方案3:维护开发仓库的发布分支(适合频繁同步)

如果需要非常频繁地同步开发变更,可以在开发仓库里专门维护一个发布分支,每次合并主分支后清理不需要的文件:

步骤1:在开发仓库创建发布分支

git checkout -b release-branch

步骤2:创建清理脚本

写一个简单的shell脚本(比如clean-release.sh),用来删除不需要的文件:

#!/bin/bash
# 删除开发版特性目录
rm -rf dev-only-features/
# 删除调试工具
rm -rf debug-tools/
# 删除本地配置
rm local-dev-config.yml

给脚本加执行权限:chmod +x clean-release.sh

步骤3:合并开发分支并清理

每次主分支有更新,就合并到release-branch并清理:

git checkout release-branch
git merge main
# 执行清理脚本
./clean-release.sh
# 提交清理后的变更
git add .
git commit -m "Clean up release files after merge"
git push origin release-branch

步骤4:发布仓库关联这个分支

在发布仓库的本地克隆里,把开发仓库的release-branch设为上游:

git clone <发布仓库地址> publish-repo
cd publish-repo
git remote add dev-upstream <你的开发仓库地址>
git pull dev-upstream release-branch
git push origin main

之后每次同步,直接拉取dev-upstream的release-branch就行。

注意:这个方法不会修改仓库历史,所以不会有强制推送的问题,但每次合并后都要手动(或脚本)清理文件,适合变更频繁的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:43:25