我需要我的数据库跨两台本地计算机同步,而不使用中间的服务器。经过一番研究,我认为我可以使用Git挂钩来完成我的任务。导出和导入数据库上的Git推和
我基本上想要的是运行git push
mysqldump
(并添加SQL文件,以提交)上git pull
和mysqlimport
,并从远程仓库。
我找不到任何具体的钩子。我尝试了pre-commit
钩子,但是这并没有在当前提交中添加SQL文件。然后我尝试prepare-commit
,但没有运气。
有没有人得到这个答案?
我需要我的数据库跨两台本地计算机同步,而不使用中间的服务器。经过一番研究,我认为我可以使用Git挂钩来完成我的任务。导出和导入数据库上的Git推和
我基本上想要的是运行git push
mysqldump
(并添加SQL文件,以提交)上git pull
和mysqlimport
,并从远程仓库。
我找不到任何具体的钩子。我尝试了pre-commit
钩子,但是这并没有在当前提交中添加SQL文件。然后我尝试prepare-commit
,但没有运气。
有没有人得到这个答案?
该解决方案由Ben Kulbertis采用预提交和合并后的git钩来完成这项工作。奇迹般有效!
http://ben.kulbertis.org/2011/10/synchronizing-a-mysql-database-with-git-and-git-hooks/
我会为你的系统编写一个包装,也许是“commit.php”或“git-ci.sh”或其他东西。然后你可以使用bash或者perl或者python或者php或者任何你喜欢的,并且一个接一个地运行每个命令,并且完成提交。
我试图添加到提交前提交钩子正在运行类似的问题后,我建议这个。另外,在下游没有“推”或“拉”钩(我使用中央存储库,所以如果你有两台机器互相推拉)。
我有一个双面部署脚本为我的网站之一,我有一个很长的预提交脚本,但在Web服务器上我有一个这样的包装提取,然后检查提交,输出报告,并给出我可以选择是否与其他服务器进行合并和rsync,等等。它取代了一个“拉”挂钩,这可能是一个重大的安全隐患。
汉斯
谢谢你的接吻。任何想法,我可以阅读更多关于包装? –
我写过我的PHP(调用exec()和passthru()),因为我使用PHP最多,对我来说很简单。只要使用任何脚本语言对你来说最简单,可能是python,ruby,bash,perl等等。使用该语言的能力,调用git命令。例如在php中,我会调用'exec('/ usr/bin/git fetch');'在下一行紧跟'exec(“/ usr/bin/git log --name-only --format = oneline ..origin/master> {$ log}“);'然后经过一些检查,'exec(”/ usr/bin/git merge origin/master“);' – Hans
最后,你可以做这样的passthru (“/ usr/bin/rsync --exclude'/ db_backup_svn/*'--exclude'.git'-e ssh -avzp --delete/home/website/[email protected]:/ home/website /”) ;' – Hans