使用git管理、部署WordPress的主题代码修改


随着本站上的代码修修补补越来越多,需要认真考虑使用版本管理工具这个码农最可靠的伙伴来保护劳动成果。同时,git还可以实现通过push将新代码直接发布到远端网页服务器的功能。

这个系统里有三个设备:开发PC,git服务器,网站服务器。代码修改工作在开发PC上完成,本地提交后同时push到git服务器和网站服务器,从而实现代码版本管理和网站发布的同步。

开发PC和git服务器都是常规配置,严肃的个人开发者应该在开发PC上部署一个MAMP之类的玩意儿,玩票如我者就免了。关键在于网站服务器上要建立一个non-bare的git仓库,然后从开发PC直接push。这里要利用比较新的git版本中提供的receive.denyCurrentBranch属性。在初始化好的git目录里,通过如下命令设置,使得开发PC推送过来的提交可以直接更新当前的工作目录。

git config receive.denyCurrentBranch updateInstead

以往我们在git服务器上建立的仓库都是bare类型的(project.git),没有工作目录。而做为网站服务器当然需要一个真实的包含最新版本php文件的目录来提供web服务。

CentOS 7所使用的软件仓库里竟然还是Git 1.8版本,不能支持这个特性。从网上找到方法通过一个比较可靠的第三方repo安装了2.16的软件包。

网站服务器上的git仓库和工作目录还有一个访问权限问题:这个工作目录需要能和网站其他文件一样能被你的网页服务用户访问——在我的服务器上是用户www。一般git服务器仓库的用户和群组都是git,这里我把git用户的基本用户群组(primary user group)改成了www,这样用户git创建的文件就能被用户www通过同组权限的途径访问了。当然,也要确保组权限设置满足需要。

usermod -g www git

在开发PC上可以建立一个remote群组’all’。修改.git/config文件,增加如下定义:

[remote "all"]
    url=ssh://user0@server0/repos/g0.git
    url=ssh://user1@server1/repos/g1.git

本地提交后,只要运行git push all就可以同时更新git服务器和网站了。你现在浏览的这个WordPress网站的TwentySixteen主题就是这样经过修改后发布的。:-)