Ale*_*lex 1 git cvs repository dev-to-production git-branch
我现在要做的是将生产服务器上的私有存储库初始化到应用程序的www文件夹(例如:/var/www/app.com/web/),然后将其作为临时存储库克隆到我的测试站点(例如:/var/www/test.com/web/app.com/)并最终从登台到本地克隆以使用代码.
我的计划是正确的吗?
我正在关注这些教程,以了解有关设置"git服务器"和初始化私有存储库的更多信息:
最后一个问题,这个关于成功的Git分支模型的教程将适用于哪里?在主私有存储库(生产服务器),本地或混合?我还没有读完,我会尽快做到.
编辑:
这个http://www.howtoforge.com/the-perfect-subversion-server-debian-lenny-ispconfig-3和这个http://www.howtoforge.com/installing-subversion-and-configuring-access-through-不同的协议在ubuntu-11.10到GIT版本是我有点想到的
我的计划是正确的吗?
级联回购听起来相当复杂,并不正常.
考虑任何结账你正在承诺的裸git仓库的客户/卫星/孩子.您的暂存和生产安装应该是特定分支的只读签出,您可能已经熟悉了(因为几乎所有的git问题都得到了一个链接 - 这个问题现在也不例外)git-flow可以让我们深入了解如何设置您的分支机构,从而适当地设置结帐.
Git服务器设置
请注意,如果您使用home设置git用户/home/git并创建一个repo /home/git/project.git,则意味着您不需要绝对路径.即
(server) $ cd /home/git
(server) $ mkdir project.git
(server) $ cd project.git
(server) $ git --bare init
Run Code Online (Sandbox Code Playgroud)
那么你想要的地方:
(home) $ git clone git@server:project.git
Run Code Online (Sandbox Code Playgroud)
当然,你也可以把你的git repos放在你想要的地方,只需更改git用户的home目录(in /etc/passwd)即可实现相同目的.
推送更新
如果要在推送到存储库时更新结帐,则需要使用post-receive挂钩来执行此操作.首先正确设置自己:
(server) $ cd /var/www/app.com/web/
(server) $ git clone -b production-branch /home/git/project.git . # it's local - use a file path
(server) $ cd /var/www/test.com/web/app.com/
(server) $ git clone -b staging-branch /home/git/project.git .
Run Code Online (Sandbox Code Playgroud)
然后使用创建/home/git/project.git/hooks/post-update
cd /var/www/test.com/web/app.com
git --git-dir /var/www/test.com/web/app.com/.git pull #> /dev/null 2>&1 & #uncomment after testing
Run Code Online (Sandbox Code Playgroud)
确保这件事:
如上所述,每次推送时,命令的输出都会发送给您,这将使推动速度变慢(ish).当您确定它可以正常工作时,您可以在后台运行它.每次推送都会引发分段结账并不重要 - 如果它指向的分支没有变化,它将不会做任何事情.
自动更新您的实时网站可能不是一个好主意.代替
(home) $ git checkout production-branch
(home) $ git merge staging-branch
(home) $ git push # updating production-branch
(home) $ git checkout feature/i-was-working-on-this
(home) $ ssh server 'cd /var/www/app.com/web/; git pull'
# Manual Post update checks
Run Code Online (Sandbox Code Playgroud)
如果您自动执行此操作,例如更新使您的生产站点处于不可用状态 - 您可能不知道(除非您得到pingdom警报说"生产站点脱机").如果您拥有重要的测试覆盖率和自动部署流程,那么自动更新您的实时站点是安全的 - 但在运行之前走路:).
直接推动
如果你确定如果你真的想进入一个非裸露的结账,你可以
[receive]
denyCurrentBranch = ignore
Run Code Online (Sandbox Code Playgroud)
在项目的.git/config文件中,如果没有本地更改,则还应更新工作副本(iirc).