2009-08-21 108 views
10

我只需要源代碼樹及其歷史記錄。我現在不關心需求/問題。我玩了一下這個命令行來弄清楚我是否可以得到主幹和一些開發路徑的更改包列表。我認爲應該有可能爲每個更改包提取一個diff,並使用它來重放自第一次提交git以來的所有更改。事情是這樣的:是否可以將MKS Integrity存儲庫導入到git中?

  1. 獲得第一次提交,並將其添加到Git的
  2. 得到一個CP
  3. 獲得差異對CP
  4. 適用DIFF與git的工作目錄
  5. 添加和更改提交到Git的
  6. 重複使用(2),直到最後CP

你也可以repleace變化包用C heckpoint(對我來說足夠好)。

一個簡單的方法是隻檢出一個CP並添加/提交給git。但是,那麼你會忽略添加,刪除,移動和重命名操作。

有誰知道如何從「si diff」中獲得統一的差異?那已經很有幫助了。

任何想法?

EDIT2:
添加了顯示我如何實際做遷移的答案...

+3

我認爲每次有人合併更改包時,您都已經厭倦了看到/理解諸如「修訂版1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.3.1.1.1」之類的內容?祝你在MKS中幸運。 – Roboprog 2009-08-21 21:57:08

+3

不僅僅如此。如果有人認爲他們的SCM很慢,他們還沒有嘗試過MKS。我確實喜歡需求/缺陷跟蹤集成,但源代碼的性能一樣糟糕...... – EricSchaefer 2009-08-22 08:45:08

+0

剛剛完成我的答案並提出了一個建議的導入程序,以迴應您的評論。 – VonC 2009-08-22 09:48:52

回答

7

MKS Integrity的問題是他們在一切所在獨特的資源庫:

  • 要求,
  • 測試計劃,
  • 測試用例,
  • 功能,
  • 開發任務,
  • 部署要求

由於這些數據可以獨立發展的一個從另一個,在自己的步伐,引進他們都在一個Git倉庫是一個壞主意:你只能克隆全部 Git倉庫的內容(即使你可以限制該克隆的深度)。
這意味着您將獲得所有文檔,即使您只是對代碼感興趣。
MKS完整性導出意味着要定義第一個很多Git存儲庫,充當submodules


我只需要在源樹和它的歷史。

像往常一樣,我會建議,只需要導入:

  • 各大唱片公司(超過一年的任何年齡的增長,或任何時期你感覺很舒服,你將不再需要在充分的研究,因爲它是如此陳舊)
  • 最近幾年的所有標籤(主要和未成年人)。

而且我也不會導入所有在一個 Git倉庫,除非你確信你所有的源表示開發爲所有的(而不是幾個「模塊」自主研發)

一個系統

更簡單的方法是隻檢出一個CP並添加/提交給git。

這將是繼續進行的方式。

但是,那麼你會鬆散跟蹤添加,刪除,移動和重命名操作。

不!你不會! Git將infer those operations
這是作爲文件Content VCS的優勢。

+0

我只需要源代碼樹及其歷史記錄。我不關心問題/項目/工作流程的東西。也許我可以延長這個問題...... – EricSchaefer 2009-08-22 08:47:00

+1

我一直忘記git會識別重命名等等。我的心智模型仍然受到cvs,svn和mks的太多影響。謝謝,我現在就試試。大約有3年的歷史,我認爲我將獲得主幹(60或70)上的所有檢查點,並且只有最新的分支,因爲它們確實很短。也許我甚至可以用si命令行工具自動化一下。 – EricSchaefer 2009-08-22 11:41:13

+0

剛剛從mks導入62個檢查點到一個小巧快速和骯髒的程序git。提取提交時間,檢查點標籤和評論有點棘手,但它是值得的。明天我會嘗試另一個更大的分支項目。謝謝... – EricSchaefer 2009-08-22 16:42:51

9

我不能發佈我寫的實際程序,因爲我沒有在我自己的時間做。但是,我可以發佈我是如何做到的。用任何腳本語言重做它應該很容易。 我寫的工具一次只遷移一個分支。我會告訴它我想要哪個分支(例如1.21.1)和分支中的開始和結束脩訂(例如,4和78會將所有修訂從1.21.1.4開始遷移到1.21.1.78)。要在一個回購中擁有所有分支,我將提供用於導入的.git目錄。

  • 從開始修訂,修訂結束開始 循環
    • CURRENTREV = BRANCH.loopcounter
    • 創建回購目錄
    • 招git的目錄到回購目錄
    • 招的.gitignore文件進入回購目錄
    • chdir進入回購目錄
    • 創建mks沙箱裏面的回購目錄v ia「si createdandbox -P MKS_PROJECT_PATH --yes --projectRevision = CURRENTREV
    • 通過」si viewprojecthistory --rfilter = range:CURRENTREV-CURRENTREV「獲取修訂描述,捕獲輸出!
    • 提取用戶,日期,標籤,以前輸出的意見
    • 「git add」。從上面
    • 管抽取信息爲「git的承諾-qf - 」(不能做-m如果你想多條線路,如檢查點評論)通過「SI dropsandbox --yes index.pj」
    • 下降沙箱移動.git和。gitignore以保存地方(下一次迭代)
    • 刪除沙盒目錄中的所有剩餘文件
    • 移動到父目錄(..)
    • 刪除沙箱/回購DIR
  • 創建最終的git目錄
  • git的移動和的.gitignore成最終的git目錄
  • 「混帳的復位 - 硬頭」

待辦事項東北。

MKS對其字符串使用某種ASCII編碼,而git通常使用UTF-8,因此在將元數據導入到git(用戶名,註釋,標籤等)時應注意問題。

更多分支做到這一點:

  • 在git的目錄結賬分支在那裏應該開始並創建一個分支(「混帳結賬-b NEWBRANCHNAME」)
  • 現在git的移動和修改。 gitignore的保存地點和刪除整個目錄
  • 現在做同樣的事情如上

一兩件事:「SI」是MKS命令行工具。因此,您需要指定其完整路徑或將其路徑放入搜索路徑。

3

這適用於檢查站...

https://gist.github.com/2369049

不幸的是,關卡看似真正使任何意義從MKS的唯一的事情 - > GIT,作爲一個檢查點真的是最接近的「快照「GIT調用提交。我們有很多不兼容的概念(每個文件版本跟蹤,與GIT分支,檢查點等無關的分支),這些概念都可以彼此獨立演化,很難說明如何將合理的歷史記錄遷移到GIT。可能有很多方法可以做到,而且沒有一個比下一個更「正確」。

這就是說,我很樂意聽到一些好主意。 :)

我很想看到一個解決方案,以明智的方式捕獲每個文件的版本控制。在一些討論中,我們拋出了試圖通過提交時間或其他方式來排列MKS每個文件版本的想法。通過這種方式,我們可以制定通過包含多個文件更改的提交演變的「回購」概念。

6

FWIW,si diff可惜目前不支持統一差異。有要求進行更改的請求,但尚未有太多客戶要求提供該功能。

免責聲明:我爲PTC(誰收購MKS)工作。

+2

我們在哪裏要求這些功能? – RedX 2013-10-21 11:10:46

0

我使用這個工具從MKS導入變更包到Mercurial中,將它導入到git應該非常相似;或者您可以先導入到Mercurial,然後使用git工具導入Mercurial。

https://github.com/arsane/py-mks2hg.git

它會嘗試找出所有的變化包指定的項目之下,並承諾新的Mercurial庫秩序。

相關問題