在学本地操作时,我们的代码只存在自己的电脑上。但实际开发中,你可能需要和同事协作,或者担心电脑坏了代码丢失------ 远程仓库就是为解决这些问题而生的。Git远程管理,不仅能管理自己的代码,还能和团队一起高效协作。

一、理解分布式版本控制系统
我们目前锁说的所有内容(工作区、暂存区、版本库等等),都是在本地!!!也就是在你的笔记本或者计算机上 。 而我们的Git其实是分布式版本控制系统!
可以理解为,我们每个人的电脑上都是一个完整的版本库 ,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人的电脑上都有一个完整的版本库,那么多人如何协作,比方说,自己电脑上改了文件A,你的同事也在他的电脑上改了文件A , 此时,你们两之间,只需要把各自的推送给对方,就可以互相看到对方的修改了!!!

- Git和我们之前用过的SVN有什么不同?
集中式版本控制系统(如SVN) :有一个中央服务器,所有人从中央服务器获取代码,修改后再提交到中央服务器。如果中央服务器宕机,所有人都无法工作,并且一旦服务器数据丢失,整个项目的历史就全没了。
分布式版本控制系统(如Git) :每个人的电脑上都有一个完整的版本库。你可以离线工作,随时提交。当需要协作时,只需要把自己的修改推送给对方,或者从对方那里拉取修改。
- 分布式版本控制系统的安全性要高得多 , 因为每个人电脑都有完整的版本库,某一个人的电脑坏了不要紧,随便从其他人哪里复制一个就可以了~
- 在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本的修改,因为为可能你们不在同一个局域网内 , 两台电脑互相访问不了。也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有⼀台充当"中央服务器"的电脑,但这个服务器的作用仅仅 是用来方便"交换"大家的修改,没有它大家也⼀样干活,只是交换修改不⽅便而已。
- 有了这个"中央服务器"的电脑,这样就不怕本地出现什么故障了(比如运气差,硬盘坏了,上面的所有东西全部丢失,包括git的所有内容)
二、远程仓库
2.1 为什么需要远程仓库?
-
备份代码:防止本地硬盘损坏导致代码丢失。
-
团队协作:多人可以基于同一个代码库并行开发,互相分享代码。
-
代码托管:方便在任何地方获取最新代码。
2.2 选择远程仓库平台
目前主流的Git代码托管平台有:
-
GitHub:国外平台,全球最大开源社区。
-
Gitee(码云):国内平台,速度快,对中文用户友好。
-
GitLab:支持私有部署,企业常用。
本文以Gitee为例进行讲解。
2.3 新建远程仓库
https://github.com/ 比较慢 , https://gitee.com/ 用这个做演示
- 新建仓库

- 填写基本信息

- 创建成功

- 创建成功后,我们可以对远程仓库进行一个基本的设置:开源or私有

- 从创建好的远程仓库中我们便能看到,之前在本地学习过的分支,也存在于远程仓库中并被管理起来 了。刚创建的仓库有且只有一个默认的master分支。

三、克隆远程仓库到本地
仓库创建好后,我们需要把它"拉取"到本地,才能开始写代码。
获取仓库地址
在你的远程仓库页面,点击"克隆/下载"按钮,会看到两种地址:
HTTPS:需要每次输入账号密码。
SSH:配置好密钥后,无需重复输入密码,更推荐使用。
这里我们选择SSH方式。
克隆/下载远端仓库到本地 , 需要使用 git clone 命令, 后面跟上我们的远端仓库的链接 。 远端仓库的链接可以从仓库中找到:选择 "克隆 / 下载 " , 获取远程仓库链接
3.1 HTTPS



- 执行
git remote后,输出当前本地仓库关联的远程仓库简称:origin - 执行
git remote -v(-v是--verbose的缩写,意为 "详细")后,会展示远程仓库简称 + 完整地址 + 权限类型 :- 第一行:
(fetch)表示这个地址用于拉取代码(从远程下载到本地); - 第二行:
(push)表示这个地址用于推送代码(从本地上传到远程); - 这里两个地址相同,说明拉取和推送都指向同一个 Gitee 远程仓库。
- 第一行:
3.2 SSH协议
SSH是一种安全协议,通过公钥和私钥来验证你的身份,无需每次输入密码。



使用 SSH 方式克隆仓库,由于我们没有添加公钥到远端库中,服务器拒绝了我们的 clone 链接。需要我们设置一下:
第一步:创建SSH Key


ssh-keygen -t rsa -C "自己的邮箱"
然后一路回车


第二步:添加自己的公钥到远端仓库



点击确认后,需要对你进行认证,输入你的账号密码即可。至此,我们的准备工作全部做完,可以clone 了。

