2011-10-26 46 views
2

我在初始修訂期間向svn存儲庫添加了一些文件。但現在,這些文件已經不存在了,並且通過直接在xcode 4.2中刪除它們來完成。但它們仍然存在於svn中,我想將svn存儲庫更新爲本地項目版本。我知道我可以使用svn rm命令刪除每個文件,但關於這個問題的想法讓我很煩惱,因爲我需要手動查找,選擇和刪除每個文件。任何不太痛苦的解決方案?如何在刪除xcode中的本地文件後與svn存儲庫同步項目?

ps。此外,如何檢查本地項目和svn存儲庫之間的差異的任何建議都是受歡迎的。目前,如果我正在執行更新,那麼xcode會說我的本地副本是最新的,所以我甚至手動找到丟失的文件。

回答

4

如果你不介意進入命令行,你可以運行svn status並找到你刪除的文件。這些將以驚歎號開始。以下是我剛剛使用的一個存儲庫示例:

$ svn status 
!  subversion/pre-commit-kitchen-sink-hook.html 
!  subversion/svn-watch.html 
!  bludgen/bludgen.html 
!  duplicate-properties-files/fixup.html 
!  cvstools/group.html 
!  cvstools/find-branch-usage.html 
A  cvstools/someprogram.py 
M  cvstools/find-branch-usage.pl 
!  cvstools/scramble.html 
M  cvstools/findNames.pl 

現在,您只需找到程序的名稱即可。如果你在你的程序的名稱沒有空格,一個簡單的[AWK]腳本應該足夠了:

$ svn status | awk '/^!/ {print $2}' 
subversion/pre-commit-kitchen-sink-hook.html 
subversion/svn-watch.html 
bludgen/bludgen.html 
duplicate-properties-files/fixup.html 
cvstools/group.html 
cvstools/find-branch-usage.html 
cvstools/scramble.html 

現在,你有程序的列表,你可以運行通過xargssvn rm命令:

$ svn status | awk '/^!/ {print $2}' | xargs svn rm 
D   subversion/pre-commit-kitchen-sink-hook.html 
D   subversion/svn-watch.html 
D   bludgen/bludgen.html 
D   duplicate-properties-files/fixup.html 
D   cvstools/group.html 
D   cvstools/find-branch-usage.html 
D   cvstools/scramble.html 

幸運的是,Macs帶有Subversion命令行客戶端。這將刪除您通過Subversion手動刪除的文件,並允許您提交更改。然後,您將能夠使用最新的代碼更新您的存儲庫副本。可能會有一些衝突(你刪除了一個更新版本中某個人的文件),但是這些文件應該是非常易於管理的。

您可以使用svn diff查找當前工作副本與存儲庫的HEAD修訂版之間的差異。不幸的是,--summarize參數僅適用於您存儲庫存儲庫差異的存儲庫。但是,您可以過濾掉所有使用grep不同的文件,查找以Index:開始行:

$ svn diff -rHEAD | grep "^Index:" 
Index: windows-tools/which.pl 
Index: subversion/pre-commit 
Index: subversion/README 
Index: subversion/control.ini 
Index: subversion/pre-commit-kitchen-sink-hook.html 
Index: subversion/svn-watch.html 
Index: cvstools/findNames.pl 
Index: cvstools/group.html 
Index: cvstools/find-branch-usage.html 
Index: cvstools/someprogram.py 
Index: cvstools/find-branch-usage.pl 
Index: cvstools/scramble.html 
Index: bludgen/bludgen.html 
Index: duplicate-properties-files/fixup.html 

唯一真正的問題是,Xcode使用Subversion客戶端是否與Subversion命令行客戶端兼容。例如,VisualStudio Subversion客戶端使用_svn作爲Subversion信息目錄的名稱,而命令行客戶端使用.svn

我相信XCode Subversion客戶端與Subversion命令行客戶端的修訂版本1.6.x兼容(甚至更早的版本可以回到1.4版本),但是與最新的1.7版本Subversion不兼容。

如果您還沒有與Mac的Subversion安裝篡改,它應該是罰款。

+0

棒極了。感謝這樣一個很棒的svn命令使用指南。這絕對是解決我的問題的方法。希望將來在xcode中會有更方便的svn功能集成:) GL。 – Centurion

1

,我所知道的唯一的方式做你想是什麼:

  • 轉到文件 - >源代碼控制 - >庫
  • 選擇你的倉庫
  • 單擊提交
  • 單擊平面視圖圖標(左側)
  • 任何缺少的文件都顯示爲!,您可以右鍵點擊以放棄更改。

編輯 - 對不起,我誤解了這個問題。這可能會幫助您找到丟失的文件,但不會幫助您提交。我以爲你試圖恢復刪除,而不是提交它們。

+0

謝謝,這應該是少數,至少在找到丟失的文件。 – Centurion

+1

此外,我發現,通過選擇那裏的丟失文件,並選擇放棄更改使xcode關於丟失文件的警告消失。 – Centurion

+0

是的,這將在本地恢復文件。 – HaemEternal

相關問題