私もこれを達成しようとしています。しかし、私は@shelhamerのソリューションを自分のコードベースで動作させるようには思えません。以下は、私はそれが働いて取得するために使用される更新後commitフックスクリプトです:
#!/bin/sh
WATCH_BRANCH="master"
WATCH_FILES="jquery-imask-min.js"
DEST_BRANCH="gh-pages"
# bail out if this commit wasn't made in the watched branch
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/');
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then
exit 0
fi
# only update if watched files have changed in the latest commit
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH)
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then
# checkout destination branch, then
# checkout latest version of each watched file and add to index
git checkout -q $DEST_BRANCH
git pull -q
SAVEIFS=$IFS
IFS=$(echo -n "|")
for file in $WATCH_FILES; do
git checkout $WATCH_BRANCH -- $file
git add $file > /dev/null
done
IFS=$SAVEIFS
# commit with a chance to edit the message, then go back to watched branch
LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH)
git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT"
git push origin $DEST_BRANCH
git checkout -q $WATCH_BRANCH
fi
私は正規表現が正常に一致させるためにはgrepの使用を更新しなければならなかった(-Pが含まgrepの実装上の選択肢ではありませんでしたWindowsの場合はGit Bashシェルで)git pull
とgit push origin $DEST_BRANCH
を追加します。ああ、私はディレクトリとファイルの空のシェルを事前に追加しなければなりませんでした(たぶんディレクトリは十分でしょうか?)。
これは実際にプッシュしているので、このスクリプトをポストコミットの代わりにポスト受信スクリプトに切り替えるほうが良いかもしれません。さもなければ、それをマスターにしたことのないghページにコードをプッシュすることができます。
ええ、問題は、ページブランチにコピーしてファイルをコピーするためにマスターにコミットするたびに余分な作業が必要だということです。私はちょうど不要と思われるのでこれを避けようとしている –