Ubuntu16.04 搭建Android源码的git+gitosis+repo代码管理的服务器

Android项目使用Git说明 1、首先安装Git相关工具 分别为git安装包、git可视化管理工具和管理工具中文翻译包。 下载地址:用于进行项目管理的Git安装工具包-管理软件文档类资源-优快云下载 2、分别安装三款应用(傻瓜式安装) 3、新建Android项目或进入已有的Android目录中,如下: 4、在目录中鼠标右键->选择在这里创建版本库并点击确定 创建完成后会生成.git目录: 5、继续在此目录鼠标右键选择TortoiseGit并选择设置 6、选中Git目录后选择全局并输入用... 阅读详情

Ubuntu16.04 搭建Android源码的git+gitosis+repo代码管理的服务器

https://blog.youkuaiyun.com/qq_28449863/article/details/80084660

 

一份源码 要让团队里的人能够轻松地拉取。

以下是我的搭建过程。

1.关于源码及相关编译环境参考我之前的一篇博文https://blog.youkuaiyun.com/qq_28449863/article/details/79978937

2.简单做个描述

所有电脑都处在局域网下。

 一台服务器(UbuntuServer),有几个用户(开发者),另外有一台电脑来管理服务器上的代码(就叫管理员吧)

要做到开发者都能从服务器那拉取代码和更新代码。()

3.先搭好git+repo的简单服务器

具体参考https://blog.youkuaiyun.com/qq_28449863/article/details/79992191

4.在此之前请确保上述要求都能满足

最头痛的一步

       接下来的就是怎么把Android的源码弄上去了,我这里是谷歌的Android-7.0.0.0-r32版本的源码。弄下来,以为把所有的源码全丢在一个文件下就行了,所以一开始就在管理员那把所有源码都丢进相当于apps的目录下,然后整个push到服务器。然而事情并不简单,当开发人员拉取代码时很多文件夹里面什么都没有。显然这样是不可取。repo是管理多个git的,源码里面本身就有一些git,并不是纯净的目录,所以在管理员push的时候,有些东西并不能push上去。即使是干净的源码,加之这个源码的量很大几十个G,每次push和pull的时候都把整个都这样操作很不方便,也失去了使用repo的意义,那跟单独使用git没区别。用repo就是为了管理多个git。

  明白了这个就好多了,然后就是来处理这个源码了。分几个步骤。

1.清理源码使之成为纯净的目录(无特别说明都在源码的根目录下执行命令)

copy一份源码的default.xml 在源码的.repo/manifests/目录下,然后删除整个.repo 文件夹

rm -rf .repo

在删除整个目录中所有“.git”“.gitignore”文件

find .  -name ".git" | xargs rm -rf

find .  -name ".gitignore" | xargs rm -rf

执行完这些源代码就是干净的了,没git,没gitignore。

原default.xml(以Android8的一个版本为例,android7的跟它差不多一个样):

对其加以修改,我把那个name属性中的"platform/"路径去掉了(其实做不做这一步应该没关系),这个name对应的就是远程仓库的地址,即服务器上/home/git/repositories/下的仓库位置(只要一致就可以了)。不过替换也挺方便的。这样name跟path路径一致了。path代表本地同步时的本地路径。修改参考:https://blog.youkuaiyun.com/doubleface999/article/details/55798741

另外还需要修改下默认远程仓库的地址。根据你自己的来(一般替换为你服务器的ip地址即可)

将其保存为default.xml(以后会用的这个xml文件,很重要)

2.在gitosis系统中添加仓库组(这是能够在管理员那关联远程仓库并push上去的前提)

把修改后的default.xml和python脚本文件拷贝到管理员的gitosis-admin目录下,赋予脚本执行权限

