2017-09-13 82 views
0

我使用源代码在本地工作在一个目录中。我有两个分支:master和dev。我想推动我的专用服务器每个分支到自己的目录,产生一个生产目录和另一个开发目录。接下来,我可以配置Nginx来访问子域上的每一个,等等。独立的git目录(master/dev)

我试图在我的(唯一)project.git/hooks/post-receive中的post-receive文件上使用这段代码。

#!/bin/bash 

while read oldrev newrev ref 
do 
    branch=`echo $ref | cut -d/ -f3` 

    if [ "master" == "$branch" ]; then 
    git --work-tree=/home/myself/project/site --git-dir=/home/myself/myproject/myproject.git checkout -f 
    echo 'Changes pushed live.' 
    fi 

    if [ "dev" == "$branch" ]; then 
    git --work-tree=/home/myself/myproject/site-dev --git-dir=/home/myself/myproject/myproject.git checkout -f 
    echo 'Changes pushed to dev.' 
    fi 
done 

我尝试提交dev分支的更改。我推动它成功(“推动开发变化”)。但是我的远程服务器上的dev目录根本没有改变(与master分支相同)。

请问您能帮我吗?

谢谢!

+1

Git不是发布工具。您可以将其用于发布内容,但效果不佳。我建议你考虑一下发布工具。 – Schwern

+0

确实。每当发生变化时,您应该从存储库中获取发布进程*,而不是相反。这将继续以多种不同的方式咬你。 – eis

+0

好的,谢谢,我会去经典的方式(推拉目录):) – Zoloom

回答

0

正如评论中已经提到的那样。 Git并不是真正的部署工具。你应该让git-post-recv触发部署工具来做实际的部署。

但是,deploy-script看起来与上面的钩子非常相似,并且可能会出现相同的问题。似乎缺少的部分是实际选择要在site-dev目录中检出的dev分支。命令

git --work-tree=/home/myself/myproject/site-dev --git-dir=/home/myself/myproject/myproject.git checkout -f 

将检出当前的HEAD(通常是主)。尝试将dev添加到结帐命令。

您可能也有兴趣添加一个变种git clean -ffdx来删除所有git未知的文件,所以你有一个原始的结账。