看日记学git

《看日记学git》之二十四

今天重点讨论如何更好的从别人那里获取工作进展。你是否想过,在一个人员繁多的项目组里,你是很难深入了解每个人的编程能力的,那么你的员工编写完了代码,你是否会一下就pull到你的master主分支呢?如果你会,那么你胆子够大。不过大部分project manager不会这样做的,他们会先把代码取过来放到一个临时的地方,仔细考究员工编写的代码,认为代码合格后,才会放心的放到master中去。

我们即将学习和研究的就是这种git安全处理机制的操作方法。

首先在rocrocket的git24目录下建立一个新roc.c文件。然后在bob用户下git clone这个git24目录到本地的bob24目录下。

[bob@wupengchong ~]$ git clone /rocrocket/PSB/home/git24 bob24
Initialized empty Git repository in /rocrocket/PSB/bob/bob24/.git/
[bob@wupengchong ~]$ ls
bob24
[bob@wupengchong ~]$

好了,已经clone过来了!下面bob来改进代码:

[bob@wupengchong ~]$ cd bob24/
[bob@wupengchong bob24]$ ls
roc.c
[bob@wupengchong bob24]$ git branch
* master
[bob@wupengchong bob24]$ vi roc.c
[bob@wupengchong bob24]$ cat -n roc.c
1    #include<stdio.h>
2    int main()
3    {
4        printf(“Hello,everyone!\n”);
5        printf(“Good bye!\n”);
6    }
[bob@wupengchong bob24]$ git commit -a
Created commit 42b7069: bob:001
1 files changed, 1 insertions(+), 0 deletions(-)
[bob@wupengchong bob24]$
bob已经改进了代码,并成功提交了!

下面就要到重头戏了,如何安全的处理员工的代码。

我们切换到rocrocket(也就是PM的角色),

[rocrocket@wupengchong git24]$ git fetch /rocrocket/PSB/bob/bob24 master:bob
Unpacking objects: 100% (3/3), done.
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2)remote: , done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From /rocrocket/PSB/bob/bob24
* [new branch]      master     -> bob
[rocrocket@wupengchong git24]$

看到了吧,PM用了一招,叫fetch!用这个命令,可以将远端的代码先下载到本地的指定分支(例子中是bob)中,而不是像git pull那样直接合并到当前分支。

[rocrocket@wupengchong git24]$ git branch
bob
* master
[rocrocket@wupengchong git24]$ git checkout bob
Switched to branch “bob”
[rocrocket@wupengchong git24]$ ls
roc.c
[rocrocket@wupengchong git24]$ cat roc.c
#include<stdio.h>
int main()
{
printf(“Hello,everyone!\n”);
printf(“Good bye!\n”);
}
[rocrocket@wupengchong git24]$

我们切换到bob分支并开始检查代码。告诉你一个新命令,这个命令可以很方便的查看两个分支的代码区别,它就是git-whatchanged!

[rocrocket@wupengchong git24]$ git-whatchanged -p master..bob
commit 42b706951ed78bad6ce716f61ca56fe63ad61067
Author: bob <bob@roclinux.cn>
Date:   Fri Oct 10 15:03:30 2008 +0800

bob:001

diff –git a/roc.c b/roc.c
index 33e540b..885aa26 100644
— a/roc.c
+++ b/roc.c
@@ -2,4 +2,5 @@
int main()
{
printf(“Hello,everyone!\n”);
+       printf(“Good bye!\n”);
}
[rocrocket@wupengchong git24]$

看,已经显示的很清楚了!经过PM的审核,可以放心地把代码加入到master中了!

[rocrocket@wupengchong git24]$ git checkout master
Switched to branch “master”
[rocrocket@wupengchong git24]$ git pull . bob
Updating dfa52c4..42b7069
Fast forward
roc.c |    1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[rocrocket@wupengchong git24]$

我们仍然坚持使用了git pull命令来进行合并工作。其实此时,我们使用merge也未尝不可。

git-pull的第一个参数表示仓库的位置,我们使用“.”表示在当前目录下。

git-pull的第二个参数表示分支名称,我们使用bob表示了分支名称。

git-pull默认就是将远端代码获取来并合并到当前分支中。

好了,任务完成!

最后总结一下:PM使用git fetch将远端代码获取到一个本地新分支中,然后使用git-whatchanged来查看区别,最后用git pull来将代码合并到本地分支中。

===
如果你对git感兴趣,请继续阅读:

《看日记学git》之二十五

《看日记学git》之二十六

over~

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *