잠시 동안 GitHub에있는 프로젝트가 있지만 이전에 svn에서 마이그레이션되었습니다. 그것이 처음 마이그레이션되었을 때 SVN 히스토리는 Git으로 옮겨지지 않았습니다. 프로젝트를 설정 한 후 SVN 기록을 Git으로 복사/가져 오기/복제/이동할 수있는 방법이 있습니까?SVN에서 기존 Git 프로젝트로 내역 가져 오기
답변
git-svn
은 이 아니며 리포지토리의 1 회성 변환에 적합한 도구입니다. Git을 기존 SVN 서버의 프론트 엔드로 사용하려는 경우 훌륭한 도구이지만 일회성 변환의 경우 이 아닌은 git-svn
을 사용해야하지만 svn2git
은이 사용 사례에 훨씬 적합합니다.
svn2git
이라는 pleny 도구가 있는데, 아마도 가장 좋은 도구는 https://github.com/svn-all-fast-export/svn2git의 KDE입니다. 그 svn2git
도구를 사용하는 것이 좋습니다. 내가 사용할 수있는 최선의 방법이며, 규칙 파일을 통해 할 수있는 일에 매우 유연합니다.
svneverever
에서 http://blog.hartwork.org/?p=763까지의 기록은 Git으로 마이그레이션 할 때 SVN 저장소의 기록을 조사하는 훌륭한 도구입니다.
, 기존의 repo에 원격으로 새로 생성 된 환매 특약을 추가하고 커밋을 가져옵니다. 그런 다음 git replace
을 사용하여 새 기록의 첫 번째 커밋을 이전 기록의 마지막 커밋으로 바꿉니다. 이것을 영구 보존하려면 git filter-branch
을 사용하여 대체 영구 보존 할 수 있습니다.
게시 된 기록을 다시 쓰고 이전 기록을 기반으로 한 지사를 가지고있는 사람은 git rebase
설명서에 설명 된 것처럼 기록 변경 사항을 복구해야한다는 점에 유의하십시오. 이 작업을 원하지 않는다면 새로 마이그레이션 된 저장소를 Git 저장소로 끌어 와서 SVN 기록에서 새 분기를 만들면됩니다.그런 다음 기술적으로는 괜찮은 여러 개의 루트 커밋과 독립적 인 이력을 가지지 만 파일의 기록은 여전히 삭제됩니다.
가능하지만 이미 저장소를 복제 한 모든 사용자에게 영향을 미칩니다. 그만한 가치가 있는지 먼저 결정해야합니다. 그렇지 않은 경우
, 그냥 역사가 검색되면
이 더 가고 싶은 경우, 추가 ... 자식 - svn을 다른 자식 저장소에서 소스 코드의 역사 거기에 그것을 유지와 복제 이 저장소는 실제 저장소에있는 원격 저장소로 가져와 가져올 수 있습니다.
git fetch --all
일단 완료되면 분리 된 기록이 있어야합니다.
그런 다음 'git replace'를 사용하여 방금 가져온 지점의 마지막 저장소로 새 저장소의 첫 번째 커밋을 바꿉니다.
https://git-scm.com/docs/git-replace
그리고 마지막으로, 확실히 역사를 다시 쓰는 것, '자식 필터 지점'을 사용합니다.
당신이 좋아하는 뭔가 새로운 역사를 밀어해야합니다 : 복제 또는 모든 역사를 가져 오기해야합니다
git push origin --all
그리고 다른 모든 개발자 ... 그리고 ;-)
조언 해 주셔서 감사합니다. 현재에는 repo의 복제본이 몇 개 밖에 없으므로 제어가 가능합니다. 비슷한 것을 할 계획입니다. 내 생각은 svn을 자식으로 변환 한 다음이 repo를 기존 repo의 한 지점으로 병합 한 다음 기존 repo의 마스터를 리베이스하는 것입니다. 그게 효과가 있다고 생각하니? – mattsun
정신적으로 2 가지 해결책은 동일합니다. (병합으로 말하면 '설명'과 같이 '가져 오는 것'이라고 말하지 않는 것이 좋습니다. 그렇지 않으면 당신은 곧장 지옥으로 갈 것입니다. :()하지만 내 것이 더 쉽습니다. ... – Philippe
- 1. SVN에서 이클립스로 안드로이드 프로젝트로 파일 가져 오기
- 2. 기존 프로젝트로 zxing 가져 오기
- 3. 기존 레일 어플리케이션을 RubyMine 프로젝트로 가져 오기
- 4. 가져 오기 내역
- 5. Android Studio : 프로젝트를 기존 프로젝트로 가져 오기
- 6. 기존 클래스 다이어그램을 모델링 프로젝트로 가져 오기
- 7. 기존 프로젝트로 프레임 워크 가져 오기
- 8. SVN에서 Git으로 계속 가져 오기
- 9. SVN에서 이미지 가져 오기
- 10. 기존 Git 저장소를 IntelliJ IDEA로 가져 오기
- 11. svn에서 가져 오기. 원격 자식에 게 커밋
- 12. Git-Tfs : 기존 Git 저장소로 TFS 변경 집합을 가져 오기
- 13. Play Framework 모듈을 기존 IntelliJ 프로젝트로 가져 오기
- 14. Yiic 생성 컨트롤러를 기존 NetBeans 프로젝트로 가져 오기
- 15. 기존 프로젝트를 maven 다중 모듈 상위 프로젝트로 가져 오기
- 16. android.net MailTo 클래스를 기존 (Mule) 자바 프로젝트로 가져 오기
- 17. 프로젝트로 가져 오기 이클립스 소스 폴더
- 18. Android 프로젝트로 Cordova 가져 오기
- 19. 프로젝트로 appcompat-v7 가져 오기
- 20. OpenGL 프로젝트로 모델 가져 오기
- 21. MakeFile을 MingW 프로젝트로 가져 오기
- 22. Lua를 Cocos2d 프로젝트로 가져 오기
- 23. 엑셀에서 MS 프로젝트로 가져 오기
- 24. 기존 Intellij IDEA 프로젝트를 SVN에서 Git SVN으로 전환하는 방법 SVN
- 25. Android Studio 프로젝트를 Xamarin 프로젝트로 가져 오기
- 26. Intellij에서 안드로이드 프로젝트로 tess-two 가져 오기
- 27. CLI 프로젝트로 네이티브 C++ 클래스 가져 오기
- 28. 자동 업데이트 svn에서 git
- 29. Git 내역 그래프와 SVN 내역 그래프
- 30. Git 저장소 사용 내역
Subversion 기록을 기반으로 새 복제본을 만든 다음 이러한 변경 사항을 기존 Git 저장소에 병합 할 수 있습니다. Subversion 히스토리를 기존 Git 히스토리의 기반으로 소개 할 수는 없지만 이제는 병합 할 병력으로 사용할 수 있습니다. – poke
@poke 왜 그는 할 수 없습니까? 물론 그는 그렇습니다. 물론 그는 게시 된 기록을이 코드로 다시 작성하고 repo를 사용하는 모든 사람은 항상 변경된 게시 된 기록을 사용하여 모든 지회를 수동으로 리베이스하여 복구해야합니다. – Vampire
@Vampire 그는 역사를 다시 쓰지 않고는 안된다. 프로젝트가 잠시 동안 활성화 되었다면, 역사를 그대로 유지하는 것이 좋습니다. – poke