| Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓 库(repository),许多个工作目录(working copy),而像Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有 BitKeeper 、 Mercurial 、 GNU Arch 、 Bazaar 、Darcs 、 SVK 、 Monotone 等),每一个工作目录都包含一个完整仓库,它们可以支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响 。 因为Android是由kernel、Dalvik、Bionic、prebuilt、build等多个Git项目组成,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。 |
From the detail of android Git repositories,see https://android.googlesource.com/
A.
1.Install GIT.
Download and install GIT for your development system. GIT 1.7.11.2 for Windows.
2.Install Repo.
Google Official Doc:http://source.android.com/source/downloading.html
Download and setup the repo tool, as described on the Android open source project site.
Repo is a tool that makes it easier to work with Git in the context of Android. For more information about Repo, see Version Control.]
Note: Developers using Windows must use a Linux compatibility package, such as cygwin, to install and run repo. Within your compatibility environment, you must install curl, git and python to be able to download and use the repo tool.
To install:first ensure the bin folder in your current user's root directory(Create it if none.If you don't know where to create bin folder,you can try cd ~/bin and check the hint.my is c/User/aa/bin),then add (~/bin) to the PATH environment variables,download Repo by curl and save it to ~/bin/repo.
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
https://dl-ssl.google.com/dl/googlesource/git-repo/repo.chmod a+x ~/bin/repo

3.Initialize Repository.
If you want the lastest main source code,you need repo.Create a directory first,for example,~/android,enter and repo init.
repo init -u git://android.git.kernel.org/platform/manifest.git
If you want a branch instead of main,you need -b to specify the branch name:
repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
repo init -u http://android.git.kernel.org/platform/manifest.git -b cupcake
Use git branch to list all the branch.
However,an error occurs when I use it:

It need the python interpreter.Now I run it in Git Bash.I switch to Cygwin Terminal and add a new environment variable C:\Users\aa\bin.Then it works well.

unable to connect to android.git.kernel.org may also occurs.It is because there are too many servers which provider downloads at port:80.You need to replace the git with http:

It may takes a long time,depends on you internet.You will see repo initialized in /android at last.

About the email and name ,you can set it by:
git config --global user.email "[email=xxxxx@xxxxxxx]xxxxx@xxxxxxx[/email]" git config --global user.name "xxxxxx"
4.Synchronization(download)
Modify file .repo/manifests/default.xml,replace the fetch="git://android.git.kernel.org/" with fetch="http://android.git.kernel.org/".(I skip this step.)
repo sync
repo sync project1 project2 …
如果是同步Android中的单个项目,只要在项目目录下执行简单的 git pull 即可。
B.
If you just need the code of some project,like kernel/common. Use Git directly。
git clone git://android.git.kernel.org/kernel/common.git
In the consideration of the whole download of Linux Kernel,it may take a long time also.
如果需要某个branch的代码,用git checkout即可。比如我们刚刚拿了kernel/common.get的代码,那就先进入到common目录,然后用下面的命令:
git checkout origin/android-goldfish-2.6.27 -b goldfish
这样我们就在本地建立了一个名为goldfish的android-goldfish-2.6.27分支,代码则已经与android-goldgish-2.6.27同步。我们可以通过git branch来列出本地的所有分支。
C.
通过GitWeb下载代码
arch CREDITS drivers include Kbuild MAINTAINERS net samples sound
block crypto firmware init kernel Makefile README scripts usr
COPYING Documentation fs ipc lib mm REPORTING-BUGS security virt
[root@localhost common]# git branch -a
* android-2.6.27
diff
remotes/origin/HEAD -> origin/android-2.6.27
remotes/origin/android-2.6.25
remotes/origin/android-2.6.27
remotes/origin/android-2.6.29
remotes/origin/android-goldfish-2.6.27
remotes/origin/android-goldfish-2.6.29
D.
通过第三方repo下载代码
在获取 Android 源码的第一步,就是需要获得 Git 和 Repo,在获得 “repo” 的时候,就需要到 “kernel.org” 获取:
curl http://android.git.kernel.org/repo >~/bin/repo
基于种种原因,你是无法同步的,会提示:
% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 curl: (7) couldn't connect to host
即使你之前已经获取了 “repo”,而你在同步 Android 源码时候也会提示:
android.git.kernel.org[0: 130.239.17.13]: errno=Connection refused android.git.kernel.org[0: 199.6.1.173]: errno=Connection refused android.git.kernel.org[0: 2001:6b0:e:4017:1972:112:1:0]: errno=Network is unreachable android.git.kernel.org[0: 2001:500:60:10:1972:112:1:0]: errno=Network is unreachable fatal: unable to connect a socket (Network is unreachable) error: Cannot fetch platform/bionic
故本文这里就使用另外源,来取得 Android 源码。
一、获取 repo
这个是老外自己建立的,使用这个源可以获得 repo,但是后续的源码也是使用老外自己建立的。首先获取 repo:
curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" > ~/bin/repo
给 “repo” 增加相应权限:chmod a+x ~/bin/repo
添加环境变量:PATH=~/bin:$PATH
这样就获取了第三方的 repo。
二、同步 Android 源码
同样是使用老外自己的源,首先进入工作目录:cd ~/android/system/
repo init -u git://codeaurora.org/platform/manifest.git可以查看所有分支
同步源码:repo init -u git://codeaurora.org/platform/manifest.git -b gingerbread
查看分支时注意只有[New Branch]的才可以下载,[New Tag]的无法下载。
开始同步:repo sync
这个是第三方的源码,不知道其中会不会有什么问题,我自己也同步了。请大家自己斟酌,这里仅仅是提供一种方法。
For Detail:http://source.android.com/source/downloading.html