2009-07-22 57 views
1

在我的存儲庫中,我存儲了幾個外部庫。當庫的新版本,我做了以下任務,以更新它在我的倉庫:SVN存儲庫中的外部庫更新

  1. 結帳我的老版本的庫
  2. 遞歸刪除一切,但的.svn目錄
  3. 複製新版本的庫
  4. SVN狀態看到的變化
  5. 添加新的文件和目錄,刪除刪除的文件和目錄
  6. 提交

有沒有更好(或更簡單)的方法來完成這項任務?

請注意,我不能使用svn:外部因爲我只使用一些庫提供SVN訪問。

回答

3

你正在做的事實際上是管理供應商分支的最乾淨的方式,特別是如果你有自己的代碼定製。

在很多情況下,可能並不需要跟蹤外部庫的已刪除文件,但OTOH很容易編寫腳本,所以我會繼續使用此過程。無論如何,我都是這樣做的。

1

我認爲svn externals是你在找什麼。一些很好的文檔可以在這裏找到:http://svnbook.red-bean.com/en/1.0/ch07s03.html

+0

感謝,但通常情況下,我使用外部庫不一定從另一個SVN倉庫。 – 2009-07-22 16:49:20

+2

Externals不需要來自另一個svn倉庫。 下面是你所做的,比如你有/ svn/myproject/trunk/lib/libfoo/ 其中包含3. party庫。你所做的是改爲 /svn/3dparty/libs/libfoo-1.4.53/並使用svn externals鏈接到 /svn/myproject/trunk/lib/libfoo /。當新版本出來時,只需將其放入/svn/3dparty/libs/libfoo-1.4.54/,並將該版本鏈接到該版本。 – nos 2009-07-22 16:58:57

0

您可以爲每個庫創建一個新的存儲庫。然後,當新版本到達時,只需將其複製到庫存儲庫的主幹中,您應該可以看到由SVN標識的修改和新文件 - 無需先刪除舊文件。刪除文件是另一回事 - 但我希望你的圖書館不會像瘋了一樣丟失文件,所以你可以手動管理這些文件。

然後,一旦您檢查了所有更改,就可以將標籤作爲更新版本(可能與庫的版本相匹配),並將該標籤作爲消費項目的外部標籤。

0

你可以在svn中刪除整個目錄,並用新版本再次添加它(假設一個庫位於其自己的目錄中,而不是與其他庫中的混合)。無論如何,您都不需要製作第三方庫的歷史記錄。

0

我做了類似的事情,我將源樹複製到我設置用於本地跟蹤的回購站中。

當有新版本可用:

  • 我直接獲取庫文件ontop的我WC的。
  • 我查看變化(使用烏龜 - 很容易看出哪些已經改變, 的覆蓋變化)
  • 我承諾所有的變化。

它很簡單。很明顯,你沒有得到完整的更改歷史記錄,因爲你一次只跟蹤1個版本,提交最新的更改,但否則它非常有效。

2

我剛剛找到了一個非常快速的方法來做到這一點,如果你在Mac上並且安裝了XCode。我確定必須有其他的文件比較應用程序可以做到這一點,但這是我已經和測試過的。

打開FileMerge(/ Developer/Applications/Utilities/FileMerge)並在比較文件下,選擇舊版本作爲左側,新版本作爲右側。點擊比較,然後在結果屏幕上,選擇左欄中的所有目錄和文件。然後,在「合併」下拉列表中,選擇「使用權限」或點擊Cmd-3。您可能會被要求指定一個合併目錄。如果是,請瀏覽到原始版本的目錄並選擇該目錄。

如果您現在在圖書館的目錄中有svn status,您將看到更改文件的列表。 svn addsvn delete標有?!的標識。報到!

如果在過程中的任何一點搞砸了,想重新開始,這很容易:

find . -type f -not -path '*.svn*' -exec rm {} \; 
svn update --depth=infinity .