Git post-receive hook克隆并将两个分支签出到两个单独的目录中

时间:2013-01-25 13:57:03

标签: git hook sh githooks

我有一个Git存储库,我需要编写一个post-receive脚本,将两个分支签出到两个单独的目录中,然后执行一些操作。我有以下脚本适用于一个分支,但我不知道如何编写脚本以便它检出两个分支。

#!/bin/sh

GIT_REPO="$HOME/oliverjash.me.git"
TMP_GIT_CLONE="$HOME/tmp/oliverjash.me"
PUBLIC_WWW="/var/www/oliverjash.me"

# Clone & Checkout a copy of this repository somewhere
git clone $GIT_REPO $TMP_GIT_CLONE

# Do other actions
cd $TMP_GIT_CLONE
compass compile -e $RAKE_ENV -c config.rb --force
jekyll $PUBLIC_WWW
cd $HOME
rm -rf $TMP_GIT_CLONE
exit

请记住,除了变量之外,我需要对每个副本执行的“操作”是相同的 - 当然 - 我真的希望避免重复代码。

2 个答案:

答案 0 :(得分:0)

如果使用支持函数的shell,则可以创建一个将clone目录作为参数的函数。您只需调用该函数两次,每个克隆目录一次。 (这假设您的意思是克隆,您在上面说了结帐,因为我在您的示例中没有看到 git checkout 。)

答案 1 :(得分:0)

这并不完美,但最终我想出了这个。

#!/bin/bash --login

GIT_REPO="$HOME/oliverjash.me.git"

source "$HOME/.bash_profile"

checkout () {
  BRANCH="$1"
  TMP_GIT_CLONE="$2"
  PUBLIC_WWW="$3"

  git clone $GIT_REPO $TMP_GIT_CLONE
  cd $TMP_GIT_CLONE
  git checkout $BRANCH
  compass compile -e $RAKE_ENV -c config.rb --force
  jekyll $PUBLIC_WWW
  cd $HOME
  rm -rf $TMP_GIT_CLONE
}

checkout master "$HOME/tmp/oliverjash.me" "/var/www/oliverjash.me"
checkout project "$HOME/tmp/project.oliverjash.me" "/var/www/project.oliverjash.me"

exit

我不喜欢它如何重新编译每个分支,即使更改只被推送到一个,但它已经足够了。