读书频道 > 系统 > linux > Linux内核精髓:精通Linux内核必会的75个绝技
与远程仓库进行共同作业
2013-02-19 15:17:15     我来说两句 
收藏    我要投稿   
经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远。随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大无比,对于Lin...  立即去当当网订购

本地仓库的操作已经基本掌握,下面就将介绍与远程仓库进行共同作业的方法。

这里将按照一般开发者进行Linux内核上游开发时的流程来说明。大致流程如下。

 将上游的仓库复制到本地。

 不断追踪上游仓库的最新状态,同时在本地仓库进行开发。

 以补丁的形式将开发成果提交维护人员及开发邮件列表。

复制仓库

当进行上游开发时,首先要复制各维护人员所管理的开发仓库(远程仓库),建立本地仓库。在Git中将这一步称为“复制”。 复制是通过git clone命令来进行的。例如,复制Linus树的仓库的命令为:
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6

复制Linus树时要下载1GB以上的数据,因此需要花费很长时间,仅在必要时再进行这个操作。这里将之前生成的hello仓库当做远程仓库,将其复制到其他位置。
$ cd
$ git clone hello local

生成local目录后,里面包含的文件就与hello目录完全相同。进入local目录,使用git log确认记录,就可以发现至今为止的记录已完全复制过来。

建立本地分支

请在本地仓库执行git branch命令。在这一阶段只有master分支。这个master分支是在远程仓库(即hello仓库)的master分支关联的基础上,在本地仓库生成的分支。关联,就是指此后与远程仓库进行同步时,hello仓库在master分支下所作的改动会合并到这个分支。因此,如果在master分支中进行开发,进行同步时两个仓库所作的更改就有可能发生冲突。为了避免发生这种情况,就要事先从master分支中分出一个用于在本地进行开发的分支work。
$ git checkout -b work

git checkout -b命令将在创建分支的同时进行检查(针对当前分支的最新修改)。

追踪分支

为了便于说明,上文的描述比较简单,可能会让人认为本地仓库的master分支是hello仓库master分支的副本,而其实并不是这样。hello仓库的master分支,在本地仓库是以origin/master的标题出现的。这个分支才完全是hello仓库master分支的副本,这种分支称为“追踪分支”。在使用git pull对仓库进行同步时,首先同步的就是这个追踪分支。然后,把追踪分支的提交合并到追踪分支所关联的本地分支中。

通过执行git branch -r命令,可以显示追踪分支的列表。下方显示的就是在本地仓库中执行这一命令的输出结果(见图1-9)。
$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/ver1x

远程仓库的相关信息可以使用git remote show命令来确认。虽然可以设置多个远程仓库,但仅设置一个时其默认名称为origin,因此执行该命令时可以指定origin。

 

$ git remote show origin
* remote origin
  URL: /home/munehiro/hello
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branches
    master
    ver1x

这里的输出具有下列含义。

 远程仓库origin的URL:/home/munehiro/hello

 在本地分支master上执行git pull时合并的远程分支:master

 追踪分支:master,ver1x

这些信息是通过.git/config文件设置的。相关各部分的内容(section)如下所示。[remote "origin"]部分规定了远程仓库的URL、远程仓库上的分支、追踪分支之间的关系。[branch "master"]部分规定了合并到本地分支master的远程分支为origin仓库(即hello仓库)的master分支。
$ cat .git/config
...
[remote "origin"]
 fetch = +refs/heads/*:refs/remotes/origin/*
 url = /home/munehiro/hello
[branch "master"]
 remote = origin
 merge = refs/heads/master
...

追踪分支是为了追踪远程仓库而存在的,因此不能在这个分支上进行本地修改(从技术上是可以的,但并不推荐)。

以追踪分支为起点建立本地分支后,本地分支就被追踪分支关联。例如,可以通过下列命令,建立与master分支的追踪分支相关联的本地分支master2。
$ git branch master2 origin/master

本地分支master及master2虽然被关联,但二者完全是本地分支。因此也可以直接在上面进行本地开发。但是,由于需要通过git pull进行合并,因此如果发生了冲突,就必须在这时候解决。

与远程仓库同步

想要看到在远程仓库上不断进行的开发,可以在hello仓库的master分支下对thanks.c进行如下修改并提交(将负(–)的行改为正(+)的行)。
-    return 0;
+    return 2;

$ git commit -a

将Modify return value of thanks.c into 2作为提交信息。

使用git pull命令可以让本地仓库与远程仓库的最新状态保持同步。在本地仓库执行下列命令后,在hello仓库的master分支下进行的修改就会全部整合到本地仓库的master分支。
$ git checkout master
$ git pull

这时使用git log查看记录,可以发现hello仓库的提交Modify return value of thanks.c into 2已经整合并完成同步。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:在本地仓库进行操作
下一篇:将开发分支rebase到最新状态
相关文章
图文推荐
3.3.6 GNOME的软件管
3.3.5 GNOME的文件管
3.3.4 GNOME的窗口管
3.3.3 收藏夹和快捷
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站