当前位置:   article > 正文

如何使用repo管理本地私有仓库_怎样repo替换成git管理

怎样repo替换成git管理

目录

1. 引导脚本

2. 搭建仓库

3. repo without gerrit


1. 引导脚本

repo安装前需要首先下载引导脚本,

  1. mkdir ~/bin
  2. PATH=~/bin:$PATH
  3. curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  4. chmod a+x ~/bin/repo

国内用户被GFW屏蔽的话, 可以使用清华大学tuna提供的git-repo镜像替代,

  1. curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
  2. chmod +x repo

打开下载的引导脚本, 在开始可以找到如下信息,

  1. REPO_URL='https://code.google.com/p/git-repo/'
  2. REPO_REV='stable'

这个url是repo本身仓库的地址, 在后续执行"repo init" 的时候会先clone这个仓库. 我们这里可以先将它clone下来, 以便后续将这个仓库推送到自己本地建立的repo仓库里(如果前面下载的是tuna的repo镜像, 这里的url就不是google的地址).

git clone --bare https://code.google.com/p/git-repo/

2. 搭建仓库

有了引导脚本, 就可以搭建仓库了. 这里假设我们在本地已经有了一个git账户, 而且已经将当前账户的ssh public key拷贝到了该git账户下. 我们后续的所有实验, 都是针对本地的git仓库实施的. 实际搭建仓库的时候需要根据远程服务器的具体地址进行修改, 这里不再赘述.

使用repo需要事先建立两个仓库, 一个用来管理repo代码本身, 另一个管理manifest文件.

  1. mkdir git-repo.git
  2. cd git-repo.git
  3. git init --bare
  4. mkdir manifests.git
  5. cd manifests.git
  6. git init --bare

现在我们可以将之前clone好的repo代码仓库, 迁移到我们自己建立的git-repo仓库里.

  1. cd git-repo.git
  2. git push --mirror git@localhost:/home/git/repo-test/git-repo.git

接下来需要编写manifest文件, repo要根据这个文件的信息来管理所有git仓库. 首先需要将前面建好的manifest仓库clone下来, 并在里面建立default.xml文件.

  1. git clone git@localhost:/home/git/repo-test/manifests.git
  2. cd manifests.git
  3. touch default.xml

 写入相应的内容, 并提交到远程,

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <manifest>
  3. <remote name="origin"
  4. fetch="." />
  5. <default remote="origin"
  6. revision="master" />
  7. <project path="repo-demo/foo" name="foo" />
  8. <project path="repo-demo/bar" name="bar" />
  9. </manifest>

 这里假设我们事先有了两个名为foo.git和bar.git的仓库. project项指的就是我们的仓库, path指的是执行"repo sync"后远程仓库被clone下来后的本地路径, name指的是仓库的原始名.

另外, remote项指的是manifests仓库的地址. name指代远程仓库名, fetch指的是url. 这里fetch可以写绝对路径, 也可以写相对路径. 如果你在服务器上的代码仓库, manifests仓库与repo仓库都在同一级目录下(这也是常见做法), 那么fetch地址可以写".", 表示在manifests仓库所在的目录下寻找其他project仓库. repo会自己拼凑出正确的project仓库url.

到目前为止, 我们自己搭建的repo仓库就已经可以使用了, 尝试sync一下,

  1. repo init -u git@localhost:/home/git/repo-test/manifests.git
  2. repo sync
  3. repo start master --all

3. repo without gerrit

通常情况下, 这个repo仓库已经可以正常工作了, 但是对于某些人来说还是存在一个小瑕疵. 因为repo是google用来对AOSP项目进行管理的, 代码提交需要用到gerrit进行审核. 如果你不使用repo的提交功能, 即"repo upload"倒也无所谓. 但是如果使用的话, repo会将代码先提至gerrit. 然而某些情况下, 我们的私有项目不见得使用gerrit审核提交, 或者干脆不使用任何审核工具, 这样repo的批量提交功能就没法用了.

解决的方法是使用某些改造过的repo版本, 例如提供额外的"repo push"功能, 可以替代"repo upload"直接上传代码. 在github上就有类似的项目, https://github.com/ossxp-com/repo/

我们可以下载这个修改过的引导脚本, 并clone该repo仓库,

curl https://raw.githubusercontent.com/ossxp-com/repo/master/repo > ~/bin/repo

 但是, 这个项目也有点小问题, 就是当你执行"repo init"的时候, 会提示你gpg签名过期, 然后无法继续了. 原因是作者在修改后增加了一个新的git tag, 并打上了自己的gpg签名, 然后这个签名使用的密钥是有期限的. 不幸的是到目前为止, 该签名已经expired了. 因此在git clone时会因为verify tag signature failed, 导致clone失败.

解决的办法很简单, 就是重新制作一个签名, 用新签名打一个全新的tag上去.

1. 首先要安装gpg, 这个就不赘述了.

2. 然后生成新的gpg key, 记住密钥最好选择永不过期.

  1. [devilmaycry@localhost ~]$ gpg --gen-key
  2. gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
  3. This is free software: you are free to change and redistribute it.
  4. There is NO WARRANTY, to the extent permitted by law.
  5. 请选择您要使用的密钥种类:
  6. (1) RSA and RSA (default)
  7. (2) DSA and Elgamal
  8. (3) DSA (仅用于签名)
  9. (4) RSA (仅用于签名)
  10. 您的选择?
  11. RSA 密钥长度应在 1024 位与 4096 位之间。
  12. 您想要用多大的密钥尺寸?(2048)
  13. 您所要求的密钥尺寸是 2048 位
  14. 请设定这把密钥的有效期限。
  15. 0 = 密钥永不过期
  16. <n> = 密钥在 n 天后过期
  17. <n>w = 密钥在 n 周后过期
  18. <n>m = 密钥在 n 月后过期
  19. <n>y = 密钥在 n 年后过期
  20. 密钥的有效期限是?(0)
  21. 密钥永远不会过期
  22. 以上正确吗?(y/n)y
  23. You need a user ID to identify your key; the software constructs the user ID
  24. from the Real Name, Comment and Email Address in this form:
  25. "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
  26. 真实姓名:vector03
  27. 电子邮件地址:mmzsmm@163.com
  28. 注释:
  29. 您选定了这个用户标识:
  30. “vector03 <mmzsmm@163.com>”
  31. 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o
  32. 您需要一个密码来保护您的私钥。
  33. 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
  34. 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
  35. 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
  36. 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
  37. gpg: 密钥 924C9914 被标记为绝对信任
  38. 公钥和私钥已经生成并经签名。
  39. gpg: 正在检查信任度数据库
  40. gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
  41. gpg: 深度:0 有效性: 2 已签名: 0 信任度:0-,0q,0n,0m,0f,2u
  42. pub 2048R/924C9914 2018-10-16
  43. 密钥指纹 = B491 7B9A D9BF CF18 32F3 308D 95DA F103 924C 9914
  44. uid vector03 <mmzsmm@163.com>
  45. sub 2048R/549EE107 2018-10-16

 这里生成了新的gpg密钥, 密钥id为924C9914.

3. 将gpg密钥环导出, 将导出的代码粘贴到repo引导文件里, 位置在原作者的令牌环下面即可.

  1. [devilmaycry@localhost ~/repo-demo]$ gpg --armor --export 924C9914
  2. -----BEGIN PGP PUBLIC KEY BLOCK-----
  3. Version: GnuPG v2.0.22 (GNU/Linux)
  4. mQENBFvF1WkBCADhSfJ8gXO4utbYpLgn2AgF77XzMLWOupF97HkeSPN1qUBgaFxP
  5. zw/nnBU+g/vp0EPb3o3ZtSfjVVjYzP4DQwH2DU4ItrRcHXAPbQFvP/q3GwpAoAhV
  6. wfI6ppWTSXi3eCJ5faujqmpAz3KYRD/0lZ3hKiEzOQfbRG2EOZEHwXqcW9tx3E2b
  7. DYo0GWaIGj9GDGKPJjWzAJl3llevv3G8nl4oOZTrEjeELvU7OF0oeryzmiAcs4Qj
  8. CyHsEHhx2LKuTGvboHBYoouPL9Y0vebPaOkeZUhqHPv9mMX3ANyK1tIYHXHqASuL
  9. 6gEZrvWdq6zDvo1RRC52dbelQ8napUobVmq3ABEBAAG0GXZlY3RvcjAzIDxtbXpz
  10. bW1AMTYzLmNvbT6JATkEEwECACMFAlvF1WkCGwMHCwkIBwMCAQYVCAIJCgsEFgID
  11. AQIeAQIXgAAKCRCV2vEDkkyZFI+HB/9X2xJcuI1Z08uKuEQFKxp05kAbjHiTAUNK
  12. NN6xYZp4jOtnOfNEuWLDv0gn9QCZqofA6ztXjaWN9y83KyBsRLuVBJ5Ch3pguJsh
  13. /2IMSckb4ZIUY4R8EyXow5epx/gmZ6wZ5AfirSrboGSTJUjxOB6DrJ//wy+x25M5
  14. Rnv8qTbWSYSkoldlLWLtP2KjetgGMc3562D5fE6o4XV5OoTKKmUTrDMhgGl52Xdp
  15. QdTmgqI2l41FF9rVRFuEGblQRsuH4wPPR+Q3lBww4VjHEAzqEbYenOH6Wnj701OS
  16. B7rUJznpt41kgb4+T8ltLyIuZ7vVvgogeXjvQ+JK/iGGDMgjjEb8uQENBFvF1WkB
  17. CACkQcuO7cA9XDjAMDHFo8ikbq+3RMRrrCDVTB2ssfhoMGZb2HDFx692zBb5YRsB
  18. 4ZHhIRRsMyo2kyma7icLoMzgAvJkRqMuFpLogjRFZetPBRDHc6WWo5UWtym85+XS
  19. M/tbrrxv+OBA/Hi0I+xBLSzcdIr396swLQHrHEwVcp0r9Gu1vTwMNBKo9/+XbqUT
  20. LYIC6r+Xu29MeOTC6WnqM2aeKpu5H3z/+b7elZ3H+SJG1UajMGo+P7LEhQ+hjeXo
  21. Sv0BsTAP1ZGglzsxgntC+OQhD+RpcvFkrUV7cXWrQtKBmpffucpm0yGaVA+KL4JV
  22. PwJzWn6QggNy///ZryDH+UAtABEBAAGJAR8EGAECAAkFAlvF1WkCGwwACgkQldrx
  23. A5JMmRTC+QgArCCh7Mr0evLc91cFcqk5ZJaUR2eLuwymM9SaPUD+lIKW4FJb8Aoi
  24. wowCWB2RU8ZSmTAzKyvMSrzqejkM8bNOH0JnrvSYAbiEoTFCdsINpRZAwmmjOhi/
  25. xXtcPOiPliRswIj/9te8sOvs1rqgWwTLCNzIA9HxFAxP4qCN543xdzx+RwSJt4JI
  26. goULnrkJYNEjXc8z78ljDI3XLSz4NC2dpNaBOygR6KKl5w/kiGTqk8YKLYceeqgB
  27. 88dyZVTWI2Ear0TV06/tXcGZDU2hYDtt14HHlkjskipNF1pIf1gQJ6MPtc/abJ/V
  28. MBNq5NM2w2HJaSPdA05BRAClIhTA33gHaA==
  29. =DHIH
  30. -----END PGP PUBLIC KEY BLOCK-----

4. 最后用该密钥签名一个新的tag, 这里我们增加了一个名为v1.7.7.6-vector03的tag. 然后push修改后的repo仓库.

git tag -u 924C9914 -s v1.7.7.6-vector03  b5d66ba

这样就大功告成了.

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/636668
推荐阅读
相关标签
  

闽ICP备14008679号