Git 仅包含生产分支的回购(无开发历史)
Git repo with production branch only (no development history)
我搜索了一下,但只找到了类似问题的解决方案。那么,是否有可能有一个远程仓库只包含 Production
(或任何你喜欢的称呼)分支,而不引用合并到 Production
的其他分支上的提交?我们永远不会进行快进合并,因此 Production
分支将只有旨在实际发布的发布提交。
目标是限制访问权限,只允许访问没有开发历史和中间进度的正确版本。我试图寻找限制分支访问的方法,但只找到了关于保护分支不被写入而不是从中读取的参考。我 do 意识到这可能有点违背 Git 本身的目的,我可能会简单地在某个地方上传发布包,但如果可能的话,它似乎更容易和更多磁盘 space/network 有效地增量保存它。
我能想到的解决方法是拥有第二个本地存储库,我将仅在其中复制和提交当前版本代码,但目前它是一个 B 计划。 :-)
如评论中所述,您可以 "detach" 通过始终使用压缩合并来查看发布分支的历史记录。每次你想合并一个不应该在发布仓库中可见的分支时,你可以使用类似于这些的命令:
git checkout release
git merge --squash cool-feature-branch
git commit -m "Release cool feature."
或者,您可以清理现有的发布分支并仅保留 "main line" 提交 filter-branch
:
git checkout release
git filter-branch --parent-filter 'read a b rest; echo $a $b' -- --first-parent
此命令仅通过每个提交的第一个父级来枚举发布分支上的提交,并仅使用单个父级重写这些提交。最终结果是分支从所有已合并的分支变为 "detached"(快进合并除外,它与直接提交到分支的提交没有区别)。
准备好仅包含您希望对客户可见的提交的发布分支后,您可以使用 git log release
验证提交列表,并使用 git push <remote> release
推送发布分支。这只会推送 git log
.
显示的提交
我搜索了一下,但只找到了类似问题的解决方案。那么,是否有可能有一个远程仓库只包含 Production
(或任何你喜欢的称呼)分支,而不引用合并到 Production
的其他分支上的提交?我们永远不会进行快进合并,因此 Production
分支将只有旨在实际发布的发布提交。
目标是限制访问权限,只允许访问没有开发历史和中间进度的正确版本。我试图寻找限制分支访问的方法,但只找到了关于保护分支不被写入而不是从中读取的参考。我 do 意识到这可能有点违背 Git 本身的目的,我可能会简单地在某个地方上传发布包,但如果可能的话,它似乎更容易和更多磁盘 space/network 有效地增量保存它。
我能想到的解决方法是拥有第二个本地存储库,我将仅在其中复制和提交当前版本代码,但目前它是一个 B 计划。 :-)
如评论中所述,您可以 "detach" 通过始终使用压缩合并来查看发布分支的历史记录。每次你想合并一个不应该在发布仓库中可见的分支时,你可以使用类似于这些的命令:
git checkout release
git merge --squash cool-feature-branch
git commit -m "Release cool feature."
或者,您可以清理现有的发布分支并仅保留 "main line" 提交 filter-branch
:
git checkout release
git filter-branch --parent-filter 'read a b rest; echo $a $b' -- --first-parent
此命令仅通过每个提交的第一个父级来枚举发布分支上的提交,并仅使用单个父级重写这些提交。最终结果是分支从所有已合并的分支变为 "detached"(快进合并除外,它与直接提交到分支的提交没有区别)。
准备好仅包含您希望对客户可见的提交的发布分支后,您可以使用 git log release
验证提交列表,并使用 git push <remote> release
推送发布分支。这只会推送 git log
.