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