git 设置远端仓库

2020-12-04  本文已影响0人  Chaos_John

欢迎转载,但请在开头或结尾注明原文出处【blog.chaosjohn.com】

前段时间,公司开了一个新项目,买了另一家公司的源码做二次开发。

项目进行了几天后,我突然听到参与开发的几个同学在讨论,关于 “不想把我们修改的版本推给他们”。

我就顿感奇怪,买了源码还要遵循他们的开源协议?

我跑过去问问怎么回事,一听就乐了。原来对方公司将代码部署在私有 git 服务器上,给了我们账号密码以供拉取源码。对方承诺对产品做后续的更新维护,新版本也发布在该 git 仓库上。但是我们对源码做二次开发,会进行很多改动,又不想把我们的改动推给他们。

啊这。。。明显是对 git 不熟悉啊,而且还不是一个同学,应该值得反省。平日里起草招聘需求时都会把 git 作为一个必备的技能项,结果轮到自己身上,却只略知皮毛。

我先代入他们的思维反过来推理:为什么一定要 push,他们的代码只做 pull,拉取新版合并到本地不就行了么。哦,原来不止一个小伙伴在协同开发,相互间要共享改动,比如 A同学 的改动 pushB同学 pull 后才能看到。那 push 后不就推送到了对方公司的 git 服务器了么。

所以小伙伴们还停留在一个 git 仓库只有一个远端的层面。

其实一个 git 仓库是可以配置多个远端 remote


我们举个例子来模拟一下,我们从 github 上随便 clone 一个项目下来

$ git clone git@github.com:taniarascia/takenote.git
Cloning into 'takenote'...
remote: Enumerating objects: 114, done.
remote: Counting objects: 100% (114/114), done.
remote: Compressing objects: 100% (92/92), done.
remote: Total 4672 (delta 44), reused 50 (delta 20), pack-reused 4558
Receiving objects: 100% (4672/4672), 10.13 MiB | 780.00 KiB/s, done.
Resolving deltas: 100% (2990/2990), done.

我们查看一下 git配置

$ cd takenote
$ cat .git/config
[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
  precomposeunicode = true
[remote "origin"]
  url = git@github.com:taniarascia/takenote.git
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master

我们可以看到


接下来去 码云Gitee 上去创建一个 空的 私有仓库,模拟存放我们的 已修改源码

创建一个空仓库

创建后会跳转到仓库主页


初始化空仓库

我们可以看到,对于已存在的本地仓库,是可以直接推送到 码云

git remote add origin git@gitee.com:ChaosJohn/takenote.git
git push -u origin master

解释一下第一行:添加一个 远端(remote),取名为 origin,设置 远端地址git@gitee.com:ChaosJohn/takenote.git

可以预见,如果直接执行,肯定会报错,先试试:

$ git remote add origin git@gitee.com:ChaosJohn/takenote.git
fatal: remote origin already exists.

报错提示说:名叫 origin 的远端已存在。

那咱就换一个呗,不如取名 gitee 吧,正好寓意这个远端是 码云 的,再次执行 git remote add gitee git@gitee.com:ChaosJohn/takenote.git 无报错。

查看一下配置文件,发现比之前的多了三行

$ cat .git/config
[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
  precomposeunicode = true
[remote "origin"]
  url = git@github.com:taniarascia/takenote.git
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master
[remote "gitee"]
  url = git@gitee.com:ChaosJohn/takenote.git
  fetch = +refs/heads/*:refs/remotes/gitee/*

其实直接将这三行添加到 .git/config 文件内,等同与执行 git remote add 命令。


所以正确的 git 工作流程为:

  1. 从当前 master 分支创建新的 开发分支 git checkout -b dev
  2. dev 分支上做二次开发,提交并且推送到 码云远端 git push -u gitee dev
  3. 如果原项目出更新内容了,先切回到 master 分支,然后从 github远端 拉取新代码 git pull origin master
  4. 再将 master 分支合并到 dev 分支
  5. 切换到 dev 分支,继续做二次开发以及推送到码云,如此循环迭代

所以建议所有开发的小伙伴们,有时间要多去学习和熟悉 git。毕竟 工欲善其事 必先利其器 嘛!!!

上一篇 下一篇

猜你喜欢

热点阅读