作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:/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 架构示意图
1. 本地 repo 和远程 repo 是独立存在的 2. 可以建立本地 repor 与远程 repo 之间的关联关系,如下就是本地库与github和gitee的关联关系默认: origin /tianqixin/runoob-git-test(fetch)origin /tianqixin/runoob-git-test(push) 其中,origin表示起源,本源,指示本地仓库的远程操作,起源于(对应到)哪个远程的仓库。它是remote命令,如fetech或push,在没有指明远程仓库名称的情况下,默认使用orign名称,查找对应的远程仓库的链接。 我们可以修改远程仓库的别名,如下图所示: 修改后:
git remote -vgiteegit@:imnoob/runoob-test.git (fetch)giteegit@:imnoob/runoob-test.git (push)githubgit@:tianqixin/runoob.git (fetch)githubgit@:tianqixin/runoob.git (push)
3. 并非所有的远程 repo 都需要映射到本地 4. 并非所有的本地 repo 都需要映射到远程 5. 一个本地 repo 可以同时映射到 github 和 gitee 6. 一个远程的 repo 也以被多个本地 repo 映射
1.2 理论基础
/git/git-gitee.html
第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仓库的网络架构方案
通过gitee-user-A的本地仓库进行开发代码与baseline代码的同步。
2.4 方案操作步骤(以yolov5为例)
步骤1:在github上获得yolov5的githu 连接
/ultralytics/yolov5.git
步骤2:在Git Bash命令行下建立gitee和github公共目录
$ mkdir git
步骤3:从github上Clone yolv5的代码,建立本地仓库
$ git clone /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
origin /ultralytics/yolov5.git (fetch)
origin /ultralytics/yolov5.git (push)
解读:从上述返回状态可以看出,本地仓库git/yolov5的fetch和push操作,关联的远程仓库为:/ultralytics/yolov5.git.
orign是默认的远程仓库的别名。
$ git fetch
fetch命令在不指定远程仓库,则采用默认的orign名称对应的远程仓库。
步骤5:通过web,在gitee server上创建空的仓库,并获取链接
/hiwangwenbing/yolov5-app.git
步骤6:移除默认的远程仓库链接
$ git remote rm origin
$ git remote -v
备注:此时默认的orign的仓库为空
步骤7:把默认的远程仓库修改为新创建就的gitee仓库
$ git remote add origin /hiwangwenbing/yolov5-app.git
$ git remote -v
origin /hiwangwenbing/yolov5-app.git (fetch)
origin /hiwangwenbing/yolov5-app.git (push)
步骤8:为本地仓库增加新的github和gitee仓库链接
$ git remote add gitee /hiwangwenbing/yolov5-app.git
$ git remote add github /ultralytics/yolov5.git
$ git remote -v
gitee /hiwangwenbing/yolov5-app.git (fetch)
gitee /hiwangwenbing/yolov5-app.git (push)
github /ultralytics/yolov5.git (fetch)
github /ultralytics/yolov5.git (push)
origin /hiwangwenbing/yolov5-app.git (fetch)
origin /hiwangwenbing/yolov5-app.git (push)
备注:
目前该本地仓库被同时关联到gitee和github上远程仓库,名字分别为gitee和github,也可以取其他名字,默认关联修改为gitee的远程仓库,名字为origin.
步骤9:自动关联与gitee的SSL连接的证书
$ cd .. #回到当前本地仓库的父目录
$ git clone/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 threadsCompressing 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 0remote: Resolving deltas: 100% (5246/5246), done.remote: Powered by [GNK-6.2]To /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: /hiwangwenbing/yolov5-app.git
Push URL: /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:通过网页参看远程仓库的信息
/hiwangwenbing/yolov5-app
备注:此时该仓库处于私有状态,其他合作人员还看到不此代码,需要把相关的开发人员添加开发者. 对于免费的用户,最大只能添加5个开发者。
步骤13:添加合作开发的开发者
管理-> 添加仓库成员
步骤14:分享远程仓库链接
/hiwangwenbing/yolov5-app.git
其他成员可以通过该链接clone远程仓库的代码,修改远程仓库的代码了。
步骤15:在本地添加、修改代码,然后上传代码
(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
A History.txt
A data/steelball.yaml
A data/steelcycle.yaml
A detect-steelball.py
M utils/general.py
(3)设置提交代码时的用户信息
开始前我们需要先设置提交的用户信息,包括用户名和邮箱:
$ git config --global user.name 'robin_wang_wenbing'$ git config --global user.email robin_wang_wenbing@
如果去掉 --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
gitee /hiwangwenbing/yolov5-app.git (fetch)
gitee /hiwangwenbing/yolov5-app.git (push)
github /ultralytics/yolov5.git (fetch)
github /ultralytics/yolov5.git (push)
origin /hiwangwenbing/yolov5-app.git (fetch)
origin /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 [GNK-6.2]
To /hiwangwenbing/yolov5-app.git
436ffc4..ed0e364 master -> master
Branch 'master' set up to track remote branch 'master' from 'gitee'.
方法2:
$ git remote addgitee /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 仓库的网络架构方案
通过github-user-A的远程仓库进行开发代码与baseline代码的同步
3.4 操作步骤
......................
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:/HiWangWenBing/article/details/122514538
如果觉得《[编程开发工具-6]:github仓库 gitee仓库 git本地仓库混合管理的架构与详细实现步骤》对你有帮助,请点赞、收藏,并留下你的观点哦!