脚本文件:gitosis.py

 
  1. #!/usr/bin/python3

  2. #把出现的git加入到gitosis系统中

  3. import os

  4. import sys

  5.  
  6. if len(sys.argv) == 1:

  7.  
  8. print('错误!请传入 xml 文件')

  9.  
  10. elif len(sys.argv) == 2:

  11. print('错误!请传入 conf文件)

  12.  
  13. elif len(sys.argv) > 3:

  14. print('错误!传入参数太多')

  15. else:

  16. print('传入的文件是 %s,%s' % (sys.argv[1],sys.argv[2]))

  17.  
  18. #newfilestr = ''

  19.  
  20. with open(sys.argv[1], 'r') as fin:

  21. while True:

  22. linestr = fin.readline()

  23. if linestr == '': #表示文件结束

  24. break

  25. #print(linestr)

  26. #下面开始对本行内容分析

  27. if (('name=' in linestr) or ('name =' in linestr)) and (('project' in linestr) or ('path' in linestr)): #本行内容含有name信息

  28. #print(linestr)

  29. #下面分析本行内容,并提取name

  30. charistr1 = 'name="'

  31. charistr2 = '"'

  32. gitprojstr = linestr[linestr.index(charistr1)+len(charistr1) : linestr.index(charistr1)+len(charistr1)+ linestr[linestr.index(charistr1)+len(charistr1):].index(charistr2)]

  33. gitdir=os.path.split(gitprojstr)[0]

  34. gitname=os.path.split(gitprojstr)[1]

  35. print(gitdir)

  36. print(gitname)

  37. with open(sys.argv[2], 'a') as fout:

  38. fout.write(' '+gitname)

修改前:

使用python脚本:

./gitosis.py default.xml gitosis.conf

修改后(脚本执行完,请手动修改一下gitosis.conf ,脚本添加的目录是另起一行添加的,务必把其改成以下形式,其中writeable 有多个路径<以空格隔开的>,每个路径代表一个.git目录,即在服务器上/home/git/repositories/下的仓库位置)

然后删掉之前添加的default.xml和gitosis.py

再add commit提交到远程,git push,更新gitosis配置。

3.初始化源码,并与远程仓库关联,提交后push。

把修改后的default.xml和脚本文件getnames_and_init_push_git_proj.py复制到之前处理过的干净源码目录下,并赋予脚本执行权限

getnames_and_init_push_git_proj.py内容如下:

 
  1. #!/usr/bin/python3

  2.  
  3. import os

  4. import sys

  5.  
  6. remote = 'git@192.168.1.107:'#注意更改远程仓库地址

  7.  
  8. if len(sys.argv) == 1:

  9. print('错误!请传入 xml 文件')

  10. elif len(sys.argv) > 2:

  11. print('错误!传入参数太多')

  12. else:

  13. print('传入的文件是 %s' % sys.argv[1])

  14.  
  15. with open(sys.argv[1], 'r') as fin:

  16. while True:

  17. linestr = fin.readline()

  18. if linestr == '': #表示文件结束

  19. break

  20. #print(linestr)

  21. #下面开始对本行内容分析

  22. if (('name=' in linestr) or ('name =' in linestr)) and (('project' in linestr) or ('path' in linestr)):

  23. #本行内容含有name信息

  24. #print(linestr)

  25. #先无条件提取name路径

  26. charistr1 = 'name="'

  27. charistr2 = '"'

  28. namestr = linestr[linestr.index(charistr1)+len(charistr1) : linestr.index(charistr1)+len(charistr1)+ linestr[linestr.index(charistr1)+len(charistr1):].index(charistr2)]

  29. if 'path=' in linestr: #如果path存在则用path的路径作为本地路径

  30. charistr1 = 'path="'

  31. charistr2 = '"'

  32. pathstr = linestr[linestr.index(charistr1)+len(charistr1) : linestr.index(charistr1)+len(charistr1)+ linestr[linestr.index(charistr1)+len(charistr1):].index(charistr2)]

  33. else: #如果path不存在,则认为path路径(本地路径)就是name路径

  34. pathstr = namestr

  35. print('name="%s", path="%s"' % (namestr, pathstr))

  36. #下面开始初始化并提交git工程

  37. localpath = sys.path[0] + '/' + pathstr # git工程的本地绝对路径

  38. #remotepath = remote + '/' + namestr # git工程远程相对路径

  39. remotepath = remote + namestr+'.git' # git工程远程相对路径,注意要与gitosis.conf 配置的路径一致

  40. print(remotepath)

  41. #判断本地目录是否为空,为空的话则新建一个文件,空目录会导致git提交失败

  42. if not os.listdir(localpath): # 本地目录为空

  43. #cmd = 'touch %s/._USELESSFILE_' % (localpath)

  44. cmd = 'touch %s/.gitignore' % (localpath)

  45. print(cmd)

  46. os.system(cmd)

  47.  
  48. cmd = 'cd %s && rm -rf .git && git init && git remote add origin %s && git add . -f && git commit -m "init" &&git push -u origin master && cd %s' % (localpath, remotepath, sys.path[0])

  49. print(cmd)

  50.  
  51. os.system(cmd)

 

执行脚本文件:./getnames_and_init_push_git_proj.py  default.xml

等待。。。(此时就会在相应的目录下初始git,提交,关联指定的远程仓库,push上去)

直至命令执行完毕。

4.更新manifest.git(用于控制repo init时拉取哪些git)

将更新后的default.xml 复制到管理员的manifest目录下提交到远程服务器,更新manifest.git。

5.用户测试

  现在关于安卓源码的repo服务器的就搭好了。

gitosis系统中的其他用户就可以拉取代码,这目录会就有真东西了,不像之前什么都没有。

先安装repo工具:

 

mkdir ~/bin
PATH=~/bin:$PATH

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

chmod a+x ~/bin/repo

修改repo文件内容中的 export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

 

mkdir adnroid7 && cd android7

 

repo init -u git://192.168.1.107/manifest.git -m default.xml

repo sync

repo init 中的 -m是指定相应的配置文件,根据这个配置文件来拉代码,默认为default.xml。所以上述-m也可以略去。当你的配置文件名不是default.xml时就需要加上这个 -m参数了

关于脚本的参考:http://nicekwell.net/blog/20171112/ba-yi-you-de-repogong-cheng-ti-jiao-dao-fu-wu-qi.html

注:当repositories目录下需存在多个项目时,且项目之间有重名的git,会产生重叠冲突。此时可通过在repositories目录下新建对应的项目来存储相应的git项。如:yota项目

在初始化和提交脚本中修改远程根地址为:remote = 'git@192.168.1.110:yota/'

default.xml 修改 

  <remote fetch="git://192.168.1.110:/yota/" name="msm8953_remote"/>
  <default remote="msm8953_remote" revision="refs/heads/master" sync-j="4"/>

fetch用这种绝对地址比较稳妥。

REPO镜像服务器的搭建 本文介绍Ubuntu16.04 64位环境下Repo服务器的搭建。 Repo是Google用Python写的用于管理数多个git工程的脚本,Android SDK源码就是用这个工具管理的,下面具体介绍Repo服务器的搭建流程: (1)下载Ubuntu镜像http://www.ubuntu.org.cn/download/desktop,并安装好 阅读详情

相关推荐

组态王|通过日历控件选择时间段查询历史报警

哈喽,你好啊,我是雷工!这节记录下查询历史报警信息的功能实现。以下为实现笔记。

做有价值的事,积累有价值的笔记! 3763

【软件】Ubuntu16.04安装repo全纪录,构建自己的repo仓库,最详细的步骤大全,以及踩坑大全

Ubuntu16.04安装repo全纪录,构建自己的repo仓库,最详细的步骤大全,以及踩坑大全,10种花式坑,你总要踩几种。

YoYo的桃子树 8991

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码) 文章目录扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)理论讲解KF和EKF模型对比雅可比矩阵计算计算实例应用实例线性模型CV模型:CA模型非线性模型CTRV模型:CTRV实例(python)small demo抛物线demo飞机高度demoC++实例参考文献 我们上篇提到的卡尔曼滤波是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布

