使用 Capistrano 的 Git 工作流程

2024-02-03

我正在尝试使用 capistrano 来了解一个良好的 git 工作流程。我找到了一个few http://nakedstartup.com/2010/04/simple-daily-git-workflow/ good http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html articles http://www.reasonablyopinionated.com/2009/09/git-deployment-workflow-and-capistrano.html,但我要么没有完全理解他们的建议(可能),要么他们有些缺乏。

到目前为止,我的想法是这样的,但是我在何时合并回主分支(即在转移到阶段之前?之后?)并尝试将其挂接到 capistrano 进行部署时遇到了问题:

  1. Make sure you’re up to date with all the changes made on the remote master branch by other developers
    • git checkout master
    • git pull
  2. Create a new branch that pertains to the particular bug you're trying to fix
    • git checkout -b bug-fix-branch
  3. Make your changes
    • git status
    • git add .
    • git commit -m "Friendly message about the commit"

所以,这通常是我陷入困境的地方。此时,我有一个master健康且新的分支错误修复分支其中包含我的(未经测试的——单元测试除外)的更改。

如果我想将我的更改推向阶段(通过cap staging deploy),我是否必须将我的更改合并回 master 分支(我不想这样做,因为 master 似乎应该保留未经测试的代码)?我是否应该从 master 进行部署(或者我应该先标记一个版本,然后修改我的production.rb要从该标签部署的文件)?git 部署 https://github.com/apinstein/git-deployment/似乎解决了其中一些工作流程问题,但我似乎无法找出它实际上如何挂钩到上限部署和上限生产部署。

想法?我认为有可能典范这样做的方法,但我要么can't找到它,或者我对 git 太陌生,无法认识到我have找到了。

Help!


我这样做的方法是有一个“暂存”分支,可以在您的仓库上进行跟踪。您将需要使用 gem 'capistrano-ext',它为阶段提供了一些额外的配置选项(考虑到您对登台部署的调用,我认为您已经在使用它)。capistrano-ext定义阶段,它允许您为每个阶段都有一个部署文件,例如定义分支的“staging”set :branch, "staging"您部署到的每个阶段都是独一无二的。您可以执行上面的工作流程并添加:

#after commiting on bug-fix branch
git checkout staging # => tracks staging on origin
git merge bug-fix-branch # => bring new code in
git push origin staging # => capsitrano acts locally, it needs the code to get from origin
cap staging deploy # => wasnt that easy?

在理想的情况下,你还有一个生产分支,因此 git 分支被团队商定为

  • 高手-边缘代码所在团队 开发者之间的共享
  • staging - 待测试的代码 临时服务器上的客户端 (主合并快进)
  • 生产-稳定发布 (从舞台快进)

编辑:对评论的回复太长,所以我不得不附加到答案。

