文章目录
- 前言
- 一、理解分布式版本控制系统
- 二、远程仓库
- 1.新建远程仓库
- 2.克隆远程仓库
- 3.向远程仓库推送
- 4.拉取远程仓库
- 5.配置Git
- 忽略特殊文件
- 给命令配置别名
- 总结
前言
正文开始!!!
一、理解分布式版本控制系统
我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上.而我们的**Git其实是分布式版本控制系统!**什么意思呢?
可以简单理解为,我们每个人的电脑上都是一个完整的版本库,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上.既然每个人电脑上都有一个完整的版本库,那多人如何协作呢?比方说你在自己电脑上改了文件A,你的同时也在它的电脑上改了文件A,这时,你们俩之间只需把自己各自的修改推送给对方,就可以互相看到对方的修改了.
分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了.
在实际开发使用分布式版本控制的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了.也可能今天你的同事病了,它的电脑压根没有开机.因此,分布式版本控制系统通常也有一台充当"中央服务器"的电脑,但这个服务器的作用仅仅是用来方便"交换"大家的修改,没有它大家也一样干活,只要交换修改不方便而已.有了这个"中央服务器"的电脑,这样就不怕本地出现什么故障了(比如运气差,硬盘坏了,上面的所有东西全部丢失,包括git的所有内容).
二、远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,怎么分布呢?最早肯定只有一台机器有一个原始版本库.此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分.
你肯定会向,至少需要两台机器才能玩远程库是不是?但是我只有一台电脑,怎么玩?
其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下.不过,现实生活中是不会有人这么傻在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有的库都挂掉,所以我也不告诉你在一台电脑上怎么克隆多个仓库.(哈哈哈,开个玩笑).
实际情况往往是这样的,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个"服务器"仓库克隆一份到自己的电脑上,并且各自八个字的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交.
完全可以自己搭建一台运行Git的服务器.不过现阶段我们只为了学Git搭服务器是小题大做.好在这个世界有个叫GitHub的神奇网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库.
GitHub是国外的网站,速度比较慢.所以在学习过程采用Gitee来托管代码.
下面我们从零开始,使用一个Gitee的远程仓库.
1.新建远程仓库
新建远程项目仓库 :
填写基本信息 :
创建成功 :
创建成功后,我们可以对远程仓库进⾏⼀个基本的设置:开源or私有
从创建好的远程仓库我们便能看到,之前在本地学习过的分支,也存在于远程仓库中并被管理起来了.刚创建的仓库有且只有一个默认的master分支.
2.克隆远程仓库
克隆/下载远端仓库到本地,需要使用git clone
命令,后面跟上我们的远端仓库的连接,远端仓库的连接可以从仓库中找到 : 选择"克隆/下载"获取远程仓库的连接 :
SSH协议和HTTPS协议是Git最常使用的两种数据传输协议.SSH协议使用了公钥加密和公钥登录机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放在服务器上,由Git服务器进行管理.使用HTTPS方式时,没有要求,可以直接克隆下来.
- 使用HTTPS方式 :
- 使用SSH方式 :
使用SSH方式克隆仓库,由于我们没有添加公钥到远端仓库中,服务器拒绝了我们的clone链接.需要我们设置一下 :
第一步 : 创建SSH key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步.如果没有,需要创建SSH key :
注意要输入自己的邮箱,然后一路回车,使用默认值即可.
顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人.
第二步 添加自己的公钥到远端的仓库.
点击确认后,需要对你进⾏认证,输⼊你的账号密码即可。⾄此,我们的准备⼯作全部做完,欢快的
clone吧。
done,成功!如果有多个人协作开发,GitHub/Gitee允许添加多个公钥,只要把每个人的电脑上的key都添加到GitHub/Gitee,就可以在每台电脑上往GitHub/Gitee上提交推送了.
当我们从远程仓库克隆猴,实际上Git会自动把本地的master分支和远程的master分值对应起来,并且远程仓库的默认名称是origin
.在本地我们可以使用git remote
命令,来查看延远程库的信息,如 :
或者可以使用git remote -v
显示更详细的信息:
上面显示了可以抓取和推送的origin的地址.如果没有推送权限,就看不到push的地址.推送是什么呢?请看下面!
3.向远程仓库推送
本地已经clone
成功远程仓库后,我们便可以向仓库中提交内容,例如新增一个file.txt
文件 :
提交时要注意,如果我们之前设置过全局的name和e-mail,这两项配置需要和gitee上配置的用户名和邮箱一致,否则会出错.或者从来没有设置过全局的name和e-mail,那么我们第一次提交时也会报错.这就需要我们重新配置一下,同样要注意需要和gitee上配置的用户名和邮箱一致.如何配置之前已经讲过,在这里就不再赘述了.
到这里我们已经将内容提交至本地仓库中,如何将本地仓库的内容推送至远程仓库呢,需要使用git push
命令,该命令用于降本的分支版本上传到远程合并,命令格式如下 :
git push <远程主机名> <本地分支名>:<远程分支名>
# 如果本地分支名和远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
此时我们要将本地的master分支推送到origin主机的master分支,则可以 :
推送成功!这里由于我们使用的是SSH协议,是不用每一次推送都输入密码的,方便了我们的推送操作.如果你使用的是HTTPS协议,有个麻烦的地方就是每次推送都必须输入口令.
代码已经被推送至远端了 :
4.拉取远程仓库
在Gitee上点击file.txt文件并在线修改它 :
修改内容:
此时远程仓库是要领先于本地仓库一个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地.Git提供了git pull
命令,该命令用于从远程获取代码并合并本地的版本.格式如下 :
git pull <远程主机名> <远程分支名>:<本地分支名>
# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略
git pull <远程主机名> <远程分支名>
使用一下 :
我们发现,拉取成功了!
5.配置Git
忽略特殊文件
在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让Git知道呢?在Git工作区的根目录下创建一个特殊的.gitignore
文件,把要忽略的文件名填进去,Git就会自动忽略这些文件了.
不需要从头写.gitignore
文件,gitee在创建仓库时就可以为我们生成,不过需要我们主动勾选一下 :
如果当时没有选择这个选项,在工作区创建一个也是可以的.无论那种方式,最终都可以得到一个完整的.gitignore
文件,例如我们向忽略以.so
和.ini
结尾的所有文件,.gitignore
的内容如下 :
在.gitignore
文件中也可以指定某个确定的文件.
最后一步就是把.gitignore
也提交到远端,就完成了 :
接下来我们就来验证一下.gitignore文件的功能,在工作区新增两个文件a.so
和b.ini
:
检验.gitignore
的标准就是git status
命令是不是说working tree clean
.我们发现Git并没有提示在工作区中有文件新增,果然.gitignore
生效了!
但有些时候,你就想添加一个文件到Git,但由于这个文件被.gitignore
忽略了,根本添加不了,那么可以用-f
强制添加 :
git add -f [文件名]
或者你发现,可能是.gitignore
写得有问题,需要找出来到底那个规则写错了,比如说a.so文件是要被添加的,可以用git check-ignore -v a.so
命令检查 :
Git会告诉我们,.gitignore
的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则.
还有些时候,当我们编写了规则排除了部分文件时,例如 :
.*
但是我们发现.*
这个规则把.gitignore
也排除了.虽然可以用git add -f
强制添加进去,但是我们还是不要破坏.gitignore
的规则,这个时候,可以添加一条例外规则 :
# 排除所有.开头的隐藏文件
.*
# 不排除.gitignore
!.gitignore
把指定文件排除在.gitignore
规则外的写法就是!
+文件名.所以只需把例外文件添加进去即可.
给命令配置别名
在我们使用Git期间,有些命令敲的时候着实让人太头疼了,幸运的是git支持对命令行进行简化!
举个栗子,将git status
简化为git st
,对应的命令为 :
git config --global alias.st status
--global
参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用.如果不加,那么只针对当前仓库起作用.
接下来我们看看效果 :
再来配置一个log --pretty=oneline -abbrev-commit
,显示日志信息
不过,我个⼈还是不推荐⼤家现在去使⽤它,等大家对命令很熟悉了,再去简化⾃⼰的⼯作吧,尽快适应 Git。
总结
(本章完!)