git - 是否可以使用 git-flow(或 vanilla git)在 master 和 develop 分支上拥有不同的(构建)文件集?

标签 git git-branch bower git-flow

是否可以使用 git-flow(或 vanilla git 命令链,或另一个 gitXXX 糖果)在 ma​​ster(即发布)和 上拥有一组不同的文件开发分支机构?

由于 git repos 用于部署(见下文),我希望我的 develop 分支包含strictly source files,但是当我将它 merge 到 ma​​ster 时,我希望 master(release) 分支也包含发布/编译输出、zip 文件、优化资源等。

注意:问题寻求:

  • 示例场景git/git-flow 命令 可以保持develop 和其他分支的编译/构建东西,而只有 master 将它们放在额外​​的 ./build 目录中。

  • 这两个分支仍应保持良好的同步,整个分支/merge 过程应该是自动、无痛且安全的。也许有一天它会成为标准的 git-flow 特性和实践。

  • 我知道这是不推荐的,繁琐的,非最佳等,但请记住:

    • git 存储库越来越多地用于部署 - 例如参见 http://bower.io严格使用 git repossemver 标签来部署已编译的东西。

    • 该问题询问的是是否可能,而不是是否可取良好做法。如果不可能,最好有一个很好的解释。

最佳答案

听起来您想使用 Git 作为构建或部署系统。这不是 Git 所做的,并且将已编译的工件包含在您的存储库中被认为不是好的做法。

考虑为您的环境使用合适的构建系统。

针对更新后的问题进行编辑:

如果您真的想这样做,完全可以在一个分支而不是另一个分支中包含构建工件。您可以简单地在 build 分支中添加它们:

git checkout -b build
# Run build command
git add build/
git commit -m "Add build artefacts"

当您切换回 master 时,您的构建目录将不存在。

作为Magnus mentions below ,这可能会在 merge 期间导致一些不愉快,但如果你只是从 master merge 到 build 而不是相反,你在这方面应该没问题。它还确实增加了您在工作时需要牢记的一些精神包袱。

如果您沿着这条路走下去,我建议您只保留生成标记版本的构建提交。然后您可以在提交消息中包含该标记。我可能还会将源代码提交压缩为构建阶段的一次提交。

要运行新构建,您的方法类似于

git checkout build
git merge -s recursive -X theirs --squash master
# Run build command

现在,根据构建版本是否是您想要保留的版本,您可以保留它

git commit -a -m "Update build files for version 1.2.3"
git checkout master
git tag -a 1.2.3

或者丢弃它

git reset --hard HEAD

我仍然不喜欢在您的源存储库中提交构建工件的想法,Bower.io 的人是 aware that this is a problem and are working on a solution (强调我的):

Is it recommended that all bower packages should have build files in their Git repos?

没有。正在研究一种类似于 npm 的发布模型,以支持将构建的 Assets 发布到 Bower 服务器,从而避免安装后和check-in-of-build-products 反模式。在那之前,没有什么好的方法可以安装像 jQuery Mobile 这样的包。

不幸的是,在过去的十个月里,这方面似乎没有太大进展。

关于git - 是否可以使用 git-flow(或 vanilla git)在 master 和 develop 分支上拥有不同的(构建)文件集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861819/

相关文章:

git - 无法运行 git gc ..有什么解决办法吗?

bower - main-bower-files gulp 返回空数组

angularjs - 可以用 Bower 安装 Bootstrap CSS 吗?

node.js - 在 ':bower' 任务上运行 JHipster gradlew 失败

java - 克隆存储库时 JGit 错误

git - AssemblyVersion 与 Appveyor 版本一致

Git pull 结果为 "needs update",文件显示为已修改

git - 如何创建远程 Git 分支?

git - 为什么 git 默认执行快进 merge ?

git - 获取最终分支列表(这是最终提示)