2013-05-10 3 views
1

SVN 저장소에서 파일 (기록이 아님)을 복사하여 만든 저장소가 있습니다. 그 이후로 많은 변경 사항이 추가되었습니다.가져온 내역을 사용하도록 git-blame에게 알리기

SVN의 히스토리를 git로 변환 한 후 git merge -s ours으로 병합했습니다.

문제는 내가 파일에 git blame을 할 때 SVN 커밋보다 실제로는 모든 커밋을 git 저장소 (모든 파일을 SVN에서 복사 함) 책임.

모든 git 기록을 다시 작성하지 않고이를 해결할 수있는 방법이 있습니까?

+0

"git-only"기록에 얼마나 많은 커밋이 있습니까? 왜 다시 쓰고 싶지 않니? 재 작성은 아마도 가장 깨끗한 해결책 일 것입니다. – Chronial

답변

1

초기의 replacement ref를 만들 수 있습니다 대부분의 자식은 자식에 시작된 역사는 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를 변경하지 않고 자동으로 다른 저장소로 전송 변경된 역사를 가지고 할 수 없습니다.