본문 바로가기

IT/Programming

히스토리를 유지하며 Git 저장소를 Subversion 저장소로 이전하기



회사에서 현재 개발중인 프로젝트의 소스를 전사 소스 서버 대신 별도의 git 서버로 관리하고 있었는데,

이번에 전사 서버로 이전을 하게 되었네요.


전사 서버는 Subversion으로 운영중인지라... 어떻게 하면 히스토리의 유실없이 옮길 수 있는지 방법을 찾고 있었는데, 입맛에 딱 맞는 방법이 써 있는 블로그가 있네요. :-)


출처는 이곳입니다.


Migrate a Git repo to a SVN one

We often see the opposite, convert a SVN repository into a Git one and try the breeze of a DVCS, but what if you want to convert a Git repo into a SVN one?

The process is not easy (and you need a "straight" Git repo: no merge, too complex branches and so), and the result is quite raw, but you're still able to convert the main part into SVN. Here are the steps:
  1. create an empty SVN repository: svn mkdir svn://path/to/repo/project/{trunk,branches,tags}
  2. clone it in a Git repo: git svn clone svn://path/to/repo/project --stdlayout . This will create a project directory, empty except for the .git information directory; master is the default Git branch created by git-svn that maps SVN trunk.
  3. cd project
  4. add the original Git repo as a remote: git remote add origin git://uri/to/git/repo/project.git
  5. fetch from it: git fetch origin
  6. create a local branch for the remote master: git checkout -b old_master origin/master . Note that master branch is already present, so we define another one.
  7. being on old_master we rebase this branch onto master: git rebase --onto master --root . Doing this, we have "moved" all our commits from old_master to master
  8. and push all the commits into the SVN repo: git svn dcommit
It's not that elegant, but it gets it done. I'd like to know if someone is aware of a better method, also to import tags and branches, that this process doesn't do.


'IT > Programming' 카테고리의 다른 글

configure시 PKG_CHECK_MODULES에서 에러가 나는 경우  (0) 2015.07.15