2013-05-10 57 views
1

我有一個存儲庫,它是通過複製SVN存儲庫中的文件(而不是歷史記錄)創建的,自上次添加了許多更改。告訴git-blame使用導入的歷史記錄

我已經將SVN中的歷史轉換爲git,並將它與git merge -s ours合併。

問題是,當我在文件上做一個git blame時,它仍然顯示每一行都是由git倉庫中的初始提交(它複製了SVN中的所有文件)創建的,而不是SVN提交,負責。

有沒有一種方法可以解決這個問題,而無需重寫所有的git歷史?

+0

「git-only」歷史中有多少次提交?你爲什麼不想重寫?重寫可能是最乾淨的解決方案。 – Chronial 2013-05-10 00:59:55

回答

1

您可以創建初始的一replacement ref從git的承諾,使其 似乎最git的命令,它起源於Git的歷史是建立在從SVN進口的歷史 。

您可以用下面的命令做到這一點:

git checkout -b temporary <FIRST_GIT_COMMIT> 
# Set parent of next commit to last one from svn, 
# but don't change the working tree or contents of next commit 
git reset --soft <LATEST_SVN_COMMIT> 
# Create a new commit using contents and message of the first git commit 
git commit -C <FIRST_GIT_COMMIT> 
# Tell git to use the newly created commit in place of the original git 
# commit in most cases. 
git replace <FIRST_GIT_COMMIT> HEAD 

但是,更換引用沒有得到自動使用遙控器或者推或拉時 標準refspecs轉移。相比,可以 手工完成使用:

git push origin 'refs/replace/*:refs/replace/*' 
git pull origin 'refs/replace/*:refs/replace/*' 

它是不可能有改變的歷史會自動轉移到其他 庫不改變的每一個提交ID提交其 最初使用Git創建的。