免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 796 | 回复: 0
打印 上一主题 下一主题

《看日记学git》之六 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-11 21:35 |只看该作者 |倒序浏览

上次的内容比较少,主要是想调节一下大家的心情,总是在大量的文字之间徘徊,身心俱惫。(呵呵,想偷懒有太多种理由,其实主要原因是昨天参与了SFD北邮站的活动的组织工作,晚上回家实在没有精力钻研git了)
===
这部分主要关注:如何管理分支。
首先要树立这样一种思想,软件开发不是一线到底的,而是有许多曲折的路要走的。我们如何保证走上曲折的道路后能够回归正确的道路呢?可以利用git的分支功能。(当然,事情都有两面性,有时候误认为曲折的道路最后发现是正确的道路。呵呵 各种情况,git也都全想到了)
还是接着我们之前的main.c的项目走。我想试着开发一个报时功能加入到main.c中,但我不保证这个功能一定能够实现。这个时候可以运行git branch命令来开启一个实验分支:
[root@wupengchong rocrocket]# git branch experimental
[root@wupengchong rocrocket]#
好了,分支建立完毕!
我来查看一下:
[root@wupengchong rocrocket]# git branch
experimental
* master
看到喽,直接输入git branch,不加任何后续参数,就表示让git列出所有已存在的分支。前面带“星号”的分支表示当前所在的分支。
好,我要进行报时功能的开发,当然我就要切换到experimental分支:
[root@wupengchong rocrocket]# git checkout experimental
Switched to branch “experimental”
好了,正如一小段英文所示,我们已经利用checkout命令成功切换到了experimental分支。好,现在就可以修改当前文件来开发我的报时功能了。(^_^,我现在是走在曲折的路上了)
修改之后的main.c如下:
[root@wupengchong rocrocket]# cat -n main.c
1    #include
2    #include
3    int main()
4    {
5    time_t mytime;
6    struct tm *mylocaltime;
7    mytime=time(NULL);
8    mylocaltime=localtime(&mytime);
9    printf(”Year:%d\n”,mylocaltime->tm_year+1900);
10    printf(”Month:%d\n”,mylocaltime->tm_mon+1);
11    printf(”Day:%d\n”,mylocaltime->tm_mday);
12    printf(”Hour:%d\n”,mylocaltime->tm_hour);
13    printf(”Min:%d\n”,mylocaltime->tm_min);
14    printf(”Second:%d\n”,mylocaltime->tm_sec);

15    printf(”Version: 0.02\n”);
16    printf(”Hello world!\n”);
17    return 0;
18    }
黑体为新加的内容。好了,我的报时功能已经完成了。看来这个分支是可行的:)
运行此程序,运行结果如下:
[root@wupengchong rocrocket]# ./a.out
Year:2008
Month:9
Day:21
Hour:11
Min:17
Second:4

Version: 0.02
Hello world!
OK!运行也很完美。我可以完全的确认“这个走在分支上的项目”完全在正确的道路上。(话语有点拗口,希望你能明白)
下面的任务就是提交程序到分支项目:(注意虽然已经确认了分支的正确性,但还是不能着急报告给“主干道”,而还要先在分支上提交工作)
[root@wupengchong rocrocket]# git commit -a
Created commit 0dff98a: This is a branch.
1 files changed, 11 insertions(+), 0 deletions(-)
然后就可以切换到“主干道”了:
[root@wupengchong rocrocket]# git checkout master
Switched to branch “master”
(走在主干道上的你,无论使用log或是status命令都无法看到刚才在experimental分支所进行的工作。)
为了让git处理分支的本领展现的淋漓尽致,我们现在在主干道上再做一些改进。我们希望程序在最开始执行的时候输出一行“Welcome to roclinux.cn”。这行很简单,在主干道上完成后,main.c的内容如下:
[root@wupengchong rocrocket]# cat -n main.c
1    #include
2    int main()
3    {
4    printf(”Welcome to roclinux.cn\n”);
5    printf(”Version: 0.02\n”);
6    printf(”Hello world!\n”);
7    return 0;
8    }
然后在主干道上使用git commit -a提交!
好!我们清理一下思路。在experimental分支上有一个增加了报时功能的main.c,而在主干道上有一个增加了welcome的main.c。它们都进行了git commit -a命令。
下面,我们就来合并“分支”和“主干道”(你猜会发生什么?):
[root@wupengchong rocrocket]# git merge experimental
Auto-merged main.c
CONFLICT (content): Merge conflict in main.c
Automatic merge failed; fix conflicts and then commit the result.
报错了!因为我看到了conflict和failed这样的字眼。看来主干道上加入的welcome和分支干道产生了冲突。我们决定来修改主干道的welcome语句到文章的最后部位。主干道的main.c此时为:
[root@wupengchong rocrocket]# cat main.c
#include
#include
int main()
{

printf(”Welcome to roclinux.cn\n”);
=======
time_t mytime;
struct tm *mylocaltime;
mytime=time(NULL);
mylocaltime=localtime(&mytime);
printf(”Year:%d\n”,mylocaltime->tm_year+1900);
printf(”Month:%d\n”,mylocaltime->tm_mon+1);
printf(”Day:%d\n”,mylocaltime->tm_mday);
printf(”Hour:%d\n”,mylocaltime->tm_hour);
printf(”Min:%d\n”,mylocaltime->tm_min);
printf(”Second:%d\n”,mylocaltime->tm_sec);
>>>>>>> experimental:main.c
printf(”Version: 0.02\n”);
printf(”Hello world!\n”);
return 0;
}
请务必注意代码中三行红粗体字,显而易见这是git在告诉我们发生冲突的地点,中间的加黑的“=======”表示两端冲突代码的分隔。可以看出git迷惑之处在于它不知道是把welcome这行放在前面还是把报时功能这段放在前面。呵呵 git正在迷惑中…
现在轮到我们人类来帮助告诉git我们想要什么了,修改这段冲突代码直到你自己满意为止吧。
修改后的main.c如下:
[root@wupengchong rocrocket]# cat -n main.c
1    #include
2    #include
3    int main()
4    {
5    printf(”Welcome to roclinux.cn\n”);
6    time_t mytime;
7    struct tm *mylocaltime;
8    mytime=time(NULL);
9    mylocaltime=localtime(&mytime);
10    printf(”Year:%d\n”,mylocaltime->tm_year+1900);
11    printf(”Month:%d\n”,mylocaltime->tm_mon+1);
12    printf(”Day:%d\n”,mylocaltime->tm_mday);
13    printf(”Hour:%d\n”,mylocaltime->tm_hour);
14    printf(”Min:%d\n”,mylocaltime->tm_min);
15    printf(”Second:%d\n”,mylocaltime->tm_sec);
16    printf(”Version: 0.02\n”);
17    printf(”Hello world!\n”);
18    return 0;
19    }
好,解决冲突后再次提交!
[root@wupengchong rocrocket]# git commit -a
Created commit 0120247: This is the new version!
好了,我们成功的完成了“将分支合并到主干道”的工作。下面轻松一下:
[root@wupengchong rocrocket]# gitk
看看会出来什么!呵呵 git的关怀无微不至吧。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76848/showart_1924797.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP