18.6 分支变基
18.6.1 完成user2/i18n特性分支的开发
开发者user2针对多语种开发的工作任务还没有介绍呢,在最后就借着“实现”这个稍微复杂的功能来学习一下Git分支的变基操作,具体操作过程如下。
(1)进入user2的工作区,并切换到user2/i18n分支。
$cd/path/to/user2/workspace/hello-world/
$git checkout user2/i18n
Switched to branch 'user2/i18n'
(2)使用gettext为软件添加多语言支持。您可以尝试实现该功能。不过在hello-world中已经保存了一份实现该功能的代码(见里程碑jx/v1.0-i18n),可以直接拿过来用。
(3)里程碑jx/v1.0-i18n最后的两个提交实现了多语言支持功能。
$git log—oneline-2—stat jx/v1.0-i18n
ade873c Translate for Chinese.
src/locale/zh_CN/LC_MESSAGES/helloworld.po|30+++++++++++++++++++++———
1 files changed,23 insertions(+),7 deletions(-)
0831248 Add I18N support.
src/Makefile|21+++++++++++-
src/locale/helloworld.pot|46++++++++++++++++++++++++++++
src/locale/zh_CN/LC_MESSAGES/helloworld.po|46++++++++++++++++++++++++++++
src/main.c|18++++++++—
4 files changed,125 insertions(+),6 deletions(-)
(4)可以通过拣选命令将这两个提交拣选到user2/i18n分支中,相当于在分支user2/i18n中实现了多语言支持的开发。
$git cherry-pick jx/v1.0-i18n~1
…
$git cherry-pick jx/v1.0-i18n
…
(5)看看当前分支拣选后的日志。
$git log—oneline-2
7acb3e8 Translate for Chinese.90d873b Add I18N support.
(6)为了测试刚刚“开发”完成的多语言支持功能,先对源码执行编译。
$cd src
$make
version.h.in=>version.h
cc-c-o main.o main.c
msgfmt-o locale/zh_CN/LC_MESSAGES/helloworld.mo
locale/zh_CN/LC_MESSAGES/helloworld.po
cc-o hello main.o
(7)查看帮助信息,会发现帮助信息已经本地化。
注意:帮助信息中仍然有文字错误,—help误写为-help。
$./hello—help
Hello world示例v1.0-2-g7acb3e8
版权所有蒋鑫<jiangxin AT ossxp DOT com>,2009
用法:
hello
世界你好。
hello<username>
向用户问您好。
hello-h,-help
显示本帮助页。
(8)不带用户名运行hello,也会输出中文。
$./hello
世界你好。
(version:v1.0-2-g7acb3e8)
(9)带用户名运行hello,会向用户问候。
注意:程序仍然存在只显示部分用户名的问题。
$./hello Jiang Xin
您好,Jiang.
(version:v1.0-2-g7acb3e8)
(10)推送分支user2/i18n到远程共享服务器。
推送该特性分支的目的并非是与他人在此分支上协同工作,主要是为了进行数据备份。
$git push origin user2/i18n
Counting objects:21,done.
Delta compression using up to 2 threads.
Compressing objects:100%(13/13),done.
Writing objects:100%(17/17),2.91 KiB,done.
Total 17(delta 6),reused 1(delta 0)
Unpacking objects:100%(17/17),done.
To file:///path/to/repos/hello-world.git
*[new branch]user2/i18n->user2/i18n