0

Git リポジトリがあり、post-receive2 つのブランチを 2 つの別々のディレクトリにチェックアウトし、いくつかのアクションを実行するスクリプトを作成する必要があります。1 つのブランチで機能する次のスクリプトがありますが、2 つのブランチをチェックアウトするようにスクリプトを作成する方法がわかりません。

#!/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

関数をサポートするシェルを使用する場合、クローン ディレクトリを引数として取る関数を作成できます。各クローン ディレクトリに対して 1 回ずつ、関数を 2 回呼び出すだけです。(これは、上記のチェックアウトと言った場所でクローンを意味していると想定しています。例にはgitチェックアウトが表示されないためです。)

于 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

変更が 1 つだけにプッシュされたとしても、すべてのブランチを再コンパイルする方法は好きではありませんが、それで十分です。

于 2013-01-30T18:04:11.423 に答える