你有几种方法可以解决这个问题,我马上就能想到一种。对产品的修复需要尽快反映在所有分支中,以便您的开发人员在同一基础上工作。假设 prod 与 staging 有直接的共同祖先,并且 staging 到 master,则应将 prod 的修复添加到基于 prod 分支的 HEAD 的主题分支,然后将该更改与 master 合并,然后合并到 staging 中,最后部署到生产。这个想法是,唯一的差异是错误修复的提交,下次您将生产快进到暂存的头部时,您已经拥有了代表您修复的产品错误的更改的对象,因此没有问题(并且由于对错误进行了良好的测试,因此在每个分支上运行该套件后,您知道它是有效的)。否则,您可能必须从 master 中挑选一个提交并应用于 prod 和 staging。请访问 pro-git.org 了解类似的更高级的工作流程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Capistrano 的 Git 工作流程 的相关文章

  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • 使用代理时,React 应用程序正在不同位置查找静态文件

    我用过npx create react app my app创建一个反应应用程序 我用过的npm run build构建应用程序并使用它进行部署serve s build 我正在使用代理服务器来公开我的应用程序 我的 httpd 配置如下所
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • git merge 冲突的不同场景

    我试图了解 git 合并后可能发生 git 冲突的情况以及如何避免它们 我创建了一个 git 存储库并向其中添加了一个文本文件 我已将 1 添加到文本文件中并将其提交给 master 我已经从 master 创建了一个新分支 分支 2 并将
  • 有没有一个简单的命令可以将分支转换为标签?

    我即将完成将 哑快照 转换为 git 的繁琐过程 这个过程进展得非常顺利 感谢这个重命名过程 https stackoverflow com questions 6628539 how to tell git that its the sa
  • Gerrit 和 Active Directory

    我正在尝试设置 Gerrit 以使用我们的公司 Active Directory 进行身份验证 我知道很多人都设法让它发挥作用 但它对我来说不起作用 如果我运行一个ldapsearch命令如下我得到了正确的结果 所以我知道我的搜索字符串是正
  • 是否可以检测 http git 远程是智能还是愚蠢?

    我正在我的应用程序中实现一个选项来使用 depth 1制作 git repo 的最小功能克隆 我刚刚意识到愚蠢的 http 传输不支持 depth 我想自动检测 http 远程是愚蠢的还是聪明的 这样我就可以省略 depth与哑 http
  • 如何创建名称中带有正斜杠的标签

    当我已经有了类似的标签时 有什么方法可以创建名称中带有正斜杠的 git 标签吗 假设我有 1 16 0 标签 并且我想创建 1 16 0 1 0 0 标签 git tag 1 16 0 1 0 0 error refs tags 1 16
  • Git:如何正确合并两个功能完全不同的分支?

    想象一下这样一种情况 同一个项目有两个分支 第一个分支的一部分对另一个分支进行了大幅重构 但有一段时间 您需要保持两个分支的功能 因此您需要对两个分支进行错误修复和关键功能添加 有时是以不对称的方式 在某些时候 您必须将重构的分支合并到原始
  • 无法加载文件或程序集“System.Web.Razor”或其依赖项之一

    我在我的网站 Web 应用程序 中使用了 Umbraco 4 11 6 我的网站在 localhost 中工作 通过 Visual Studio 2012 和 IIS v7 进行测试 但是当我从互联网空间运行它时 出现错误 错误是 无法加载
  • 哪些 git hooks 适用于“git rebase --continue”?

    我正在尝试为我的组织构建一组 git hook 脚本 我想使用的一个脚本 仅用于我自己的多个项目 将是检查git rebase continue我的代码中没有留下任何冲突标记 lt lt lt lt lt or gt gt gt gt gt
  • 有没有办法导入/导出容器绑定脚本

    我有一个插件 它使用 appscripts gs 以及 html js 和 css 文件 目前我们所做的是我们有一个参考 Google 文档 其中有一个脚本项目包含所有这些源代码 但是除了手动复制和粘贴之外 没有办法在 GIT 中保留源代码
  • 使用BFG时可以指定多个文件吗?

    我正在尝试删除通配符无法覆盖的多种类型的文件 我尝试使用多个 delete files 但它不接受它 还尝试将文件全部放在 delete files 之后 但它也不接受它 有没有一种方法可以将它们全部放在一个命令中 如果没有 那么我必须运行
  • 在推送后检索孤立的提交对象 --force

    Doing push force总是有点冒险 这里有一个例子 说明它如何产生一些问题 例如远程丢失修订版本 假设 有一个人Bob已更新远程master分支来自B to C 还有另外一个人Mike还没有获取此更新并且HEAD of his m
  • 如何在GIT中构建标签树?

    作为 GIT 的频繁用户 我喜欢git log graph尽我所爱git tag 我负责一个大型 GIT 存储库 其中有太多分支和标签 而且我的处理速度太慢西西弗斯式的 https en wikipedia org wiki Sisyphu
  • 以非交互式方式查找合并提交的正确父级

    我正在准备 svn2git 迁移 同时https github com nirvdrum svn2git https github com nirvdrum svn2git虽然非常有用 但我仍然遇到了一些恶作剧 我已经清理掉了大部分 但还剩
  • 如何仅根据拉取请求在 Jenkins 中运行阶段?

    我现在有一个基于 Jenkinsfile 的管道 其中包含多个阶段 每次提交到 Github 时都会由 webhook 触发 我想在每次提交时保持 构建 和 单元测试 阶段运行 但仅在分支准备拉取请求时运行 集成测试 阶段 我想要的是 st
  • 使用 git 子树时如何添加特定文件夹?

    我正在开发一个复杂的 Ionic 项目 我正在开发的许多组件和提供程序都是通用的 可以在我公司正在进行的其他项目中使用 这在软件开发中很常见 这是我提出的 Git 工作流程 该图显示了分支 my company library repo c
  • 在git的远程存储库上创建私有分支

    我想在我们公司的 git 上构建特定的流程 开发人员在他的本地计算机上创建一个分支并在那里提交一些文件 dev 将此分支推送到远程仓库 其他开发者无法访问该分支 经过几轮推动开发人员决定发布他的更改 将他的私人分支合并到公共分支 推动该公共

随机推荐