2012-03-20 23 views
0

我在服務器上的/ var/svn/repository中有一個SVN倉庫,並且在服務器上有一個工作副本,一個'暫存'和一個'實時'。本地開發工作副本以正常方式通過'svn commit'發送到服務器。「svn up」的對面?

我在服務器上有幾個簡單的兩行腳本,它們會轉到相應的位置並執行'svn update'以將內容刷新到最新的存儲庫版本。

  • uplive:

    cd /usr/local/lib/Catalyst/proj/trunk 
    svn up && echo 'go to proj.example.com to see changes' 
    
  • 搶戲:

    cd ~/Catalyst/svn/proj 
    svn up && echo 'go to proj.example.com:3001 to see changes' 
    

我想提出幾個同伴腳本 '前臺' 和 'downlive',但最接近我可以在svn中找到需要修訂號的可變參數: 示例我發現包含像

$ svn merge -r HEAD:nnnn。

$ SVN合併-c -303 http://svn.example.com/repos/calc/trunk ---反向合併R303到 '的integer.c':

我試圖想出了一個簡單的方法做了「 D'哦!」函數,即撤銷最後的svn更新,可以通過腳本調用:例如ssh theServer downstage撤銷最後一個'svn up'並將live/staging系統返回到之前的rev。

毫無疑問,有可能從SVN獲得最新版本, 拿走一個,並要求SVN做一個反向合併,但它似乎是這樣一個明顯的事情想要做,我有點感到驚訝的是沒有更快/更簡單的方法。

+0

我不記得曾經想要做你所描述的精確的事。首先,我的「哦,哦!「更新之後的時刻總是牽涉到希望恢復未被合併混淆的本地更改,而我的IDE的」本地歷史記錄「功能則負責處理該問題.SVN無法提供幫助,因爲它沒有任何本地修改副本其次,在更新之後,本地副本不知道上次更新之前文件的修訂版本;如果更新將某些文件上傳了三個版本,則可能需要返回三個,而不是一個,對吧?但是SVN不知道。 – 2012-03-20 11:48:46

+0

兩個好處。我的OP沒有清楚,在這種情況下,工作副本是活的或暫存服務器副本,它將(或者肯定_should_)永遠不會有任何本地修改但始終只能是開發人員在其他地方的工作副本中進行回購的原始副本,因此不會有_local_ mods;但第二點絕對有效,意味着我需要回到功能請求者我想。 – jvector 2012-03-21 21:45:10

回答

4

如何做一個更新,以前的版本有:

svn up -r PREV 
+1

這是一個很好的答案,謝謝。我沒有在文檔中遇到過「PREV」 - 至少,我沒有記得它。但我認爲我可能有一個問題:提交r99; svn上臺後再活;提交r100; svn到舞臺;提交r101;提交r102; svn到舞臺;提交r103; svn上臺後再活;然後找到潛伏的錯誤,並希望將現場服務器'降低'到它最後一次已知的良好狀態,在本例中它是99而非102 ;-(看起來像在svn之外做一些備份可能是必要的;儘管Alvaro的想法分支也可能是一個跑步者。感謝所有! – jvector 2012-03-21 21:53:45

2

更新工作副本絕不確定性操作。您的工作副本可以在任何隨機狀態之前和之後。如果您想撤消更新,則需要先創建備份。像tar + gz這樣簡單的應用就足夠了。

如果你想讓svn只能預測更新,你可能需要在更新之前創建分支並提交/合併東西。當然,這不會照顧任何非版本的東西。

+0

+1標籤生產版本! – 2012-03-21 23:09:45