gpt4 book ai didi

ruby-on-rails - 如何通过 git push 将多个分支部署到不同的目录?

转载 作者:太空狗 更新时间:2023-10-29 13:12:33 27 4
gpt4 key购买 nike

在生产中,我维护两个站点 - 测试版和发布版。每个都通过软链接(soft link)指向不同的目录(例如)

beta_public_html -> /home/scott/myapp/trunk/public
public_html -> /home/scott/myapp/branches/1.2.3/public

我是 svn 的长期用户,正在转向 git。我习惯于通过 svn update 部署并更改新分支上的软链接(soft link),事情非常简单。

现在我要转向 git。我仍然需要两个软链接(soft link)(这是一个使用 Passenger 的 Rails 应用程序),尽管现在我希望它们指向两个不同的 git 分支(比如“beta”和“release”)。我希望能够通过 git push(或 git pull)更新它们。

问题第 1 部分:我不确定执行此操作的最佳方法。

我开始这样做的方式是只部署到两个不同的远程,例如

git push ssh://scott@x.com/home/scott/myapp-beta beta
git push ssh://scott@x.com/home/scott/myapp-release release

但这不起作用,因为默认情况下推送不会更新工作树。

所以我进入远程目录并第一次运行 git reset --hard,它 pull 了工作树。但我再次按下,但无法显示新的推送 - 它只是停留在初始位置。

(顺便说一句,请注意,我似乎无法推送到“myapp-beta.git”——失败了,我必须推送到目录名称。我担心这是问题的一部分,但我不不知道我在这里做错了什么。)

因此,如果问题 1 的答案是我的方法很好,那么问题第 2 部分:我实际做的事情有什么问题?如果有我应该使用的 Hook ,有人可以指点我吗?

(问题 1 的回答说“运行这七个手动步骤”并不是一个非常有用的答案,因为 svn checkout + ln -s 是两个步骤。)

谢谢。我想回去写代码。

最佳答案

文章Git push is worse than worsless对类似问题进行了有趣的讨论。

其解决方案和结论之一涉及:

  • 生产服务器上的裸存储库
  • 一个带有钩子(Hook)的克隆存储库,用于将已推送的内容 pull 入裸存储库

所以在你的情况下,

  • 一个裸仓库,您可以在上面推送测试版和发布分支
  • 两个克隆的 repo“beta”和“release”,用​​一个钩子(Hook)从裸 repo 中 pull 出它们各自的分支。

简而言之:一步:git push。不再需要管理链接(因为目录不再代表 Git 中的分支,与 SVN 不同)


关于 Hook 部分,一个post-receive hook在裸仓库中可能是你需要的一切

参见 Git Tip: Auto update working tree via post-receive hook

$ cd bare
$ chmod +x .git/hooks/post-receive

with a post-receive hook like

#!/bin/sh
cd ../../beta
env -i git reset --hard
cd ../../release
env -i git reset --hard

注意:

the post-receive hook starts out with the GIT_DIR environment variable set to the repo/.git folder, so no matter what path you 'cd' into it will always try to run any following git commands there.
Fixing this is simply a matter of unsetting the GIT_DIR.

'env -i' does just that : 它完全忽略了继承的环境,只使用提供的变量和值。

关于ruby-on-rails - 如何通过 git push 将多个分支部署到不同的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com