git scp

2012/8/24 3490hit
このエントリーをはてなブックマークに追加

gitで管理しているソースで、変更したけどまだコミットしてない物をちょっと動作確認してみたい!

コントローラに表示したいパラメータを突っ込んだりしたときに一旦確認とかちょいちょいあります。
でもgit addしてgit commitしてgit checkoutしてgit pullしてgit mergeしてgit pushしてサーバsshしてデプロイして
企画からやっぱりちょっと違うって言われて。。

というわけでシェルを書いてみました。

https://gist.github.com/3449277



#!/bin/bash

# remove trailing slashes
targetdir=$(echo $PWD | sed 's/\/*$//g')

# get list of all changed files
changes=$(git status --porcelain 2>&1)

# exit if git status returned an error code
if [ $? -ne 0 ]
then
echo
echo " $changes"
echo
exit 1
fi

# file length counters
maxfilelength=0
filelength=0

# extract added and modified files
files_modified=$(echo "$changes" | awk '{if($1~"A|M") print $2}')
if [ "$files_modified" == "" ]
then
echo
echo "Nothing to sync"
echo
exit 0
fi
echo "-- modified files --"
for file in $files_modified;
do
echo "$file"
done
echo

# selected server
echo "-- What server do you deploy? --"
ans1="test@dev.klab.net:var/www/tst"
ans1="test@dev.klab.net:var/www/dev"
ans1="test@klab.net:var/www/target"

select ANS in "$ans1" "$ans2" "$ans3"
do
if [ -z "$ANS" ]; then
continue
else
break
fi
done
echo

serverno=$REPLY
servername=$ANS

# dry run
for file in $files_modified;
do
cmd="scp -Cpr $file $servername/$file"
echo "$cmd"
done

echo
echo -n 'Do you want to continue (yes/no)?: '
read answer

# exit it "yes" or "y" not received
if [ "$answer" != "yes" ] && [ "$answer" != "y" ]
then
echo
exit 1
fi

echo

# copy files
for file in $files_modified;
do
cmd="scp -Cpr $file $servername/$file"
echo "$cmd"
output=$($cmd 2>&1)

if [ $? -eq 0 ]
then
echo "ok"
else
echo "failed ($output)"
fi
echo
done

echo


使用方法はPATH通った場所に置いた後、リポジトリルートでgit-deploy.shとタイプするだけ。
未コミットな物が表示されます。
サーバ選択が出て、生成されたコマンドを確認するドライラン(yes/no)が走ります。
コマンドが問題ないなら、yesかyを選択するとSCPで飛ばしてくれます。

前:PHPからシリアライズされたMySQLのカラムを表示するワンライナー 次:Adobe Source Code Pro

関連キーワード

[IT]

コメントを投稿する