当初选择BitBucket的原因是,BitBucket免费支持私有库。而且BitBucket同时支持Git和Mercurial。
当初选择Mercurial的原因是,Mercurial看起来好像比Git要简单些。
但是,今年的8月BitBucket宣布明年不再支持Mercurial了。 好吧,那只能想办法把Mercurial的仓库转换为Git的了。 本来想着BitBucket会提供把Mercurial库转换为Git库的功能,但是并没有(又或许是我没有找到),所以只能另想办法了。
[注] 刚发现,在BitBucket上新建仓库时,可以导入Mercurial库,所以……
幸好有好心人提供了工具,叫hg-fast-export。 看起来还算简单,下面实际操作一下。
sudo apt install git mercurial
pip2 install mercurial -i https://mirrors.aliyun.com/pypi/simple/
z@wn:~$ mkdir ~/hg-src
z@wn:~$ cd ~/hg-src
z@wn:~/hg-src$ hg clone https://username@bitbucket.org/project1/170101
http authorization required for https://bitbucket.org/project1/170101
realm: Bitbucket.org HTTP
user: username
password:
destination directory: 170101
requesting all changes
adding changesets
adding manifests
adding file changes
added 23 changesets with 357 changes to 140 files
new changesets 124c:826b (21 drafts)
updating to branch default
140 files updated, 0 files merged, 0 files removed, 0 files unresolved
z@wn:~/hg-src$
z@wn:~$ mkdir ~/git-src/
z@wn:~$ cd ~/git-src
z@wn:~/git-src$ git clone https://github.com/frej/fast-export.git
Cloning into 'fast-export'...
remote: Enumerating objects: 31, done.
remote: Counting objects: 100% (31/31), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 1473 (delta 14), reused 26 (delta 9), pack-reused 1442
Receiving objects: 100% (1473/1473), 405.65 KiB | 71.00 KiB/s, done.
Resolving deltas: 100% (866/866), done.
z@wn:~/git-src$
在BitBucket上新建一个空的Git的仓库,取名170101-git
在本地建立一个空的Git仓库,图方便,也取名170101-git
z@wn:~/git-src$ git init 170101-git
Initialized empty Git repository in /home/z/git-src/170101-git/.git/
z@wn:~/git-src$ cd 170101-git/
z@wn:~/git-src/170101-git$ ~/git-src/fast-export/hg-fast-export.sh -r ~/hg-src/170101
master: Exporting full revision 1/23 with 1/0/0 added/changed/removed files
master: Exporting simple delta revision 2/23 with 1/0/0 added/changed/removed files
master: Exporting simple delta revision 3/23 with 121/1/0 added/changed/removed files
master: Exporting simple delta revision 4/23 with 3/12/0 added/changed/removed files
master: Exporting simple delta revision 5/23 with 0/9/0 added/changed/removed files
master: Exporting simple delta revision 6/23 with 0/6/0 added/changed/removed files
master: Exporting simple delta revision 7/23 with 0/4/0 added/changed/removed files
master: Exporting simple delta revision 8/23 with 0/13/0 added/changed/removed files
master: Exporting simple delta revision 9/23 with 0/9/0 added/changed/removed files
master: Exporting simple delta revision 10/23 with 0/5/0 added/changed/removed files
master: Exporting simple delta revision 11/23 with 0/23/0 added/changed/removed files
master: Exporting simple delta revision 12/23 with 0/6/0 added/changed/removed files
master: Exporting simple delta revision 13/23 with 0/13/0 added/changed/removed files
master: Exporting simple delta revision 14/23 with 0/12/0 added/changed/removed files
master: Exporting simple delta revision 15/23 with 0/7/0 added/changed/removed files
master: Exporting simple delta revision 16/23 with 3/19/0 added/changed/removed files
master: Exporting simple delta revision 17/23 with 11/9/0 added/changed/removed files
master: Exporting simple delta revision 18/23 with 0/23/0 added/changed/removed files
master: Exporting simple delta revision 19/23 with 0/7/0 added/changed/removed files
master: Exporting simple delta revision 20/23 with 0/12/0 added/changed/removed files
master: Exporting simple delta revision 21/23 with 0/8/0 added/changed/removed files
master: Exporting simple delta revision 22/23 with 0/18/0 added/changed/removed files
master: Exporting simple delta revision 23/23 with 0/1/0 added/changed/removed files
Issued 23 commands
/usr/lib/git-core/git-fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects: 5000
Total objects: 514 ( 16 duplicates )
blobs : 341 ( 16 duplicates 224 deltas of 339 attempts)
trees : 150 ( 0 duplicates 121 deltas of 138 attempts)
commits: 23 ( 0 duplicates 0 deltas of 0 attempts)
tags : 0 ( 0 duplicates 0 deltas of 0 attempts)
Total branches: 1 ( 1 loads )
marks: 1024 ( 23 unique )
atoms: 149
Memory total: 2344 KiB
pools: 2110 KiB
objects: 234 KiB
---------------------------------------------------------------------
pack_report: getpagesize() = 4096
pack_report: core.packedGitWindowSize = 1073741824
pack_report: core.packedGitLimit = 35184372088832
pack_report: pack_used_ctr = 2
pack_report: pack_mmap_calls = 1
pack_report: pack_open_windows = 1 / 1
pack_report: pack_mapped = 2083265 / 2083265
---------------------------------------------------------------------
z@wn:~/git-src/170101-git$
git checkout HEAD
z@wn:~/git-src/170101-git$ git remote add origin https://username@bitbucket.org/project1/170101-git.git
z@wn:~/git-src/170101-git$ git push -u origin master
Password for 'https://username@bitbucket.org':
Enumerating objects: 514, done.
Counting objects: 100% (514/514), done.
Delta compression using up to 4 threads
Compressing objects: 100% (168/168), done.
Writing objects: 100% (514/514), 1.99 MiB | 236.00 KiB/s, done.
Total 514 (delta 345), reused 514 (delta 345)
remote: Resolving deltas: 100% (345/345), done.
To https://bitbucket.org/project1/170101-git.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
z@wn:~/git-src/170101-git$
其实本人对Git和Mercurial都一知半解,如果有所错漏,尽请谅解。
可以看出,这个方法也可以将BitBucket上的Mercurial仓库迁移到github上。
http://ju.outofmemory.cn/entry/218323
http://hivelogic.com/articles/converting-from-mercurial-to-git/
http://www.voidcn.com/article/p-gpehircu-bsh.html
https://www.yiibai.com/git/git_push.html