四、Git远程仓库
目录
- 前言
- [1. 新建远程仓库](#1. 新建远程仓库)
- [2. 克隆远程仓库到本地](#2. 克隆远程仓库到本地)
- [1)以 HTTPS 的方式克隆](#1)以 HTTPS 的方式克隆)
- [2)以 SSH 的方式克隆](#2)以 SSH 的方式克隆)
- [3. 本地分支与远程分支连接的建立与销毁](#3. 本地分支与远程分支连接的建立与销毁)
- [4. 推送本地提交代码到远程仓库](#4. 推送本地提交代码到远程仓库)
- [5. 拉取远程仓库代码到本地](#5. 拉取远程仓库代码到本地)
- [理解 git pull](#理解 git pull)
- [6. 忽略特殊文件(.gitignore)](#6. 忽略特殊文件(.gitignore))
- [7. 标签](#7. 标签)
- [8. 解决本地仓库与远程仓库冲突](#8. 解决本地仓库与远程仓库冲突)
前言:
Git是分布式版本控制系统。

Git 中每个客户端都是一个完整的版本库。即使"中央服务器"(如 Gitee)宕机,任何一个成员的本地备份均可瞬间重建服务器。
"中央服务器"即远程仓库,我们不用自己创建中央服务器,各路大神已经帮我们构建好了平台,即github 或gitee平台,可以直接在平台上面创建远程仓库,代码就可以托管于此了。
1.新建远程仓库
1)首先注册一个gitee账号
2)在主页点击新建仓库

3)进入创建仓库界面

4)创建完仓库的初始界面

2.克隆远程仓库到本地
1)以HTTPS的方式克隆
克隆远程仓库:
指令 :git clone https_url
注意 :不能 在本地已有.git的目录下,克隆远程仓库。克隆远程仓库到本地后,自动建立了本地master,与远程origin/master的连接。



.git是本地的版本库。
查看远程仓库名:
命令 :git remote [-v]
- -v:显示远程仓库 URL
注意 :需进入到clone下来的远程仓库中,才能查看到远程仓库名,默认是origin

git romete -v发现有fetch 和push 权限,说明本地可以拉取远程仓库的代码和把本地仓库的代码推送至远程。

2)以SSH的方式克隆
因为SSH协议是使用公钥加密和公钥登录的机制,所以我们要想使用SSH方式克隆代码,必须要将本地服务器上的公钥放到gitee上管理,才能clone。
a.在本地服务器上创建SSH Key
在用户主目录(home/用户)下,看看有没有.ssh目录,如果有,再看看这个目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果已经有了,可直接跳到下一步。如果没有,需要创建SSH Key:
创建SSH Key :ssh-keygen -t rsa -C "邮箱"
其中填写的邮箱是SSH 公钥的注释(comment)信息,用于标识这把密钥是谁生成的,并不会参与 SSH 身份认证,只是作为备注存在。但是还是推荐大家使用Gitee上绑定的邮箱。
shell
ssh-keygen -t rsa -C "Gitee/github邮箱"
输入该指令后,在./ssh目录应该有 id_rsa 和 id_rsa.pub 这两个文件了。

其中后缀是.pub的是公钥,没带.pub是私钥。记得cat 公钥文件查看公钥,并一字不纳的复制下来。
注意:SSH Key是用户级的。
b.配置公钥到Gitee上


c.根据SSH协议将仓库克隆下来


3.本地分支与远程分支连接的建立与销毁
为什么要建立连接?
因为一旦建立了连接,在使用git push向远程推送代码的时候,就不用指明向哪个远程仓库推送了(git push origin dev:dev ),这个连接关系同时被 git push 和 git pull 使用。
如何建立连接?
情况一:本地和远程都还没有分支

上图显示:一开始,远程和本地都没有dev分支,于是在本地创建了一个dev分支,并在该分支上开发了一些代码,最后将它推送到了远程仓库,但是远程没有dev分支,所以要加一个-u选项,表示建立本地 dev 和远程 origin/dev 的关联,由于本地分支与远程分支一样,所以可以简写为dev。
因此,对于此情况,可以在第一次 push 时建立:git push -u origin dev,这条命令做了两件事。
- 将dev分支推送至远程仓库
- 建立本地 dev 和远程 origin/dev 的关联关系。

情况二:本地和远程有分支,但没有关联

当本地和远程分支都存在,需手动建立连接 。命令:git branch --set-upstream-to=origin/远程分支名 本地分支名。
- --set-upstream-to:指定跟踪哪个远程分支

连接断开:
- 删除本地分支 :
删除本地分支,连接即断开了。 - 删除远程分支:
shell
git push origin --delete 要删除的远程分支
情况三:本地没有分支,但远程有分支

在创建本地分支时,直接关联远程分支。
命令 :git checkout -b 要创建的本地分支名 要关联的远程分支名

4.推送本地提交代码到远程仓库
命令 :git push origin 本地分支名:远程分支名
在本地修改代码,并提交到本地版本库后。比如:我将README.md文件改动一下,并提交到本地版本库。

此时,本地仓库领先于远程仓库,就可以向远程提交代码了 。

推送至远程 :

5.拉取远程仓库代码到本地
命令 :git pull origin 本地分支名:远程分支名
会做两件事:
- 获取远程分支状态信息:
git fetch - 合并代码:
git merge
当远程仓库状态领先于 本地仓库(其他开发者向远程仓库push了代码),就能将远程仓库代码拉取到本地,目的就是为了看到最新的代码。

开发者二 向远程仓库push了代码。

开发者一 从远程拉取最新的代码到本地:

理解git pull:
git pull=git fetch+git merge
- git fetch的作用:将远程仓库的分支状态同步到本地的跟踪分支。相当于远程仓库的镜像,不修改本地的代码。
- git merge:合并两个分支的代码历史。

6.忽略特殊文件(.gitignore)
1)什么是忽略配置文件?
.gitignore 是 Git 提供的一个文件忽略规则配置文件。它里面写的是:哪些文件、目录不需要 Git 跟踪。
2)为什么要用忽略配置文件
- 禁止一些无用的文件上传,比如运行Python后,生成的__pycache__文件。
- 保护敏感信息:比如不要上传数据库密码的配置文件
- 避免提交本地环境文件,因为不同的开发人员本地环境不同。
3)如何使用忽略配置文件
- 在本地创建
.gitignore文件 - 编写忽略规则
比如 :
**表示匹配任意深度目录

