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