2010-10-07 82 views
0

我有一個包含從停留在非SVN目錄SVN倉庫檢出開發目錄。我想更新所有svns中的dirs。SVN更新

迪爾結構類似於一個如下:

alt text

你將如何解決這一問題?

我想出了「蠻力」解決方案,但它是不是很聰明:

for i in `find . -mindepth 1 -maxdepth 3 -type d | grep -v .svn`; do svn up $i; done 

這將是很好,也有東西想有:

svn --recursive update development_dir. 
+1

我沒有看到你的解決方案有什麼問題。它的工作原理,既然你沒有開發一個全面的svn客戶端爲什麼要麻煩? – akonsu 2010-10-07 13:30:47

+0

使用具有不同源存儲庫的目錄列出列表會不會更容易?這不是他們常常改變的嗎?然後你可以簡單地執行'cat file_with_repositories | xargs svn up' – mhitza 2010-10-07 13:33:29

回答

6

不幸的是,SVN不支持此功能。然而,你可以做的是通過消除循環和管道到grep來優化你的命令。該命令應該是這樣的:

find . -mindepth 1 -maxdepth 3 -name "*.svn" -type d -exec svn up {}/.. \; 

爲了使生活更輕鬆,你可以設置一個猛砸別名,例如:

alias svn_up_recursive='find . -mindepth 1 \ 
-maxdepth 3 -name "*.svn" -type d -exec svn up {}/.. \;' 

...與svn_up_recursive命令調用整個腳本。或者創建一個shell腳本並將其放入您的bin目錄。我個人更喜歡shell腳本,因爲它更容易支持,擴展它們,處理命令行參數等。

+0

我會認爲這是一個沒有功能,因爲簽入是原子操作,你將如何處理不同儲存庫的簽入失敗?你會不得不恢復那些已經成功的人?如果恢復失敗會怎樣? :) – akonsu 2010-10-07 13:58:02

+0

@akonsu:簽入和更新是兩件不同的事情。 – 2010-10-07 14:14:04

+0

是的,我的眼睛今天沒有看到:) – akonsu 2010-10-07 14:17:10

0

如何創建一個虛擬分支/存儲庫和外部組件設置爲所需的分支。這樣,頂層svn更新將在所有子文件夾中進行更新。也許你可以跳過非svn目錄/文件。

您也可以騙由具有的.svn SVN /文件的入口在非SVN的文件夾,這會騙,非SVN文件夾版本的顛覆。只要您不更改文件夾名稱,您在此方法中的提交也不會有任何問題。