[编程开发工具-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张图片

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

第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本地仓库混合管理的架构与详细实现步骤_第3张图片

通过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
origin  https://github.com/ultralytics/yolov5.git (fetch)
origin  https://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 

origin  https://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
origin  https://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

gitee   https://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
gitee   https://gitee.com/hiwangwenbing/yolov5-app.git (push)
github  https://github.com/ultralytics/yolov5.git (fetch)
github  https://github.com/ultralytics/yolov5.git (push)
origin  https://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
origin  https://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 master

Enumerating 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
  Push  URL: 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本地仓库混合管理的架构与详细实现步骤_第4张图片

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

步骤13:添加合作开发的开发者

管理-> 添加仓库成员

[编程开发工具-6]:github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤_第5张图片

步骤14:分享远程仓库链接

https://gitee.com/hiwangwenbing/yolov5-app.git

其他成员可以通过该链接clone远程仓库的代码,修改远程仓库的代码了。

步骤15:在本地添加、修改代码,然后上传代码

[编程开发工具-6]:github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤_第6张图片

(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 add  utils/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 [email protected]

如果去掉 --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   https://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
gitee   https://gitee.com/hiwangwenbing/yolov5-app.git (push)
github  https://github.com/ultralytics/yolov5.git (fetch)
github  https://github.com/ultralytics/yolov5.git (push)
origin  https://gitee.com/hiwangwenbing/yolov5-app.git (fetch)
origin  https://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..ed0e364  master -> master
Branch 'master' set up to track remote branch 'master' from 'gitee'.
[编程开发工具-6]:github仓库、gitee仓库、git本地仓库混合管理的架构与详细实现步骤_第7张图片

 

方法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本地仓库混合管理的架构与详细实现步骤_第8张图片

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

3.4 操作步骤

......................


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122514538

你可能感兴趣的:(编程-开发工具,git,github,架构,gitee,混合)