2017-06-14 148 views
1

在我的工作場所有一個大型的svn倉庫(+80.000版本)和大量的二進制文件。我正在嘗試使用git-svn,但克隆整個歷史似乎是不切實際的(它需要超過100 GB並且將近一週才能完成整個過程)。在git-svn中處理大型倉庫與二進制文件

我試過克隆修訂版的一個子集(最後~10.0000),並且工作得很好。這種方法的主要缺點是,責任只限於我提取的最舊版本。

理想情況下,我想克隆源文件的整個歷史記錄,並且僅克隆最後一千個二進制文件的修訂版本。這是否有可能?還有其他建議嗎?

+1

你應該看看Git LFS。 –

+0

[Git with large files]可能重複(https://stackoverflow.com/questions/17888604/git-with-large-files) –

+0

@OliverCharlesworth和@PeterReid你讀過這個問題了嗎?這是關於'git-svn',原則上不是關於Git中的二進制文件。 – Vampire

回答

0

我在我的工作場所遇到過同樣的問題,所以我會分享我的解決方案。

不幸的是,解決方案並不能做你想象中的事情(儘管我最初也是這麼想的)。解決方案是重構存儲庫,從源中分離二進制文件。這說起來容易做起來難,因爲你需要讓你的部門加入,影響你的團隊的工作流程,但是如果你能把它取消,那將是值得的。

實際上有三種類型的文件來考慮:

  • 源應該在庫中分離出來。這很容易理解。
  • 第三方二進制文件也可能會提交到存儲庫,儘管通過svn:externals導入它們可避免大量潛在的重複。這些二進制文件並不是很糟糕,因爲你不會有很多歷史。
  • 生成的二進制文件(彙編的輸出)是迄今爲止最糟糕的!這些都會隨着每一次編輯而改變,並且保持歷史沒有意義。 VCS系統不打算處理這個問題。一些公司喜歡提交二進制文件,因爲他們可以在不編譯的情況下檢查最新的負載,但是成本很高。

,我一直在實施的解決方案是在一個重大的產品構建和包裝所有的二進制文件從一個單一的命令。然後,我將構建,打包並存檔構建機器的夜間(或按需)構建。人們可以從構建機器中獲取最新的二進制文件,只要包是安裝友好的,它比做一個svn up更容易,因爲你不會有太多的更新/衝突/合併。這會使生成的二進制文件完全脫離SVN。