编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122514538
目录
前言:
第1章 github server、gitee server、git local混合架构
1.1 架构示意图
1.2 理论基础
第2章 建立混合架构案例-A
2.1 需求
2.2 前提条件
2.3 仓库的网络架构方案
2.4 方案操作步骤(以yolov5为例)
第3章 建立混合架构案例-B
3.1 需求
3.2 前提条件
3.3 仓库的网络架构方案
3.4 操作步骤
前言: 有时候,我们需要使用他人的开源的repo项目作为基线,开发自己项目的独立于基线的代码,这些代码只限于项目本身,无法回归基线,但是我们有希望时刻能够同步基线的新的功能和新的改动。
这就需要用到多repo混合代码管理架构来组织和管理你的代码了。
如果一开始没有考虑到这种混合架构,后期手工维护代码的成本就比较高。
本文就是探讨这种混合架构的。

第1章 github server、gitee server、git local混合架构 1.1 架构示意图
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片

1. 本地 repo 和远程 repo 是独立存在的 2. 可以建立本地 repor 与远程 repo 之间的 关联 关系,如下就是本地库与github和gitee的关联关系 默认: originhttps://github.com/tianqixin/runoob-git-test (fetch)
originhttps://github.com/tianqixin/runoob-git-test (push) 其中,origin表示起源,本源,指示本地仓库的远程操作,起源于(对应到)哪个远程的仓库。它是remote命令,如fetech或push,在没有指明远程仓库名称的情况下,默认使用orign名称,查找对应的远程仓库的链接。 我们可以修改远程仓库的别名,如下图所示: 修改后:

git remote -v giteegit@gitee.com:imnoob/runoob-test.git (fetch) giteegit@gitee.com:imnoob/runoob-test.git (push) githubgit@github.com:tianqixin/runoob.git (fetch) githubgit@github.com:tianqixin/runoob.git (push)

3. 并非所有的远程 repo 都需要映射到本地 4. 并非所有的本地 repo 都需要映射到远程 5. 一个本地 repo 可以同时映射到 github 和 gitee 6. 一个远程的 repo 也以被多个本地 repo 映射 1.2 理论基础
https://www.runoob.com/git/git-gitee.html
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片


第2章 建立混合架构案例-A 2.1 需求
(1)为了提升效率,基于github某一个已有的repo(如yolo v5)做二次开发 :使用github管理基线代码)
(2)二次开发的新增代码需要有本地的版本管理:使用git进行项目代码本地版本管理
(3)二次开发需要多人协作开发,因此需要通过远程仓库进行协作:使用gitee协作国内开发人员,当然,也可以使用github协作,这里选择gitee,可以建立远程私人仓库。

2.2 前提条件
项目开发人员使用的远程仓库与Base的仓库不在同一个git server上,
比如一个在github,一个在gitee上。

2.3 仓库的网络架构方案
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片

通过gitee-user-A的本地仓库进行开发代码与baseline代码的同步。

2.4 方案操作步骤(以yolov5为例)
步骤1:在github上获得yolov5的githu 连接
https://github.com/ultralytics/yolov5.git
步骤2:在Git Bash命令行下建立gitee和github公共目录
$ mkdir git
步骤3:从github上Clone yolv5的代码,建立本地仓库
$ git clone https://github.com/ultralytics/yolov5.git
步骤4:检查本地仓库的状态
$ cd yolov5
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
$ git remote -v
originhttps://github.com/ultralytics/yolov5.git (fetch)
originhttps://github.com/ultralytics/yolov5.git (push)
解读:从上述返回状态可以看出,本地仓库git/yolov5的fetch和push操作,关联的远程仓库为:https://github.com/ultralytics/yolov5.git.
orign是默认的远程仓库的别名。
$ git fetch
fetch命令在不指定远程仓库,则采用默认的orign名称对应的远程仓库。
步骤5:通过web,在gitee server上创建空的仓库,并获取链接
https://gitee.com/hiwangwenbing/yolov5-app.git
步骤6:移除默认的远程仓库链接
$ git remote rm origin
$ git remote -v
备注:此时默认的orign的仓库为空
步骤7:把默认的远程仓库修改为新创建就的gitee仓库
$ git remote add origin https://gitee.com/hiwangwenbing/yolov5-app.git
$ git remote -v
originhttps://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
originhttps://gitee.com/hiwangwenbing/yolov5-app.git (push)

步骤8:为本地仓库增加新的github和gitee仓库链接
$ git remote add gitee https://gitee.com/hiwangwenbing/yolov5-app.git
$ git remote add github https://github.com/ultralytics/yolov5.git
$git remote -v
giteehttps://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
giteehttps://gitee.com/hiwangwenbing/yolov5-app.git (push)
githubhttps://github.com/ultralytics/yolov5.git (fetch)
githubhttps://github.com/ultralytics/yolov5.git (push)
originhttps://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
originhttps://gitee.com/hiwangwenbing/yolov5-app.git (push)
备注:
目前该本地仓库被同时关联到gitee和github上远程仓库,名字分别为gitee和github,也可以取其他名字,默认关联修改为gitee的远程仓库,名字为origin.
步骤9:自动关联与gitee的SSL连接的证书
$cd ..#回到当前本地仓库的父目录
$ git clone https://gitee.com/hiwangwenbing/yolov5-app.git
备注:虽然,此时远程仓库为空,没有可以clone的仓库,但为本地的机器与远程的gitee准备SSL连接的安全证书,如果没有这个步骤,需要在gitee server上添加SSL的安全证书,比较麻烦。

