我正在編寫一些腳本來使用較新版本的xml文件更新Linux盒子的SVN回購。回購是巨大的,並沒有在同一個盒子結帳版本。這個想法是在沒有工作副本的情況下更新xml。這是可能的還是我需要結帳到一個臨時文件夾,複製/覆蓋,檢入並刪除臨時文件夾?如何更新SVN文件而不執行結帳?
編輯:非常感謝您的回答。
我知道,你可以使用API和代碼,不知道是否任何SVN命令這樣做,這樣做...
非常感謝。
我正在編寫一些腳本來使用較新版本的xml文件更新Linux盒子的SVN回購。回購是巨大的,並沒有在同一個盒子結帳版本。這個想法是在沒有工作副本的情況下更新xml。這是可能的還是我需要結帳到一個臨時文件夾,複製/覆蓋,檢入並刪除臨時文件夾?如何更新SVN文件而不執行結帳?
編輯:非常感謝您的回答。
我知道,你可以使用API和代碼,不知道是否任何SVN命令這樣做,這樣做...
非常感謝。
問題是你不想用結賬來打擾,還是因爲擔心如果你結賬,你將不得不結賬很多文件?
你必須在Subversion中籤出。沒有工作副本,您不能簡單地提交更改。 (並非完全如此,你可以做svn delete
和svn mkdir
沒有結賬。)
但是,你可以限制那些獲得與--depth
開關簽出的文件的數量。例如,您可以執行以下操作:
$ svn co --depth=empty http://myserver/myrepos/mydirectory
這將檢出目錄,但沒有任何文件。然後,您可以做你要修改的文件的svn update
,然後提交這些變化:
$ cd mydirectory #Enter the empty working copy just checked out
$ svn update fileToChange #Adds file you want to change to your working dir
$ edit fileToChange.xml
$ svn commit -m "Modified 'fileToChange.xml' with latest version"
這將允許您更改文件fileToChange.xml而不必簽出整個目錄。
我沒有測試過這個,但如果它真的起作用,這裏就是完美的解決方案...... – 2011-06-17 19:37:32
針對我的jboss部署目錄的SVN副本進行了測試,該目錄有許多戰爭文件的演出。這是從沒有工作副本的系統提交新戰爭文件的絕佳方式。 – 2014-06-13 16:18:27
只需使用'svnmucc' – bahrep 2016-07-04 17:53:24
如果沒有工作副本,您不能提交更改。原因是svn不會將文件發送到服務器,它會發送增量(即差異)。這是爲了減少網絡流量而設計的,但顯然它需要知道以前的版本才能計算差異。
您可以使用稀疏選項簽出工作副本,因此您可以創建一個只包含該文件的WC,不需要檢出整個存儲庫。 另外,您可以使用webdav公開repo,然後您只需將新文件複製到舊的文件上,自動提交選項將計算diff並簽入文件。
您可以將工作副本存儲在臨時位置,然後您只需將文件複製到其中並提交。無需刪除WC,只需確保只有特殊的svn用戶可以訪問它,並且您可以在下次需要執行此操作時離開WC。
如果不在本地檢出文件夾,則無法更新文件。然而,有一個快捷方式:爲了不簽出整個存儲庫,您只能簽出您要更新的文件所在的子文件夾。
如果你的聲望在https://your.domain/myrep
,你可以檢查出https://your.domain/myrep/myfolder
這樣一來,除非你有根文件夾中的XML文件,你會減少文件的數量。如果您可以控制存儲庫,則甚至可以創建一個具有存儲該文件的單一目的的子文件夾。
有一種方法可以在沒有工作目錄的情況下「更新」文件,但這取決於你想要做什麼。我很多情況下,我做了一些自動化簽入這樣的,我發現這個解決方案不夠好:
您可以使用svn import
更新文件
喜歡的東西:
svn import -m "updating the xml" local.xml http://server/path/to/repo/server.xml
美中不足的是,你無法導入一個已存在的文件,所以你必須發出一個刪除,然後輸入:
svn delete -m "deleting for update" http://server/path/to/repo/server.xml
你失去的歷史,但它是一個非常簡單的和輕量級的方式來更新文件,完全取決於你在做什麼。如果您對刪除和歷史記錄丟失不滿意,則必須使用其他答案建議的方法。
如果您有Subversion 1.8或更高版本的客戶端,那麼您可以一次添加或更新一個或多個現有文件,而無需使用svnmucc put
命令檢出存儲庫。見http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html。
您可以使用--depth = files,或--depth = empty,然後是'svn update file-to-change.xml'來進行淺層結賬。但是可以使用webdav一次性更新文件,或使用SVN客戶端API編寫自己的客戶端。 – Rup 2011-06-13 12:54:17
你的意思是什麼更新?替換當前文件或合併更改並在事後提交? – Yossi 2011-06-13 13:02:39