单独的git目录(master / dev)

时间:2017-09-13 18:47:52

标签: git

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

我尝试在我的(仅限)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”)。但是我的远程服务器上的dev目录根本没有改变(与master分支相同)。

你能帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

正如评论中已经提到的那样。 Git不是真正的部署工具。您应该使用git-post-recv触发deploy-tool来进行实际部署。

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

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

将检查当前的HEAD(通常为master)。尝试将dev添加到结帐命令。

您可能还有兴趣添加git clean -ffdx的变体来删除git不知道的所有文件,因此您可以进行原始结帐。