2010-06-21 97 views
25

我有一個svn工作副本,我試圖反向合併一些最近的修訂版本。在我改變主意之前,我在完成合並之前取消了合併。現在我的工作副本從更新到大多數文件的祖先相關屬性有幾千「更改」。我有大約10個具有實際代碼更改的文件,其中我不希望手動分離。Svn恢復所有屬性更改

有沒有辦法讓我恢復所有的屬性更改而不影響內容更改?

回答

9

原來,Tortoise SVN可以很好地做到這一點。在提交對話框中,您可以通過「文本狀態」或「屬性狀態」對「已修改」文件進行排序。我簡單地按文本狀態排序,然後恢復所有具有「正常」「文本狀態」的「已修改」文件。

+0

這也適用於恢復(我想象任何其他烏龜命令)。謝謝你的提示! – sam 2011-02-03 12:23:10

-3

我只是複製/備份其中10個文件,其中只有svn revert -R整個項目,然後複製10個文件。

+2

100多個文件呢? – Vanuan 2011-05-06 12:38:28

16

如果使用'--depth empty'選項,則只會將更改恢復爲在命令行上明確指定的路徑,所以如果指定了所有具有屬性更改但沒有內容更改您的文件的目錄想保持。

例如如果你的目錄'foo'有不需要的屬性改變,但是'foo'裏面的文件'bar',下面應該把mod保存爲'bar',但是恢復'foo'的屬性改變。

$svn revert --depth empty foo 
30
svn revert `svn status | grep '^ M' | sed 's/^ M \+//g'` 
+1

這對我很有效,雖然我不得不編輯這行以'svn'爲前綴的電話 – 2012-01-23 14:20:25

+1

謝謝克里斯,我忘了替換我的bash別名:) – 2012-01-31 20:06:08

+2

您應該使用'^ M'而不是'M'。另外,像「MM」這樣的文件如何改變相關的文字,但會丟棄屬性更改? – calandoa 2013-10-07 17:15:10

0

您可以提交更改,然後恢復從該版本屬性的變化:

SVN合併-c -REV -depth空

其中REV是要恢復的修訂屬性更改

0

使用PowerShell還原所有屬性更改。

> @(svn status) -match '^ M' | ` 
>>> % { ($_ -split 'M\s+')[1] } | ` 
>>> % { svn revert --depth empty $_ } 

感謝傑羅姆JaglaleTheJuice的一般方法。

注意倒勾`符號表示新行。