2011-02-11 68 views
2

我在正在開發的遊戲中錯誤地組織代碼,並打算將狀態更新代碼從GameView類移動到Level類。我想以某種方式記錄這個剪切和粘貼。我使用Mercurial進行版本控制。 Mercurial有可能嗎?其他VCS是否提供此功能?使用Mercurial記錄兩個文件之間的代碼轉換


讀多一點,看Linus的談論在谷歌的Git,以及檢討答案和意見,我明白,這是Git的blame命令的功能,並通過做工作的啓發。

我可以通過使用hg-git獲得此功能,導出Mercurial變更集,然後使用git blame -M -C命令。有沒有更簡單的方法,不涉及混帳?

如果不是,我會接受一個現有的答案,提到git並描述其最佳功能。

回答

2

git自動執行此操作。請參閱How does Git track history during a refactoring?

+1

這是關於重命名,而不是在文件之間移動功能更困難的情況。 – 2011-02-11 17:34:38

+1

「第二個說明,跟蹤重命名實際上只是一個跟蹤內容在樹中移動方式的特殊情況。在某些情況下,您可能有興趣查詢何時添加或移動到不同文件的功能。「 – clee 2011-02-11 17:45:07

1

如果液位類不存在,你可以做到這一點:

汞柱複製GameView.ext Level.ext

,然後從GameView刪除無論你移動到水平,並修改級別以反映正確的名稱並排除停留在GameView中的所有內容。

如果等級已經存在,我不認爲有,除非你願意出提取代碼到自己的類,可以開始作爲GameView的副本,包括做(通過#包括什麼好辦法,或組成,或擴展)的級別。

1

我不認爲Mercurial會明確跟蹤文件重命名/移動,至少它不是修改集的一部分(儘管它可以根據它的內容猜測某個特定文件的來源)。這就是說,我擔心我不知道任何跟蹤文件之間代碼移動的VCS,只需添加到目標文件和從源文件中減去即可。

0

我爲這種情況做的是從我的其他發展隔離的變化,然後提交在一個單一的運動有一張紙條承諾,「移動文件之間的功能Munge時間()。

據我所知,沒有VCS跟蹤數據的運動是,重命名與可跟蹤和gitClearcase

1

水銀支持文件重命名檢測如下:。

hg addremove -s 100

-s表示「相似性」,100表示​​100%。它將查找名稱已更改但文件內容保持不變的文件。

我經常用85或90%的相似度數字來使用這個命令。並結合-n開關,它允許幹運行(即不做報告),它可以非常強大。

實際移動代碼的檢測不是真的可能我不這麼認爲。

相關問題