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)