我有Windows 7,但我认为它不算,因为钩子使用git shell。我尝试使用以下代码通过提交转储我的数据库,但它不起作用。
#!/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
是否可以修复它?
答案 0 :(得分:1)
我也试图这样做,并得出了不同的结果,但最终确实有效。也许git自去年以来有一些更新解决了这个问题?也许是因为我在Mac上?这是我现在使用的预提交。 (感谢大家的帮助)
#!/bin/sh
# Dump a fresh copy of the database
mysqldump -u root --password="password" myDB --skip-extended-insert > dump.sql
git add dump.sql
注意:对{b}进行任何更改都不需要--skip-extended-insert
,我就像在git中跟踪我的SQL转储一样,添加了额外的选项。
似乎重要的是我如何运行git命令
如果我从命令行运行git
,则没有问题。
如果我通过SourceTree运行git
,则会出现错误unless SourceTree is run from the commandline too.
答案 1 :(得分:0)
要调试sh,请使用
sh -x script
(评论设置-e )
您可以在开头提供您的rc文件以避免使用完整路径:
source ~/.shrc
答案 2 :(得分:0)
如果git位于.profile / .bash_profile等的路径中,则不需要设置它。那说你只是“添加”文件而不是提交它。添加后,您需要运行
git commit -m "updated schema"
答案 3 :(得分: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
答案 4 :(得分:0)
我知道OP已经找到了他的解决方案,但是对于任何寻找mysqldump的预提交钩子的人来说,请检查这个Gist ..它应该为你完成这项工作: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