2011-05-18 76 views
0

大多數(如果不是全部)現有遷移工具認爲遷移歷史是線性的。因此,當您創建新的遷移時,您會獲得版本42或其他任何內容,然後每個人在收到更改後都可以更新到此版本。用於DVCS的SQL遷移工具

問題是,如果您使用DVCS,兩個人可能同時擁有版本42。這意味着解決衝突將變得非常不平凡而令人痛苦。 :)

所以我的問題是 - 我應該推出自己的系統還是野外有什麼?最好簡單,對* nix友好。我打算主要使用mysql和postgresql。

+0

從我所看到的,DVCSs使用散列作爲版本號,因此這些在樹中不太可能相同。 – Oded 2011-05-18 19:49:57

+0

DVCS - 是的,但這與遷移沒有任何共同之處。 – 2011-05-18 21:00:13

+0

最後我寫了自己的實用程序 - http://github.com/piranha/nomad – 2011-11-25 13:26:06

回答

0

在Rails中,處理的方式是將日期附加到文件的開頭,格式爲YYYYMMDDHHMMSS_migration_descriptor.rb

然後通過跟蹤版本號跟蹤哪些遷移已應用於表中。這允許您在具有比最近更改「更低」的版本號的表上運行遷移,從而大大簡化了DVCS問題。

你可能沒有使用Rails,但我認爲他們解決這個問題的方式非常好。你可以閱讀更多關於Rails遷移on the API docson the Rails guides

+0

讓我們想象一下情況:我在5月15日創建了遷移,並在5月17日創建了我的同事。他的改變比以前簡單得多,所以做得比我早。他的改變已經應用到live db,現在我的改變被接受了。該怎麼辦? – 2011-05-18 21:01:45

+0

我已經說過了。 :-)。遷移工具將跟蹤已應用遷移的表格。在這種情況下,假設您的更改是「20110515143654_add_column_foo.rb」,他的更改是「20110517102341_add_product_table.rb」。該工具查看文件名的日期部分,在表中查找它,發現20110517102341(他的更改)已被應用,但20110515143654(您的更改)尚未應用,因此它適用於20110515143654。至於是否可以「合併」影響相同部分表格的遷移,我記不起我的頭頂,但我認爲它不會。 – bhamby 2011-05-19 14:03:26

+0

啊,所以最終它會存儲應用的所有遷移,而不是數字。好的,這就是我需要的,就在Rails之外...... :) – 2011-05-21 12:48:04