使用Git管理WordPress的本地版,开发版和实时版

时间:2011-03-08 23:36:50

标签: git wordpress

我正在考虑使用git来管理WordPress项目的版本控制。

我通常有一个本地版本,一个Web服务器上的开发版本,客户端可以访问和测试,然后是实时版本。

我通常会在本地开发然后将我的更改推送到服务器上的repo,然后SSH到服务器上的dev文件夹并从repo中拉出来。当我想在实时网站上发布更改时,我将SSH连接到Web服务器上的实时文件夹并从存储库中提取。

这是我的困境。

我希望通过WordPress管理员(图片上传等)添加到本地版本的媒体被忽略,但是我希望跟踪添加到Dev版本的媒体,以便当我从开发者网站获取媒体文件时网站被拉了。

有关制作此类作品的最佳方法的任何想法?

1 个答案:

答案 0 :(得分:5)

可能有更好的解决方案,但在类似的情况下,这两个选项对我来说都很好。假设您在本地工作的分支称为master,并且在您的所有存储库中,远程origin指的是您推送到的裸存储库。

  1. 如果您的所有媒体都整齐地放入一个目录中,您可以拥有一个跟踪媒体的单独存储库,并将其作为submodule添加到开发人员和实时存储库中。在本地副本中,您应该:

    • [在你想要本地媒体的情况下]注意不要(a)在子模块中提交,(b)从中推送,(c)将新版本的子模块添加到你的{{1}分支
    • [在本地副本中根本不需要这些媒体的情况]根本不更新和初始化子模块 - 只需将其路径添加到master

    即使您的媒体位于各种目录中,您仍然可以使用此方法,但管理子模块会有点痛苦,如果您有很多这些子模块,则会更加恼人。

  2. 或者,您可以将dev和live存储库保存在不同的分支上,例如称为.git/info/exclude,它始终与with-media相同,但提交最后添加媒体的提交历史。您可以使用master维护此情况。例如,如果您刚刚在本地进行了一些想要推送的更改,那么您可以这样做:

    git rebase

    现在假设你将一些文件上传到dev存储库,并想要提交它们:

    git push origin master
    
    ssh server
    cd dev
    # git branch should show you that you're on 'with-media'
    git fetch origin
    git rebase origin/master
    

    现在要更新您的实时存储库,您可以这样做:

    ssh server
    cd dev
    git add [whatever-media-files]
    git commit
    git push origin with-media
    

    要首先设置这些分支,您可以这样做:

    ssh server
    cd live
    # git branch should show that you're on 'with-media'
    git fetch origin
    git merge origin/with-media
    

    最后一点,假设您在dev存储库中进行了一些不仅仅是添加媒体的更改,而且您希望在ssh server cd dev # git branch should show that you're on 'master', since you haven't created # the other branch yet: git checkout -b with-media git push origin with-media cd ~/live git fetch origin git checkout -t origin/with-media 分支中更改这些代码。然后(在推送任何内容之前!)您需要使用master重新排序历史记录。

    git rebase -i origin/master

    在一个理想的世界中,你不需要经常做最后的步骤,但在实践中,知道如何做到这一点很好:),