我需要我的数据库在两台本地计算机之间同步,而不需要在两者之间使用服务器。经过一些研究,我认为我可以使用 Git 挂钩来为我完成任务。
我基本上想要的是在远程存储库上运行mysqldump
(git push
并将 SQL 文件添加到提交中)并mysqlimport
在git pull
远程存储库上运行。
我找不到任何特定的钩子。我尝试了pre-commit
钩子,但这并没有在当前提交中添加 SQL 文件。然后我尝试prepare-commit
了,但没有运气。
有人对此有答案吗?
我需要我的数据库在两台本地计算机之间同步,而不需要在两者之间使用服务器。经过一些研究,我认为我可以使用 Git 挂钩来为我完成任务。
我基本上想要的是在远程存储库上运行mysqldump
(git push
并将 SQL 文件添加到提交中)并mysqlimport
在git pull
远程存储库上运行。
我找不到任何特定的钩子。我尝试了pre-commit
钩子,但这并没有在当前提交中添加 SQL 文件。然后我尝试prepare-commit
了,但没有运气。
有人对此有答案吗?
Ben Kulbertis 的这个解决方案使用 pre-commit 和 post-merge 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 或任何你喜欢的东西并一个接一个地运行每个命令,完成提交。
在尝试添加到 pre-commit 挂钩正在运行的提交时遇到类似问题后,我建议这样做。此外,下游侧没有“推”或“拉”钩子(我使用中央存储库,因此如果您有两台机器相互推拉,这可能会起作用)。
我的一个网站有一个双面部署脚本,其中我有一个很长的预提交脚本,但在网络服务器上,我有一个这样的包装器,它可以获取、检查提交、输出报告并为我提供有关是否与另一台服务器合并和 rsync 等。它取代了可能是主要安全隐患的“拉”钩。
汉斯