2012-02-10 11 views
0

私はWindows 7を持っていますが、フックがgitシェルを使用しているため、カウントしないと思います。私は次のコードでデータベースをコミットしてダンプしようとしましたが、うまくいきませんでした。git pre-commit + mysqldump:既存のコマンドでないパスを見つけることができません

#!/bin/sh 
# Refresh the SQL schema file for inclusion within the git commit 

# If something fails, exit with status other than 0 
set -e 

# select dump directory 
    cd $(git rev-parse --show-toplevel) 
    cd WebShop/DataBase 

# first, remove our original schema 
rm -f backup.sql 

# generate a new schema 
mysqldump -u root --password=root webshopdb > backup.sql 

# Add the schema to the next commit 
git add backup.sql 

# Exit success 
exit 0 

私は2つのエラーメッセージを持っている:

パスが存在しない場合、ディレクトリ名にスペースがそれを壊すため。

cd $(git rev-parse --show-toplevel) 

見つけることができませんコマンド

mysqldump -u root --password=root webshopdb > backup.sql 

それはそれを修正することは可能ですか?デバッグSHに

+0

ニュース: 私はGitのはbashからエラーメッセージを取得するために管理(私はGitのGUIを初めてみましたので、私はメッセージを取得していない) それは言う、そのCDの$( git rev-parse --show-toplevel)にスペース文字が含まれているため、見つかりませんでしたそのパスに含まれているディレクトリ名のうちの一部です。 :Sそして、mysqldumpコマンドはどちらも見つけることができません。これは長い一日になります...:S – inf3rno

答えて

0

私はエラーを修正しましたが、それはsqlファイルを作成しますが、まだコミットに追加しません。我々は、二重引用符 の間にそれを使用する必要がパスに空白がある場合は

#!/bin/sh 
# Refresh the SQL schema file for inclusion within the git commit 

# If something fails, exit with status other than 0 
set -e 

# select dump directory 
cd "$(git rev-parse --show-toplevel)" 

# first, remove our original schema 
rm -f "WebShop\DataBase\backup.sql" 

# generate a new schema 
exec "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" --skip-comments -u root --password=root webshopdb |sed 's$),($),\n($g' > "WebShop\DataBase\backup.sql" 

# Add the schema to the next commit 
git add "WebShop\DataBase\backup.sql" 

# Exit success 
exit 0 
  • :私はなぜ...

    固定コードを知りません。

  • mysqldumpコマンドの の代わりに、mysqldump.exeのexecとフルパスを使用しました。 mysqldumpのオプションによって
  • 製いくつかの変更:
    • スキップコメント
    • 分割はsedの
+0

誰かが追加作業をする方法を言うなら、それを答えとして受け入れます。 – inf3rno

+0

Aはこれから実行可能ファイルを作成しました: http://stackoverflow.com/questions/9254186/mysqldump-from-executable-on-windows-7 なぜアドインが機能していないのかわかりません。私が見つけたすべてのチュートリアルにあります。私は--no-verify param asapで試してみます。 – inf3rno

0

sh -x script 

( -e セットコメント)

を使用して、完全なパスを使用しないように最初にあなたのrcファイルをソース可能性があります

source ~/.shrc 
+0

それは私にとってはあまりにも多くの情報です。 :-)私はbashスクリプトを知らず、コンソールからコミットを呼び出さないので、sh -xスクリプトが何かをコンソールに表示するなら、私はそれを見ません。私はログファイルについて考えていました。うーん、私はcmd.exeで試してみて、コードから.batファイルを作成します。何かいいことが起こるかもしれません。D – inf3rno

+0

2回目のお勧めでテストしましたか? .shrcファイルがない場合は、.bashrcファイルがあるかどうかを確認してください。 スクリプトをデバッグモードでテストするには、sh -xを自分で実行することができます。 –

+0

私は主な問題は、Linuxではなく、Windowsを持っていると思っています...(あなたが反対であると思うなら、教えてください:D) – inf3rno

0

gitが.profile/.bash_profileなどのパスにある場合は、設定する必要はありません。それはあなたがファイルを "追加"してコミットしていないと言いました。あなたが追加した後に実行する必要があります

+1

事前コミットでコミットすると無限ループになりますか? – inf3rno

1

私がしようとしていたことにより、複数の行に挿入(作成時間のフッターに起因したファイルの変更を防ぐため)これもやってみて、混在した結果が出てきましたが、最終的にこれはうまくいきます。たぶんgitは昨年から問題を修正したいくつかのアップデートをしていますか?私はマックにいるからかもしれない?ここで私が今使っている事前コミットがあります。 (すべての人の助けのおかげで)

#!/bin/sh 

# Dump a fresh copy of the database 
mysqldump -u root --password="password" myDB --skip-extended-insert > dump.sql 
git add dump.sql 

注:--skip-extended-insertはbashに変更を加える必要はありません、私はちょうど私のSQLダンプは、余分なオプションではgitに追跡できる方法などが追加しました。かまいように見えた何

私はコマンドラインからgitを実行した場合、私はgitのコマンド

を実行していたかだった、その後、問題はなかったです。

私はSourceTree経由gitを実行した場合、エラーがunless SourceTree is run from the commandline too.

0

がある私はOPはすでに...それが必要彼の解決策を見つけましたが、mysqldumpをのための事前コミットフックを探している人のために、この要旨をチェックしてください知っていますあなたのための仕事をする:https://gist.github.com/wilcollins/dfa33ef20caf6dab5826

#!/bin/bash -e 
# -e means exit if any command fails 
DBHOST=address.to.your.server 
DBUSER=username 
DBPASS=password # do this in a more secure fashion 
DBNAME=DBNAME 
GITREPO=/where/is/your/repo 
DUMP=$GITREPO/where/you/store/dumps 
NEW=$DUMP/schema.sql 
OLD=$NEW.old 

DIR=$(pwd) 
cd $GITREPO 

mv $NEW $OLD 

mysqldump -h $DBHOST -u $DBUSER -p$DBPASS $DBNAME --skip-dump-date --single-transaction > $NEW 

# NOTE : the new schema.sql file & location need to be added to your GIT repo & ignore .old 

if cmp -s $OLD $NEW; then 
    echo Same 
else 
    echo Differ 
    git commit $NEW -m "$DBNAME DB update" 
    echo "schema+data committed" 

    git push # assuming you have a remote to push to 
    echo "schema+data pushed" 
fi 
cd $DIR 
関連する問題