2011-03-17 58 views
2

哪些成熟的版本控制系統允許覆蓋查找和應用delta的算法?無論是通過插件還是通過外部工具,無所謂。使用自定義delta算法擴展版本控制系統

必須能夠覆蓋特定文件類型的VCS的內部差異算法。自定義增量必須存儲在存儲庫中以供增量應用算法使用。

在我的情況下,內部二進制差異是不可接受的。

我的意思是完全覆蓋算法,不使用自定義差異程序顯示差異。

+0

我有一種感覺,你的要求過於具體。像這樣表述**「自定義增量必須存儲在存儲庫中」**立即排除不存儲增量的VCS-es。 - IOW: 如何確定您將使用哪種VCS,但是還知道需要重寫該算法?是否有理由認爲某個VCS會對您的特定文件類型造成不良影響? 如果你需要訪問特定的deltas,你可以從你的樹中生成它們(在git中有一個預先提交的鉤子或者每次使用的文件屬性) – sehe 2011-03-17 13:55:45

+1

「自定義增量必須存儲在倉庫中...」 - Git不會在存儲庫中存儲增量,但會存儲完整的文件。它只使用deltas來進行網絡通信和補丁(顯然,爲了兼容性原因,這些補丁格式是常見的補丁格式)。因此,無需在Git中更改內部增量算法。你*可以*以這種方式改變difftool,這樣'git diff'爲特定文件類型調用一個自定義difftool。 – poke 2011-03-17 14:01:51

+0

戳,好吧,那麼我們需要在客戶端和服務器端重寫比較算法。我認爲difftool僅用作向用戶表示增量的手段,並不用於生成補丁。 – utapyngo 2011-03-18 05:56:12

回答

0

對於服務器端: 據我所知(我不是這方面的專家!)這是不容易做到的。所以你最好的辦法似乎是從Apache Subversion獲得源代碼,並根據你的需要修改/擴展它。看一下「Pre-Commit Hooks」也是一個想法。

對於客戶端: ClearCase有一些很好的額外的合併工具,例如,辦公文件。 也可以在Tortoise SVN Client中更改差異/合併工具。

+0

文件比較在客戶端完成,只有增量發送到服務器。所以它必須在客戶端完成。 – utapyngo 2011-03-17 11:31:34

+0

當您在svn客戶端中定義自定義差異/合併工具時,svn會在提交和更新時使用它來查找差異嗎?或者僅僅向用戶顯示差異? 'svn commit'命令似乎沒有--diff-cmd參數。 – utapyngo 2011-03-17 11:37:50

0

git的情況下,我不知道任何簡單的方法來重寫用於計算包裝文件中有效存儲的二進制增量的方法。 (使用大多數傳輸來生成包文件,以便高效地將數據傳輸到服務器以及從服務器傳輸數據。)

但是,您可能需要查看git的bup項目。這需要使用git來備份大量數據的情況下直接生成git pack文件的方法。這聽起來與你想要做的大致相似。

[我明白,你明確你的問題排除這一點,但在另一種情況下,讀者發現這個問題是誰感興趣的二進制文件不錯的用戶可見的diff,我將指出this useful example from Pro Git]

0

你絕對可以寫巴扎插件,提供自定義的合併算法: http://doc.bazaar.canonical.com/development/en/user-guide/hooks.html#example-a-merge-plugin http://doc.bazaar.canonical.com/development/en/user-reference/hooks-help.html#merge-file-content

快看,我沒有看到類似的東西做的diff之後,但我敢肯定它不會是很難添加的東西像那樣。我知道有像bzr工具這樣的插件可以提供可選的差異輸出(用不同顏色打印diff的cdiff)。