With decision to move away from Git, next big step was to transfer existing repositories. While there is a semi-reasonable Git support on Windows, any major dealing with Git is made much easier if you have Linux laying around. In my case decision was to deal with CentOS.
First step was to install all stuff we’ll need – Git, Mercurial and git-remote-hg script:
yum -y install git yum -y install mercurial yum -y install wget mkdir ~/bin wget https://raw.github.com/felipec/git-remote-hg/master/git-remote-hg -O ~/bin/git-remote-hg chmod +x ~/bin/git-remote-hg
With that it was time to clone the first repository:
git clone hg::https://bitbucket.org/jmedved/vhdattach
In ideal world this would be all and we are close. If omitted, this step would skip reproducing branching structure on Git. But, while we are at it, I wanted to recreate branching structure I’m used to. Since conversion process leaves all branches inside
remotes/origin/branches path, I wanted to move things around a bit:
cd vhdattach git branch -a | grep 'remotes/origin/branches' | grep -v default | xargs -n 1 -I _ echo _ | cut -d/ -f 4 | xargs -n 1 -I _ git branch _ remotes/origin/branches/_ git branch
Next (optional) step was to fix my old commits:
git filter-branch --env-filter ' OLD_EMAIL="unknown" CORRECT_NAME="Josip Medved" CORRECT_EMAIL="email@example.com" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags
Since my move to Git was intended to be final I also wanted to change origin. My new home was to be GitHub:
git remote rm origin git remote add origin firstname.lastname@example.org:medo64/vhdattach.git git push --all
With that my move was complete.