把不含.repo的Android工程提交到服务器

本文介绍了一种定制化的Repo工作流程,包括服务器端创建manifest.git工程、客户端修改并上传manifest.xml文件、服务端批量创建子工程及客户端批量上传子工程等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先把大牛的文章连接丢过来
http://nicekwell.net/blog/20171112/ba-yi-you-de-repogong-cheng-ti-jiao-dao-fu-wu-qi.html。
我遇到的情况跟大牛遇到的不大一样,

对方给我们源码的时候把.repo文件夹给删除了,代码里面留了茫茫然多的.git和.gitignore。

结合大牛的教程,开始我自己的定制之旅。

服务器端创建manifest.git工程

  每个repo工程都会有一个 manifest.git 工程,此工程内容就是 manifest.xml 文件,manifest.xml文件记录了各个git子工程的信息。
  我们在服务器创建一个 manifest.git 工程就是用于存放我们自己的 repo 工程的manifest.xml文件。
  一般放在大工程目录下。

  git init --bare /home/git/[工程目录]/manifest.git

客户端修改并上传manifest.xml文件

1、把刚刚创建的manifest.git工程拖下来
    git clone git@[ip]:[proj]/manifest.git
2、客户提供的代码基于android-7.1.2_r36,所以先到谷歌AOSP上找对应的branch。

repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r36找到default.xml按如下修改:
On branch default
Your branch is up-to-date with 'origin/android-7.1.2_r36'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   default.xml

no changes added to commit (use "git add" and/or "git commit -a")
lei@lei-pc:~/code/google/android-7.1.2_r36/.repo/manifests$ git diff
diff --git a/default.xml b/default.xml
index 5fc6b95..2932e4c 100644
--- a/default.xml
+++ b/default.xml
@@ -4,8 +4,9 @@
   <remote  name="aosp"
            fetch=".."
            review="https://android-review.googlesource.com/" />
-  <default revision="refs/tags/android-7.1.2_r36"
-           remote="aosp"
+  <remote fetch="." name="origin"/>
+  <default revision="master"
+           remote="origin"
            sync-j="4" />
 
   <project path="build" name="platform/build" groups="pdk" >

3、提交default.xml文件。

服务端分析manifest.xml文件,批量创建工程

获取到manifest.xml文件的所有name信息(代表所有git子工程),然后用脚本批量创建git工程。

  1、把上面的default.xml文件用scp上传到服务端,放到工程目录下。
  2、进入大工程目录,用 getnames_and_create_project.py 脚本分析 default.xml文件,并创建工程:
    用这个脚本:getnames_and_create_project.py

./getnames_and_create_project.py default.xml

8.png

    脚本执行完成后会新建很多目录出来:

9.png

客户端分析manifest.xml文件,批量上传到服务器

  刚刚在服务器上已经创建好了各个git子工程,这里把它们上传。
  分析manifest.xml文件,获取到所有name信息(代表所有git子工程),然后用脚本批量上传git子工程。

  1、进入上面创建好的干净的工程目录,把上面建立好的default.xml文件复制到这里。
  2、把客户端的id_rsa.pub加入到服务端的 authorized_keys里。
  3、进入大工程目录,客制化以下脚本:getnames_and_init_push_git_proj.py

            该脚本我在原作者的基础上有修改,增加的如下代码:

if not os.path.exists(localpath)
				cmd = 'mkdir -p %s' % (localpath)
                print(cmd)
                os.system(cmd)

大概原因是default.xml中有一些并没有默认启用,比如下面这些:

  <project path="tools/idea" name="platform/tools/idea" groups="notdefault,tools" />
  <project path="tools/loganalysis" name="platform/tools/loganalysis" groups="notdefault,tradefed" />
  <project path="tools/motodev" name="platform/tools/motodev" groups="notdefault,motodev" />
  <project path="tools/studio/cloud" name="platform/tools/studio/cloud" groups="notdefault,tools" />

10.png

    修改这里的远程地址,后面会把工程提交到这里。
    这里的地址应当和上面服务器端建立工程的地址相同。

  4、运行脚本

    ./getnames_and_init_push_git_proj.py default.xml
    此脚本会解析default.xml里的name和path,
    会先分析本地path是否为空目录,如果是空目录的话则会创建一个“.gitignore”文件,防止空目录提交失。
    然后初始化本地path路径的代码,作为git工程提交到服务器端的name指定路径下。

测试

  找一个干净的地方,用 repo init -u [服务端manifest.git地址]
  然后 repo sync,此时应该可以同步所有git子工程。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值