步骤10:把本地仓库的代码push到gitee的远程仓库中,以便于多人合作开发
$ git push github masterEnumerating objects: 7693, done. Counting objects: 100% (7693/7693), done. Delta compression using up to 8 threads Compressing objects: 100% (2438/2438), done. Writing objects: 100% (7693/7693), 10.15 MiB | 10.58 MiB/s, done. Total 7693 (delta 5246), reused 7693 (delta 5246), pack-reused 0 remote: Resolving deltas: 100% (5246/5246), done. remote: Powered by GITEE.COM [GNK-6.2] To https://gitee.com/hiwangwenbing/yolov5-app.git * [new branch]master -> master 备注:步骤把本地仓库的内容上传到远程仓库中

步骤11:通过命令行查看本地和远程仓库的状态
$ git status
On branch master
nothing to commit, working tree clean

$ git remote show gitee
* remote gitee
Fetch URL: https://gitee.com/hiwangwenbing/yolov5-app.git
PushURL: https://gitee.com/hiwangwenbing/yolov5-app.git
HEAD branch: master
Remote branch:
master new (next fetch will store in remotes/gitee)
Local ref configured for 'git push':
master pushes to master (up to date)
步骤12:通过网页参看远程仓库的信息
https://gitee.com/hiwangwenbing/yolov5-app
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片

备注:此时该仓库处于私有状态,其他合作人员还看到不此代码,需要把相关的开发人员添加开发者. 对于免费的用户,最大只能添加5个开发者。

步骤13:添加合作开发的开发者
管理-> 添加仓库成员
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片


步骤14:分享远程仓库链接
https://gitee.com/hiwangwenbing/yolov5-app.git
其他成员可以通过该链接clone远程仓库的代码,修改远程仓库的代码了。

步骤15:在本地添加、修改代码,然后上传代码
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片


(1)检测当前文件的修改状态
$ git status -s
M utils/general.py
?? History.txt
?? data/steelball.yaml
?? data/steelcycle.yaml
?? detect-steelball.py
?? tools/
根据这些信息,可以看出,工作区的变化(无版本管理信息)
修改了一个已有的文件:utils/general.py
新增加文件:History.txt, data/steelball.yaml,data/steelcycle.yaml,detect-steelball.py
新增加一个目录:tools/
(2)把工作变化的、需要版本管理的文件添加到版本控制的临时区(有临时版本信息)
$ git addutils/general.py History.txt data/steelball.yaml data/steelcycle.yaml detect-steelball.py
$ git status -s
AHistory.txt
Adata/steelball.yaml
Adata/steelcycle.yaml
Adetect-steelball.py
Mutils/general.py

(3)设置提交代码时的用户信息
开始前我们需要先设置提交的用户信息,包括用户名和邮箱:
$ git config --global user.name 'robin_wang_wenbing' $ git config --global user.email robin_wang_wenbing@qq.com

如果去掉 --global 参数只对当前仓库有效。

(4)正式提交所有修改的文件到本地仓库
$ git commit -m 'the first version of steelball'

[master ed0e364] the first version of steelball
5 files changed, 353 insertions(+)
create mode 100644 History.txt
create mode 100644 data/steelball.yaml
create mode 100644 data/steelcycle.yaml
create mode 100644 detect-steelball.py
$git status -s
?? tools/
备注:除了tools目录,全部提交

(5)把本地的仓库的内容更新到远程仓库
$git remote -v
giteehttps://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
giteehttps://gitee.com/hiwangwenbing/yolov5-app.git (push)
githubhttps://github.com/ultralytics/yolov5.git (fetch)
githubhttps://github.com/ultralytics/yolov5.git (push)
originhttps://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
originhttps://gitee.com/hiwangwenbing/yolov5-app.git (push)
这里有三个远程仓库,选择gitee或origin都可以
有两种方法向远程仓库提交代码:
方法1:
$git push -u gitee master
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 6.21 KiB | 1.55 MiB/s, done.
Total 9 (delta 5), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/hiwangwenbing/yolov5-app.git
436ffc4..ed0e364master -> master
Branch 'master' set up to track remote branch 'master' from 'gitee'.
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片


方法2:
$ git remote add gitee https://gitee.com/hiwangwenbing/yolov5-app.git


至此,完成了github仓库、gitee仓库、git本地仓库混合部署的架构。

第3章 建立混合架构案例-B 3.1 需求
(1)为了提升效率,基于github/gitee某一个已有的repo(如yolo v5)做二次开发 :使用github/Gitee管理基线代码)
(2)二次开发的新增代码需要有本地的版本管理:使用git进行项目代码本地版本管理
(3)二次开发需要多人协作开发,因此需要通过远程仓库进行协作:使用github/gitee协作国内开发人员.

3.2 前提条件
项目开发人员使用的远程仓库与Base的仓库在同一个git server上,比如都在github或都在gitee上。

3.3 仓库的网络架构方案
编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)
文章图片

通过github-user-A的远程仓库进行开发代码与baseline代码的同步

3.4 操作步骤
......................
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
【编程-开发工具|[编程开发工具-6](github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤)】本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122514538

    推荐阅读