18.4.3 开发者user1完成功能开发

    开发者user1开始在user1/getopt分支中工作,重构hello-world中的命令行参数解析的代码。重构时采用getopt_long函数。

    您可以试着更改,不过在hello-world中已经保存了一份改好的代码,可以直接检出。

    (1)确保是在user1的工作区中。


    $cd/path/to/user1/workspace/hello-world/

    (2)执行下面的命令,用里程碑jx/v2.0标记的内容(已实现用getopt进行命令行解析的功能)替换暂存区和工作区。

    下面的git checkout命令的最后是一个点“.”,因此检出只更改了暂存区和工作区,而没有修改头指针。


    $cd/path/to/user1/workspace/hello-world/ $git checkout jx/v2.0—.

    (3)查看状态,会看到分支仍保持为user1/getopt,但文件src/main.c被修改了。


    $git status #On branch user1/getopt #Changes to be committed: #(use "git reset HEAD<file>…" to unstage) # #modified:src/main.c #

    (4)比较暂存区和HEAD的文件差异,可以看到为实现用getopt进行命令行解析功能而对代码的改动。


    $git diff—cached diff—git a/src/main.c b/src/main.c index 6ee936f..fa5244a 100644 —-a/src/main.c +++b/src/main.c @@-1,4+1,6@@ #include<stdio.h> +#include<getopt.h> + #include "version.h" int usage(int code) @@-19,15+21,44@@int usage(int code) int main(int argc,char**argv) { -if(argc==1){ +int c; +char*uname=NULL; + +while(1){ +int option_index=0; +static struct option long_options[]={ +{"help",0,0,'h'}, +{0,0,0,0} +};

    (5)开发者user1提交代码,完成开发任务。


    $git commit-m "Refactor:use getopt_long for arguments parsing." [user1/getopt 0881ca3]Refactor:use getopt_long for arguments parsing. 1 files changed,36 insertions(+),5 deletions(-)

    (6)提交完成之后,可以看到这时user1/getopt分支和master分支的指向不同了。


    $git rev-parse user1/getopt master 0881ca3f62ddadcddec08bd9f2f529a44d17cfbf ebcf6d6b06545331df156687ca2940800a3c599d

    (7)编译运行hello-world。

    注意输出中的版本号显示。


    $cd src $make clean rm-f hello main.o version.h $make version.h.in=>version.h cc-c-o main.o main.c cc-o hello main.o $./hello Hello world. (version:v1.0-1-g0881ca3)