2010-12-18 47 views
4

聲明:我見過Detach (move) subdirectory into separate Git repository但它並沒有完全回答這個問題。使用git filter-branch拆分回購:如何從重命名/移動的文件恢復歷史記錄?

我遷移從SVN項目與git。當它住在svn中時,一些文件被移動和/或重命名。

混帳遷移後,一些提交的只與git log --follow

那麼明顯:

git的結構如下:

MyMainRepo/ 
.git/ 
XYZ/ 
ABC/myFile.txt 

git log ABC/myFile.txt顯示: - commit1 - commit2

git log --follow ABC/myFile.txt顯示: - commit1 - commit2 - commit3(農行目錄不存在吧) ...

現在,分裂混帳回購協議時,有明顯的ABC混帳回購協議: git log --follow ABC/myFile.txt現在失去了舊的歷史我只是有:

  • commit1
  • commit2

我想什麼:

  • 從MyMainRepo分裂ABC,
  • 不失歷史

歡迎任何幫助:)

回答

0

,而不是一個子目錄過濾器,也許是一個指數濾波器類似於你的食譜日誌評估將是你需要關注歷史上重新命名的內容。我有working example of an index filter heredocumentation for how to use it here

+0

似乎現在位於https://github.com/githubtraining/git-workshop/tree/master/examples/filter-branch – 2012-09-07 05:48:36

+0

現在可能它已經轉移到https://github.com/github/ teach.github.com/tree/gh-pages/examples/filter-branch,但實際上並不清楚,因爲原始答案沒有提供有關他們的示例用法完成的詳細信息。 – pnkfelix 2013-01-13 02:25:46

1

我只是碰到了同樣的問題來了,無法得到移動的文件夾的完整歷史,即使指數過濾器。

我的解決方法是做到這一點已經在一個點被移動它被移動之前的文件夾(ABC)的一個獨立的子目錄出口,然後嫁接這個倉庫的歷史在新的一個。

假設ABC曾經被稱爲MNO。我克隆了MyMainRepo,當MNO仍然存在時(重新命名爲ABC之前)重置爲版本。我用subdir做了一個filter-branch來獲取一個名爲「MNO」的倉庫。

裏面ABC,我做了git fetch ../MNO

然後我輸入內容移入ABC時的提交(這將是第一次提交回購ABC中的內容),將MNO回購的最後一次提交加入.git/grafts

現在我可以在裏面ABC文件做git的日誌,看看歷史跟蹤一路走過它是如何在MNO。下一步是做另一個過濾器分支,使其成爲永久移植物等。我做的是,這裏展示了嫁接(儘管其內容是有點不同)截屏:

http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html

注意,這必須在每個移動文件夾的基礎上完成,這是一個很大的工作,並且最終你會爲每個案例進行合併提交。但git日誌工作。

我在寫這篇文章的時候有點匆忙,但是如果有人有興趣嘗試這種方法,請告訴我,我會盡量清除它,並展示一些更具體的例子。

相關問題