我有一个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
请记住,除了变量之外,我需要对每个副本执行的“操作”是相同的 - 当然 - 我真的希望避免重复代码。
答案 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
我不喜欢它如何重新编译每个分支,即使更改只被推送到一个,但它已经足够了。