O_MMMM_O的博客 10万+

Ubuntu搭建Android服务器,Ubuntu下搭建repo服务器(三): 搭建Android repo服务器

1. 配置repo1.1 下载git-repo.git(B端)mkdir -p ~/gitCfgcd ~/gitCfggit clone https://gerrit.googlesource.com/git-repo git-repo.git如果上面的地址无法连接,可以尝试下面的地址:git clone https://review.mfunz.com/git-repo git-repo.gi...

weixin_35436993的博客 292

PX4/ArduPilot源码克隆提速秘籍:国内镜像与子模块优化全攻略

本文详细介绍了PX4/ArduPilot源码克隆的提速秘籍,包括使用国内镜像源和子模块优化技巧。通过阿木实验室、华为云等国内镜像,克隆速度可提升20倍,同时提供子模块替换和并行编译等实用方法,大幅提升开发效率。

weixin_29251567的博客 524

Yakit实战:利用验证码识别插件突破Webfuzzer自动化测试瓶颈

本文详细介绍了如何利用Yakit的Webfuzzer模块结合验证码识别插件,突破自动化安全测试中的验证码瓶颈。通过实战演示,讲解了如何部署本地OCR服务、编写热加载脚本,实现从获取验证码到自动识别并替换的全流程自动化,从而让Webfuzzer能够高效、无人值守地进行大规模密码喷洒等测试。

