2011-09-02 44 views
4

我需要我的数据库跨两台本地计算机同步,而不使用中间的服务器。经过一番研究,我认为我可以使用Git挂钩来完成我的任务。导出和导入数据库上的Git推和

我基本上想要的是运行git pushmysqldump(并添加SQL文件,以提交)上git pullmysqlimport,并从远程仓库。

我找不到任何具体的钩子。我尝试了pre-commit钩子,但是这并没有在当前提交中添加SQL文件。然后我尝试prepare-commit,但没有运气。

有没有人得到这个答案?

回答

2

我会为你的系统编写一个包装,也许是“commit.php”或“git-ci.sh”或其他东西。然后你可以使用bash或者perl或者python或者php或者任何你喜欢的,并且一个接一个地运行每个命令,并且完成提交。

我试图添加到提交前提交钩子正在运行类似的问题后,我建议这个。另外,在下游没有“推”或“拉”钩(我使用中央存储库,所以如果你有两台机器互相推拉)。

我有一个双面部署脚本为我的网站之一,我有一个很长的预提交脚本,但在Web服务器上我有一个这样的包装提取,然后检查提交,输出报告,并给出我可以选择是否与其他服务器进行合并和rsync,等等。它取代了一个“拉”挂钩,这可能是一个重大的安全隐患。

汉斯

+0

谢谢你的接吻。任何想法,我可以阅读更多关于包装? –

+0

我写过我的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

+0

最后,你可以做这样的passthru (“/ usr/bin/rsync --exclude'/ db_backup_svn/*'--exclude'.git'-e ssh -avzp --delete/home/website/[email protected]:/ home/website /”) ;' – Hans