Git - 从apache服务回购的两个分支

时间:2015-07-07 06:57:28

标签: git apache git-branch

我们有一个git repo的两个分支(team1和team2)。我想通过两个主机名或URL下的apache为分支机构提供服务。目前主要的URL是为team1服务。我希望apache也能为team2提供服务,以便他们也可以在服务器中检查他们的更新。请告诉我如何配置它,以便team2的更新应反映在不同的URL中。

2 个答案:

答案 0 :(得分:0)

至少在单分支部署中,一种方法对我有用:

以下示例使用Linux环境。

在服务器上创建您的裸Git存储库到非www可访问的位置(例如/home/someuser/repo.git):

$ cd /home/someuser
$ mkdir repo.git
$ cd repo.git
$ git --bare init

将服务器的回购添加到您的开发回购的遥控器中:

$ git remote add production someuser@server:~/repo.git

然后创建一个post-receive钩子(进入home/someuser/repo.git/hooks),检查被推送的分支:

#!/bin/bash
# post-receive

# Read hook input params.
while read oldrev newrev refname; do
    # Get "simple" branch name from push data.
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)

    if [ "team1" == "$branch" ]; then

        # team1 branch pushed.

    elif [ "team2" == "$branch" ]; then

        # team2 branch pushed.

    fi
done

然后在if-else中,您需要获取推送的内容并将它们部署到分配了不同虚拟主机的某些目录。我们假设team1位于/var/www/team1/htmlteam2位于/var/www/team2/html

部署通过更改服务器的repo git工作树位置并在那里获取更改来实现。以下情况应该为两个团队做到这一点:

#!/bin/bash
# post-receive

# Destinations to deploy repo contents to.
TEAM1_DEST="/var/www/team1/html"
TEAM2_DEST="/var/www/team2/html"

# Read hook input params.
while read oldrev newrev refname; do
    # Get "simple" branch name from push data.
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)

    if [ "team1" == "$branch" ]; then

        # team1 branch pushed.
        GIT_WORK_TREE=$TEAM1_DEST git checkout -f team1

    elif [ "team2" == "$branch" ]; then

        # team2 branch pushed.
        GIT_WORK_TREE=$TEAM2_DEST git checkout -f team2

    fi
done

请记住为chmod +x挂钩设置post-receive

我曾多次使用此方法在推送时部署网站。 注意:上面的钩子尚未经过测试,但显示了原理。

答案 1 :(得分:-1)

您需要在Apache中创建新的VirtualHost配置。这定义了将确定apache搜索web文件的位置的主机名。

请参阅:http://httpd.apache.org/docs/2.2/vhosts/examples.html