2011-01-26 82 views
2

我正在爲Plastic SCM/Git編寫一個快速導出/快速導入套件,我發現了一些問題。git快速導入提交訂單

正如我從documentation讀:

這種設計允許一個前端程序 處理的同時 分支數量不受限制,在順序生成 提交他們是 可以從源數據

但是,實現「導出器」,我發現你不能引用尚未創建的提交。例如,假設你首先引入合併的提交目標,而不是源代碼,那麼你只需在那裏引用源代碼,但它不起作用。

所以,據我所知,「從源頭獲取順序生成提交」這句話根本就是錯誤的,git fast-import確實需要按順序提供提交,並且引用只能存在於對象中介紹之前。

它是正確的嗎?

謝謝。

+0

後來我發現1.7版本之前出現了一個令cset數字溢出的bug。這意味着如果您的cset編號太大,它會在「標記輸出」上溢出。在Git 1.7後修復。 – pablo 2011-05-26 10:49:01

回答

1

是的,git-fast-import需要按照從最舊到最新的順序查看每個分支的提交。您從文檔中引用的陳述有些模棱兩可,因爲「它們可從源數據獲得的順序」實際上必須增加每個分支的時間順序。

我認爲該聲明意味着您不必按照嚴格的時間順序在所有分支中提交所有提交。相反,就像通常使用Git一樣,每個提交必須在創建所有祖先之後創建。

這種方法在如何導入提交方面仍然存在一些靈活性。我寫了一個導入程序(對於一箇舊的專有源代碼控制系統),它分別處理每個分支的整體(當然是從最舊到最新)。 Git將不同分支之間的共同祖先進行匹配,並且製作了一個非常合理的層次結構樹,因爲每個分支中共同祖先的SHA1哈希值是相同的。