转自 http://www.cnblogs.com/eastnapoleon/p/5909471.html
1. 配置repo
1.1 下载git-repo.git(B端)
1
2
3
|
mkdir -p ~/gitCfg
cd ~/gitCfg
git clone https:
//gerrit.googlesource.com/git-repo git-repo.git
|
如果上面的地址无法连接,可以尝试下面的地址:
1
|
git clone https:
//review.mfunz.com/git-repo git-repo.git
|
1.2 配置repo(B端)
a) 将git-repo.git目录下的repo拷贝到 /usr/bin:
1
2
|
cd git-repo.git
sudo cp repo /usr/bin/repo_gitadmin
|
b) 修改 repo
1
|
vi /usr/bin/repo_gitadmin
|
修改
1
2
|
REPO_URL =
'https://gerrit.googlesource.com/git-repo'
REPO_REV =
'stable'
|
为
1
2
|
REPO_URL = /home/gitadmin/gitCfg/git-repo.git
REPO_REV =
'master'
|
其中,
REPO_URL: repo 所调用库和管理引用仓库;
REPO_REV: 本文设置分支为master,可用命令git branch查看:
1
|
git branch -avv
|
2. 创建版本根目录(A端)
2.1 如果已经存在 /home/git/repositories 目录,就不需要创建,否则:
1
2
3
|
sudo su git
cd /home/git
mkdir repositories
|
2.2 初始化manifest仓库
1
2
|
cd repositories
git init --bare 17435/manifest.git
|
3. 配置default.xml文件(B端)
default.xml是跟Android代码配套的,可参考google Android源码下的default.xml(.repo/manifests/default.xml)进行修改。
3.1 克隆manifest.git
1
2
3
|
3.2 配置default.xml
1
2
|
cd manifest
vi
default
.xml
|
本文的配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<manifest>
<remote name=
"origin"
fetch=
"git://192.168.1.126"
/>
<
default
revision=
"master"
remote=
"origin"
sync-j=
"4"
/>
<project path=
"build"
name=
"platform/build"
groups=
"pdk"
>
<copyfile src=
"core/root.mk"
dest=
"Makefile"
/>
</project>
<project path=
"abi/cpp"
name=
"platform/abi/cpp"
groups=
"pdk"
/>
... ...
</manifest>
|
将上面的default.xml 文件push 到仓库:
1
2
3
|
git add .
git commit -m
"Init Commit"
git push 或者 git push --all
|
4. 建立相关的git 仓库(A端)
4.1 获取需要新建的仓库目录列表
1
2
|
cd /home/git/repositories/17435
cat
default
.xml | cut -d
'"'
-f 4 > repos_17435.txt
|
在repos_17435.txt中删除不必要的行,如manifest, Makefile等。
4.2 新建脚本repos_17435.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#/bin/bash
set
-x
set
-e
pwd=${PWD}
cd /home/git/repositories/17435
while
read line;
do
if
[ -z
"$line"
]; then
echo $work_dir not exist !!!!!!!!!! 1>&2
continue
fi
git init --bare $line.git
echo ==== $line
pwd
done
|
4.3 使用如下命令新建仓库
1
|
cat repos_17435.txt | . repos_17435.sh
|
4.4 修改仓库的文件属性
1
|
sudo chmod 777 -R /home/git/repositories/17435
|
5. 上传代码到仓库(B端)
5.1 拷贝Android代码到目录,
1
|
/home/gitadmin/17435/src
|
并清除其中git和svn等版本控制信息。
5.2 通过default.xml得到需要上传的仓库目录,并保存在src_17435.txt中
1
2
|
cd /home/gitadmin/17435/src
cat /home/gitadmin/17435/manifest/
default
.xml | cut -d
'"'
-f 2 > src_17435.txt
|
编辑src_17435.txt,清除不必要的行。
5.3 新建脚本src_17435.sh如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#/bin/bash
set
-x
set
-e
para1=
work_dir=$1
pwd=${PWD}
while
read line;
do
line1=${line%%/*}
if
[ -z
"$line"
]; then
echo $work_dir not exist !!!!!!!!!!!! 1>&2
continue
fi
if
[ $(ls -A $pwd/$line | wc -l) -eq 0 ]; then
echo $work_dir empty !!!!!!!!!!!! 1>&2
continue
fi
workdir=$pwd/$line
echo ==== $workdir
cd $workdir
rm -rf .git
git init . 1>&2
git add . -f 1>&2
git commit -m
"Initial commit"
1>&2
if
[
"$line1"
=
"device"
]; then
git push --
set
-upstream git:
//192.168.1.126/17435/$line.git master
elif [
"$line1"
=
"vendor"
]; then
git push --
set
-upstream git:
//192.168.1.126/17435/$line.git master
else
git push --
set
-upstream git:
//192.168.1.126/17435/platform/$line.git master
fi
cd -
done
|
5.4 使用如下命令上传代码到仓库:
1
|
cat src_17435.txt | . src_17435.sh
|
6. 下载代码
1
2
3
4
|
mkdir
-
p
/
home
/
gitadmin
/
17435
/
des
cd
/
home
/
gitadmin
/
17435
/
des
repo_gitadmin init
-
u git:
/
/
192.168
.
1.126
/
17435
/
manifest.git
repo_gitadmin sync
-
f
-
j4
|