weixin_29323493的博客 283

Android 源码部署到服务器(Git+GitLab+Repo)

Android 源码部署到服务器端,一共分为七个部分。 软件环境 GitLab 服务端部署 Repo Manifest.xml 生成 GitLab 建仓 Git Push 源码到服务器 Repo 同步源码 提交修改后的代码 一、软件环境 服务器端系统:Ubuntu 16.04 GitLab 软件:GitLab Community Edition 客户端系统:Ubuntu 14.04 Git 软件:Git 2.27.0 二、GitLab 服务端部署 必要组件安装 sudo apt-get update

洪伟的专栏 6261

硬件单板类机考复习提纲

6、 功率晶体管低导通损耗时处于的状态(饱和状态、放大状态、截止状态)(放大器的采样频率特性)总结:元器件特性(电阻、电容、二极管、三极管、晶体、晶振、MOS、磁珠等)信号质量问题产生根因(单调性、边沿过缓、毛刺、回沟、抖动等)3、 几种电容容量范围大小(超级电容、钽电容、陶瓷电容、铝电容)66、背板连接器接触设计的接触顺序(先导向、再地针、最后信号针)28、逻辑电平接口的特性(CMOS、TTL、ECL、PECL)76、差分电平(lvpecl、RS-422/485、cml)

2303_79562407的博客 1万+

自建 Android 源码 git/repo 仓库

http://blog.chinaunix.net/uid-26990529-id-3396947.html 获取repo工具 curl http://android.git.kernel.org/repo > ~/bin/repo chmod a+x ~/bin/repo 获取正版的目录树 mkdir myandroid cd myandroid

teddy99999的专栏 2382

YOLOv11+SAHI实战:5步搞定无人机航拍小目标检测(附VisDrone数据集调参技巧)

本文详细介绍了如何结合YOLOv11目标检测框架与SAHI切片推理技术,高效解决无人机航拍图像中的小目标检测难题。通过VisDrone数据集调参技巧和5步实战指南,帮助开发者快速构建高性能检测系统,显著提升小目标检测的准确率和效率。

rum55的博客 190

AI应用质量工程实践:从评估到监控的完整体系构建

在软件工程领域,质量保障体系是确保产品稳定可靠的核心机制,涉及度量指标、保障流程和工具链的完整闭环。随着生成式AI应用的快速发展,如何将传统软件工程中的质量门禁思想引入AI领域,成为工程实践的关键挑战。其核心原理在于构建可量化、可监控、可改进的质量评估框架,通过自动化测试、持续监控和反馈优化来管理AI输出的不确定性。这一技术价值在于将AI应用从原型阶段推向产品化,确保输出的一致性、安全性和可靠性。在实际应用场景中,开发者需要从功能性、非功能性、一致性和合规性四个维度构建评估体系,并借助LLM-as-a-Ju

weixin_28728279的博客 294

使用一个大git管理整个Android平台源码并且保留repo的同步功能

前言 谷歌或者第三方厂商提供的Android平台源码,大多数都是由repo来管理,我们知道其中包含了很多小的git工程。 如果我们开发团队规模比较小,我们很可能想直接使用一个git来维护这样比较方便,但这样就会导致repo功能丧失,就没办法过一段时间同步第三方厂商的代码了。 那该怎么解决?解决及实现思路如下 这只是本人个人尝试的解决方法,最终达到这个目的,经测试稳定无问题,如果大家有更好的方法,欢迎大家探讨改进。 注意:以下实现是在rk3399-industry-7.1上,不保证对所有都通用,但可以提供参考

wolfnx 1928

有道龙虾LobsterAI vs. OpenClaw:对比与安装部署攻略

