2010-05-27 83 views
4

我們的Subversion版本庫有幾個包含共享文件的子目錄以及每個項目的子目錄。使用相對svn:externals屬性設置項目,以便將共享目錄從存儲庫中提取出來,並將它們設置爲子目錄。從Subversion提交相關外部文件

因此,舉例來說,我們repostory看起來是這樣的:

 
client 
shared 
portable 
app1 
app2 

app1作爲其svn:externals

 
../shared shared 
../portable portable 

,這樣結賬,portableshared可用作的app1子目錄。

TortoiseSVN的有漂亮的功能,做一個承諾上app1將自動檢測externals子目錄,意識到自己是同一個版本庫的一部分,並 提交他們所有的變化相同的部分承諾。但是,我無法弄清楚如何從命令行客戶端獲得相同的行爲。有什麼建議麼?

+0

也依靠這個功能,並沒有注意到命令行客戶端沒有打球。 – 2010-05-27 13:53:10

回答

0

事實證明,這有一個非常簡單的解決方案,至少在Subversion 1.6.12中:明確指定命令行上的路徑。

例如,如果我跑

cd app1 
svn ci file_in_repository.cpp shared portable 

Subversion會犯app1shared,並且portable都在一個版本,因爲我想它。顯然,命令行客戶端默認情況下不會處理外部數據,但如果明確給出,則無需處理單個提交。

2

此功能尚未實施。從SVN ver. 1.5 book採取以下:

也許最令人失望的,通過 外部定義創建的 工作拷貝 從主要工作 副本斷開連接(在其版本目錄 了svn:externals屬性實際設置爲 )。而Subversion仍然只能在非加密 工作副本上運行。因此,舉例來說,如果 要提交,你已經 在一個或多個這些外部 工作拷貝進行了更改,你必須運行svn 這些工作的主要 工作 副本,提交提交明確副本不會遞歸到任何 外部。

我也檢查了SVN 1.6 release notes並且只有兩個改進 所做的與svn:externals有關。它們是:支持svn:externals中的文件,並支持外部定義中常用的shell引用規則。

也許,這不是一個值得實現的功能(這也是我的看法)。通常,svn:externals用於將相對穩定的頭文件/文件包含到某個依賴於它們的項目/應用程序中。通常它們引用某些修訂的標籤或路徑。這是一個很大的問題,沒有特別的答案,在這種情況下,svn客戶端應該做什麼。

0

只需指出,上面的解決方案 - 分別引用每個外部項目 - 僅在外部參考是絕對參考時纔有效。