[英]Remove unnecessary svn:mergeinfo properties
當我在我的存儲庫中合並東西時,Subversion 想要添加/更改很多svn:mergeinfo
屬性到與我想要合並的東西完全無關的文件中。
之前在 Stack Overflow 上已詢問過有關此行為的問題:
根據我對上述主題的理解,我的存儲庫中的很多文件似乎都有明確的svn:mergeinfo
屬性,而實際上它們不應該。 建議是減少數量,僅將這些屬性放在相關文件/文件夾中。
所以現在我的問題是:如何輕松刪除那些不需要的屬性? 我正在使用 TortoiseSVN,但我不願意手動檢查/修復數百個文件。 有沒有更簡單的方法來刪除那些不必要的svn:mergeinfo
屬性?
PS 我不是在尋找 C++ SVN API 代碼。
這是刪除所有子樹 svn:mergeinfo 屬性但不在根文件夾中的另一種方法(這是分支正常工作所必需的)。
從項目的根目錄執行:
svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"
這是一種刪除所有子樹 svn:mergeinfo 屬性的方法。 在存儲庫的根目錄中運行它:
svn propget svn:mergeinfo --depth=infinity
| grep -v "^/"
| grep -v "^\."
| cut -d- -f1
| xargs svn propdel svn:mergeinfo
一站式輕松復制/粘貼:
svn propget svn:mergeinfo --depth=infinity | grep -v "^/" | grep -v "^\." | cut -d- -f1 | xargs svn propdel svn:mergeinfo
要在運行之前預覽這將影響哪些文件,請將最后一個“propdel”更改為“propget”或完全刪除最后一個 xargs 管道。
由於我對盲目svn:merge-info
屬性刪除沒有信心,我已經實現了一個工具來分析工作副本的當前情況,並從非根合並信息屬性中刪除盡可能多的合並修訂。 在額外的人工檢查和控制之后,可以提交對工作副本的更改。
這里是: svn-clean-mergeinfo
不要猶豫,報告有關其使用的任何問題以改進它。
Subversion 1.10 引入了一個專用於該任務的新工具: svn-mergeinfo-normalizer
我知道已經有一段時間了,但我遇到了類似的問題。 我正在使用 TortoiseSVN 1.6.7。 碰巧該屬性位於我的工作副本的根目錄上。 當我查看根目錄上的屬性並單擊 svn:mergeinfo 上的刪除時,它詢問我是否要遞歸刪除它。 這擺脫了我所有的 svn:mergeinfo cockups。
如果您確定要批量刪除 mergeinfo 屬性,可以使用以下 BASH 腳本。
FILES=`svn status |grep "^ M " |sed s/" M "// |tr '\n', ' '`
svn revert $FILES
它獲取已更改文件的列表,將其過濾為僅合並信息更改,刪除除實際文件路徑之外的所有內容,將每行路徑轉換為空格分隔列表,然后在該列表上恢復調用。
除了盲目地刪除 mergeinfo 屬性,還可以完成“丟失”的合並。
從根文件夾復制 mergeinfo 屬性,然后對子文件夾執行合並以獲取適當的相對路徑和完全相同的修訂列表。 (您可以但不需要僅列出此列表與子文件夾中已有的列表之間的差異。)
通常,此合並最終應該只更改 mergeinfo 屬性,而不是任何實際文件。 (如果它最終改變了文件,那么之前的合並之一一定只是部分合並,這可能已經給你帶來了問題。)
一旦你讓它們完全匹配,這樣做應該最終會為你刪除 mergeinfo 屬性。 您可能還需要執行相反的操作:將僅存在於子文件夾中的任何合並修訂合並到根目錄中(同樣,您可以粘貼完整列表並讓 SVN 為您找出差異)。
要在目錄結構中進行更改,這將是(僅非 DOS 'find'):
find . -path "*/.svn" -prune -or -exec svn propdel svn:mergeinfo '{}' \;
運行連接到 1.5 服務器的 1.6.12 客戶端,我有類似的問題; 項目中有一個子目錄需要它自己的 svn:mergeinfo,但是有 121 個這樣的條目(包括 ./var 下面的 5 個目錄,帶有“svn:ignore *”)似乎有點不合適。 因此,最好有一個(例如 Python)腳本,它能夠刪除明顯多余的合並信息並講述其他差異......
從存儲庫的根目錄運行以刪除 svn:mergeinfo 屬性:
svn propdel -R -q svn:mergeinfo `svn ls`
svn propdel -R -q svn:mergeinfo (svn ls)
此命令的好處:
PS。 如果您在根目錄中提交了名稱中包含空格(或其他不尋常符號?)的文件,命令可能會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.