成功! 如果有多个人协作开发,GitHub/Gitee 允许添加多个公钥, 只要把每个人的电脑上的
Key 都添加到 GitHub/Gitee,就可以 在每台电脑上往 GitHub/Gitee 上提交推送了。 当我们从远程仓库克隆后,实际上 Git 会自动把本地的 master 分支和远程的 master 分支对应来, 并且,远程仓库的默认名称是 origin 。在本地我们可以使用 git remote 命令,来查看远程库的信息。
四、向远程仓库推送代码

- 本地提交
在项目目录中新建一个文件,例如file.txt,然后执行**【新建文件 - 编辑文件 - add到暂存库 - commit 到版本库 】**:
git add file.txt
git commit -m "create file.txt"
提交时要注意,如果我们之前设置过全局的 name 和 e-mail, 这两项配置需要和 gitee 上配置的用户名和邮箱一致,否则会出错。 或者从来没有设置过全局的 name 和 e-mail,那么我们第一次提交时也 会报错。这就需要我们重新配置下了,同样要注意需要和 gitee 上配置的用户名和邮箱一致。
- 推送至远程
使用git push命令将本地分支的修改推送到远程仓库。命令格式:
git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名和远程分支名相同,可以省略冒号后面的部分。例如,将本地的master分支推送到远程的master分支:
git push origin master
- 执行后,如果配置了SSH,不需要输入密码,**就能看到推送成功的提示。**此时刷新Gitee页面,你会发现file.txt已经出现在远程仓库中了。
- 如果你使用的是HTTPS协议,有个麻烦的地方就是每次推送都必须输入口令。
五、从远程仓库拉取代码
在团队协作中,别人可能会先于你向远程仓库推送代码。此时,你的本地仓库就落后于远程仓库了,需要先拉取最新代码,再继续工作。

5.1 模拟远程修改
- 我们可以在Gitee网页上直接修改一个文件 ,例如
README.md。点击文件,选择"编辑",修改内容后提交。此时远程仓库就有了新的提交。

- 修改内容:

- 此时,远程仓库是要领先于本地仓库⼀个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。 Git 提供了 git pull 命令, 该命令用于从远程获取代码并合并本地的版本。格式如下:

这个命令的作用是:从远程的origin主机拉取master分支的代码,并自动合并到当前分支。
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
Unpacking objects: 100% (3/3), done.
From gitee.com:hyb91/git_teaching
* branch master -> FETCH_HEAD
7ce3183..60e6b0a master -> origin/master
Updating 7ce3183..60e6b0a
Fast-forward
README.md | 2 ++
1 file changed, 2 insertions(+)
看到"Fast-forward"表示没有冲突,顺利合并。此时再用cat README.md查看,会发现内容已经和远程保持一致了
六、忽略特殊文件
在日常开发中,有些文件我们不希望提交到远程仓库,比如:
-
编译产生的中间文件(
.o、.class) -
本地配置文件(
.env、config.ini) -
依赖库目录(
node_modules/) -
系统文件(
.DS_Store)
这时,我们可以使用**.gitignore文件来告诉Git忽略哪些文件。**
6.1 创建.gitignore文件
在Git工作区的根目录下 ,创建一个名为.gitignore的文件(把要忽略的文件名填进去,git就会子自动忽略这些文件了)。Gitee在创建仓库时可以自动生成模板,但如果没有,也可以手动创建。

6.2 编写规则
.gitignore文件中的每一行表示一条忽略规则。例如:
# 忽略所有以.so结尾的文件
*.so
# 忽略所有以.ini结尾的文件
*.ini
# 不忽略特定文件(即使符合上面的规则)
!test.ini
# 忽略node_modules目录
node_modules/
# 忽略根目录下的config.json文件
/config.json
6.3 提交.gitignore
创建好.gitignore后,我们需要将它提交到仓库中,让Git知道这些规则。
git add .gitignore
git commit -m "add .gitignore"
git push origin master
6.4 验证忽略效果
现在,在项目中新建一个a.so文件和一个b.ini文件,然后执行git status:
touch a.so b.ini
git status
你会看到:
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
Git没有提示这些文件被新增,说明忽略规则生效了。
6.5 强制添加被忽略的文件
如果你确实想把某个被忽略的文件提交上去,可以使用-f参数强制添加
git add -f a.so
或者 在 .gitignore 加上 !a.so
6.6 检查忽略规则
如果某个文件被忽略了,但你不确定是哪条规则导致的,可以用git check-ignore命令:
git check-ignore -v a.so
输出会告诉你.gitignore的第几行规则导致了忽略。
七、给命令配置别名
Git有些命令比较长,比如git status、git checkout,我们可以给它们设置别名,提高效率。
7.1 设置别名
使用git config命令,加上--global参数表示全局生效(对所有仓库有效):
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.last 'log -1'
设置完成后:
-
git st等同于git status -
git co等同于git checkout -
git br等同于git branch -
git last等同于git log -1(显示最后一次提交)
7.2 查看别名
直接查看Git配置文件,可以看到所有别名:
git config --global -l