创建出a.so、b.so两个文件,看看git是否没有忽略a.so文件。


注意:
已经被Git跟踪的文件,改 .gitignore 不会自动生效,要从 Git 索引里拿掉。
mysql
# 单个文件
git rm --cached 路径/文件名
# 整个目录
git rm -r --cached 路径/目录名
查看文件被忽略原因:
比如当忽略配置文件中写了很多的忽略,但是在上传代码时,有些文件被忽略,我们想知道原因,就可以使用git提供的命令:git check-ignore -v 文件名。
比如:查看b.so文件为什么被忽略 ?

7.标签
操作标签
标签tag,是针对某次的commit打上一个标签,相当于起一个别名。
应用场景 :
在项目发布某个版本的时候,针对最后一次commit起一个v1.0的标签来标识里程碑的意义。
作用 :因为commit id是难以记住的,为某个重要的版本打上一个tag,如果以后想回退,就很容易回退到之前打上标签的版本了,所以打标签,要起一个容易记住,且有意义的名字。
1)对最新的一次打标签
命令 :git tag -a 标签名 -m "对此标签进行描述"
- 默认为最新一次的提交打上标签
- -m 为此次的标签进行描述
查看当前仓库所有的标签
命令 :git tag
查看某个标签的详细信息
命令 :git show 标签名
删除标签
命令 :git tag -d 标签名

2)对历史的某次提交打标签
命令 :git tag -a 标签名 -m "对此标签进行描述" commit_id
推送标签
将本地仓库的标签推送至远程仓库
命令 :git push origin 标签名
比如 :

远程仓库中已有标签:

推送本地所有的标签至远程
命令 :git push origin --tags
删除远程仓库的标签
先要在本地删除,再将删除信息推送至远端。
命令 :git push origin --delete 删除的标签名
比如 :现在本地删除v0.1标签,再将删除信息推送至远程仓库。

查看远程仓库删除情况:

8.解决本地仓库与远程仓库冲突
当本地分支代码与远程分支分支代码发生冲突时 ,需要现将远程仓库的代码拉取到本地,然后手动解决冲突,再此推送。