在制作中,我维护了两个站点 - 测试和发布.每个都通过软链接指向不同的目录(例如)
beta_public_html -> /home/scott/myapp/trunk/public
public_html -> /home/scott/myapp/branches/1.2.3/public
Run Code Online (Sandbox Code Playgroud)
我是一个长期的svn用户,转向git.我习惯通过svn更新部署并更改新分支上的软链接,事情非常简单.
现在我转向git.我仍然需要两个软链接(它是使用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
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为默认情况下push不会更新工作树.
所以我进入远程目录并第一次运行git reset --hard,它会拉动工作树.但我再次推动,我无法得到新的推动 - 它只是停留在最初的一个.
(顺便说一句,请注意,我似乎无法推送到"myapp-beta.git" - 失败了,我必须推送到目录名.我担心这是问题的一部分,但我不知道我在这里做错了什么.)
所以,如果问题1的答案是我的方法没问题,问题第2部分:我实际上做了什么错了?如果有我应该使用的钩子,有人可以指向我吗?
(对问题1的回答说"运行这7个手动步骤"将不是一个非常有用的答案,因为svn checkout + ln -s是两个步骤.)
谢谢.我想回到编写代码.
《Git Push is bad than worsless》一文对类似问题进行了有趣的讨论。
其解决方案和结论之一涉及:
所以就你而言,
简而言之:一步:git push. 不再需要管理链接(因为该目录不再代表 Git 中的分支,与 SVN 不同)
关于钩子部分,裸仓库中的接收后钩子可能就是您所需要的
请参阅Git 提示:通过 post-receive 挂钩自动更新工作树
$ 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
Run Code Online (Sandbox Code Playgroud)
笔记:
该钩子以设置为该文件夹的环境变量
post-receive开始,因此无论您“进入”哪个路径,它总是会尝试在那里运行任何后续的 git 命令。 解决这个问题只需取消设置.GIT_DIRrepo/.gitcdGIT_DIR
'env -i' 就是这样做的:它完全忽略继承的环境并仅使用提供的变量和值。
| 归档时间: |
|
| 查看次数: |
4109 次 |
| 最近记录: |