2011-03-08 85 views
2

我正在尋找使用git來管理WordPress項目的版本控制。使用Git管理WordPress的本地,dev和live版本

我通常有一個本地版本,一個Web服務器上的開發版本,客戶端可以訪問和測試,然後一個實時版本。

我通常會在本地開發,然後將我的更改推送到服務器上的回購,然後SSH進入服務器上的dev文件夾並從回購中拉出。當我想要將實時站點上的更改發佈到Web服務器上的活動文件夾中並從回購站點拉出時,

這是我的困境。

我希望通過WordPress管理員(圖片上傳等)將媒體添加到本地版本中,但我希望將媒體添加到開發版本進行跟蹤,這樣當我將實況網站中的媒體文件dev站點被拉。

任何關於使這種工作的最佳方式的想法?

回答

5

對此可能有更好的解決方案,但這兩種方案在類似情況下對我來說工作得很好。假設您在本地工作的分支名爲master,並且在所有存儲庫中,遠程origin指向您推送的裸倉庫。

  1. 如果所有的媒體準確落入一個目錄,你可以有一個獨立的存儲設備,跟蹤媒體和補充,爲submodule給DEV和現場信息庫。在您的本地副本,你應該:

    • [在您希望在本地實時影音的情況]要小心,不要(一)提交你的子模塊,(二)推進從它也不是(c)加入子模塊的新版本,以你的master分支
    • [在情況下,你並不需要在所有的媒體在你的本地副本]不更新,並在所有初始化子模塊 - 只需添加其路徑.git/info/exclude

    即使您的媒體處於不同的目錄中,您仍然可以使用此方法,但管理子模塊有點痛苦,並且會得到ra如果你有很多它們,你會更加惱怒。

  2. 或者,您可以將您的開發和實時存儲庫保留在不同的分支上,稱爲with-media,它始終與master相同,但具有在歷史記錄末尾添加媒體的提交。您可以使用git rebase來維護這種情況。舉例來說,如果你只是做本地的一些變化,你要推,你會怎麼做:

    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 
    

    要建立在首位的分支,你會怎麼做:

    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重新排序歷史。

    ssh server 
        cd dev 
        git rebase -i origin/master 
        # Reorder the lines so that the non-media commits are first (earliest) in the file. 
        # Save the file and exit your editor. 
    
        # Now find the SHA1 sum (object name) of the last commit that has non-media changes. 
        # (The object name of the commits will have been changed by the rebase.) 
        git log --oneline 
    
        # Let's say that was commit f414f3l. Then you can push just the history up to and 
        # including that commit back to the master branch with: 
        git push origin f414f3l:master 
    
        # Also push your 'with-media' branch back: 
        git push origin with-media 
    

    在一個理想的世界中,你將不再需要經常做這些最後的步驟,但在實踐中的好,知道該怎麼做:)

+0

非常感謝您的詳盡的解釋。這有很大的幫助。 – Daelan 2011-03-10 14:24:04