2017-07-29 52 views
0

我正在使用cvs2git(cvs2svn的一部分)將CVS存儲庫遷移到Git中。當我運行這個工具時,它看起來很完美,我最終得到了一個可用的git倉庫。但是,我需要驗證轉換成功發生的方法。如何驗證使用cvs2git的CVS到Git轉換?

至少我需要確認最新的git提交中的文件內容與最新的CVS提交文件的內容相同。我也想驗證,如果可能的話,提交作者匹配,提交的時間戳是正確的,該標籤被保留(我知道標籤/分支模型不完全匹配,但至少標籤名稱被保存爲分支名稱)以及任何其他重要的驗證數據。我有大約30個庫需要轉換,所以我希望任何有些自動化的方法。

我到目前爲止唯一想到的是做目錄的校驗和只是爲了驗證文件是相同的,但每個文件夾中都有一個.cvs目錄,所以我不認爲會工作。

回答

1

至少我需要確認最新的git提交中的文件內容與最新的CVS提交文件的內容相同。

您可以使用find列出所有的文件和排除.git.cvs。將結果傳遞給sha1sum之類的東西,以獲取所有文件的校驗和。捕獲結果。

$ find cvs_checkout -name .cvs -prune -o -type f -print0 | xargs -0 sha1sum > cvs.sum 

$ find git_checkout -name .git -prune -o -type f -print0 | xargs -0 sha1sum > git.sum 

然後比較兩個校驗和文件。應該沒有區別。

$ diff cvs.sum git.sum 

我也想,如果可以證實的是,提交的作者匹配,該提交的時間戳是正確的,即標籤被保留...

鑑於Git和CVS的模型有多麼不同,我不知道這會有多麼有用。但是如果你真的想,我想你會爲每個文件寫一些比較git log somefilecvs log somefile(這已經很長時間,因爲我已經使用CVS,我甚至不記得這是否是一個有效的命令)。 git log需要很多格式化選項,你甚至可以用CVS相同的格式將其吐出。

至於標籤,你可以檢查git tag -l對預期的標籤列表。然後,您可以依次檢查每個標籤,並將其內容與上面的find/diff命令進行比較。

祝你好運!

+0

啊,太棒了,謝謝!你已經證實了我的懷疑,無論我採用什麼方式,這將是一個乏味的過程。但是find命令爲我節省了很多時間。 –

+0

考慮到cvs2git轉換會對多個單文件cvs提交到單個git提交進行有根據的猜測,您會發現時間戳有所不同。如果你有很多標籤(也許你的持續集成系統產生了常規標籤,或者至少你有用於客戶發佈的標籤),你可以比較CVS和git之間的標籤。 – Mort