0

我有一个 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

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

4

2 回答 2

0

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

于 2013-01-25T19:32:26.327 回答
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

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

于 2013-01-30T18:04:11.423 回答