GIT POST-MERGE Hook,获取更新文件

时间:2015-12-03 07:20:06

标签: git deployment githooks autodeploy

我在git上有一个名为uat的分支。

我希望克隆merge分支uat中更新的所有文件。
(基本上它背后的想法是创建一个在uat服务器上传的构建)

我试过这样做。

#!/bin/bash
branch=$(git symbolic-ref HEAD | sed -e "s/^refs\/heads\///");
if [ "uat" == "$branch" ]; then
    // to do
    // 1. get all updated files
    // 2. create a clone of these files
fi

有人可以帮我setp 1,即在当前合并中更新所有文件。

2 个答案:

答案 0 :(得分:2)

如果合并刚刚发生(合并后的钩子应该是这种情况),你可以使用ORIG_HEAD

git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD

答案 1 :(得分:1)

获得完整的解决方案。以下是使用git post-merge hook创建构建的方法。

#!/bin/bash

# get current branch    
branch=$(git symbolic-ref HEAD | sed -e "s/^refs\/heads\///");

# check if branch name is `uat` (or whatever you prefer)
if [ "uat" == "$branch" ]; then

    # create a folder outside the git repo
    # you can skip this step, if you want a static location
    mkdir -p $(pwd)/../uat/$(basename $(git root));

    # getting updated files, and
    # copy (and overwrite forcefully) in exact directory structure as in git repo
    yes | cp --parents -rf $(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD) $(pwd)/../uat/$(basename $(git root))/;
fi