是否可以使用 git-flow(或 vanilla git 命令链,或另一个 gitXXX 糖果)在 master(即发布)和 上拥有一组不同的文件开发分支机构?
由于 git repos 用于部署(见下文),我希望我的 develop 分支包含strictly source files,但是当我将它 merge 到 master 时,我希望 master(release) 分支也包含发布/编译输出、zip 文件、优化资源等。
注意:问题寻求:
示例场景 和git/git-flow 命令 可以保持
develop
和其他分支的编译/构建东西,而只有master
将它们放在额外的./build
目录中。这两个分支仍应保持良好的同步,整个分支/merge 过程应该是自动、无痛且安全的。也许有一天它会成为标准的 git-flow 特性和实践。
我知道这是不推荐的,繁琐的,非最佳等,但请记住:
git 存储库越来越多地用于部署 - 例如参见 http://bower.io严格使用 git repos 和 semver 标签来部署已编译的东西。
该问题询问的是是否可能,而不是是否可取或良好做法。如果不可能,最好有一个很好的解释。
最佳答案
听起来您想使用 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/