二進制文件和行結束標記轉換

在大多數情況下,Subversion比CVS更好的處理二進制文件,因為CVS使用RCS,它只可以儲存二進制文件的完整拷貝,但是,Subversion使用二進制區別算法來表示文件的區別,而不管文件是文字文件還是二進制文件。這意味著所有的文件是以微分的(壓縮的)形式存放在版本庫。

CVS用戶需要使用-kb選項來標記二進制文件,防止資料的混淆(因為關鍵字解釋和行結束轉換),他們有時候會忘記這樣做。

Subversion使用更加異想天開的方法—第一,如果你不明確的告訴它(詳情見「關鍵字替換」一節「行結束字元序列」一節)這樣做,它不會做任何關鍵字或行結束轉換的操作,預設情況下Subversion會把所有的資料看作字節串,所有的儲存在版本庫的文件都處於未轉換的狀態。

第二,Subversion維護了一個內部的概念來區別一個文件是「文字」還是「二進制」文件,但這個概念在工作副本非常重要,在svn update,Subversion會對本地修改的文字文件執行上下文的合併,但是對二進制文件不會。

為了檢測一個上下文的合併是可能的,Subversion檢測svn:mime-type屬性,如果沒有svn:mime-type屬性,或者這個屬性是文字的(例如text/*),Subversion會假定它是文字的,否則Subversion認為它是二進制文件。Subversion也會在svn importsvn add命令時通過運行一個二進制檢測算法來幫助用戶。這些命令會做出很好的猜測,然後(如果可能)設定新增文件的svn:mime-type屬性。(如果Subversion猜測錯誤,用戶可以刪除或手工編輯這個屬性。)