LobsterAI是"中国版OpenClaw",更注重易用性和中文场景适配;OpenClaw是技术极客的玩具,需要大量命令行操作。

lpfasd123的博客 2396

批量创建Android源码的本地仓库

批量创建Android源码仓库修改manifest.xml文件准备仓库app.py源代码 修改manifest.xml文件 manifest.xml文件在源代码的.repo目录中 <manifest> <remote fetch="ssh://localhost/mnt/GitRepository/ANDROID7.1" name="ssh" review="remote...

sinat_20598829的专栏 532

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

简单的为Android项目创建git仓库

一. git软件安装 Ubuntu sudo apt-get install git-core 二. 转到项目根目录 略 三. 初始化 配置身份 git config --global user.name "yourName" | git config --global user.email "yourEmail" 初始化仓库 ...

qq_42131061的博客 719

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ubuntu16.4下安装git,以及配置git

1、首先再控制台检查git是否已经安装,输入git version命令即可,如果没有显示版本号表示没有安装git,进行到第二步2、安装git,3、配置git环境4、生成ssh密钥5、创建一个空的目录,初始化git仓库,添加远程仓库# mkdir /home/Android#git init6、从远程仓库下载文件git fetch origin7、切换到master分支git checkout ma...

S852509769的博客 7944

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ubuntu搭建Git 服务器

参考网上资料搭建git服务器过程记录如下: 硬件需求:一台linux Ubuntu电脑(虚拟机),在公司局域网内有独立IP,并且保证小组每个人都能ping通; 软件需求:git-core, gitosis, openssh-server, openssh-client 安装git和openssh: a@ubuntu:~$ sudo apt-get install git-core a@u

prochsh的专栏 1467

搭建android源码本地服务器

之前下载的android原码直接在上边简单修改调试,但是考虑到后边扔到服务器(本地)上多人调试时的不方便,这几天搞了一下,作为记录。 参考:https://blog.csdn.net/xiezhi123456/article/details/80030593 ...

ziyexiuxiu的专栏 3458

git+gitosis+repo 管理多个Android源码

1.前言 本文记录下笔者先后两次针对Android源码管理所走的路,途中也算是一波三折吧,最终还是大致弄清了三者工作流程。笔者管理Android源码是采用了git+gitosis+repo的方式。 2.git+gitosis+repo介绍 Git 是一个开放源代码的版本控制系统,专用于处理分布在多个代码库上的大型项目。在 Android 环境中,我们会使用 Git 执行本地操作,例如建立本地分支、...

wang 恒 的博客 1445

Ubuntu安装repo

1、repo简介: repo 是一个构建在 Git 之上的工具,它可以更容易地管理包含多个存储库的项目,而这些存储库不需要位于同一台服务器上。 repo 很好地补充了 yocto 项目的分层特性,使用户可以更容易地将自己的层添加到 BSP 中。 简单来说, repo 用来管理多个 git 工程, git 是无法将 freescale 的在存储库里面的某个项目给 clone 下来,如果我们只需...

haolask的博客 1万+

Ubuntu repo安装配置

系统环境:Ubuntu 12.04.5 LTS1.安装依赖工具sudo apt-get install git-coresudo apt-get install git-core curl2.下载repomkdir ~/bin/curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/bin/repo3.修改可执行属性ch...

ivansuntech的专栏 1万+

ubuntu16.04 + Gerrit + repo + gitweb

1.添加gerrit帐号并赋予sudo权限 sudo adduser gerrit chmod u+w /etc/sudoers sudo vi /etc/sudoers 找到如下内容: # User privilege specification root    ALL=(ALL:ALL) ALL gerrit  ALL=(ALL:ALL) ALL     #添加这一行 sudo s...

sfr2017的博客 3782

ubuntu 安装 repo 记录

问题:问题一: fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle fatal: error [Errno 101] Network is unreachable原因: 可能是Ubuntu命令安装的repo版本太久,我的电脑不能翻墙.所以下面我是下载安装repo的.问题二: .repo/repo/git_co

佳朗的专栏 2万+
上一篇: Gitolite + repo 搭建安卓源码开发环境
下一篇: 文件只能打开一次就销毁
nedwons
博客等级 码龄9年 311粉丝 572原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值