文章目录

  • 前言
  • 一、理解分布式版本控制系统
  • 二、远程仓库
  • 1.新建远程仓库
  • 2.克隆远程仓库
  • 3.向远程仓库推送
  • 4.拉取远程仓库
  • 5.配置Git
  • 忽略特殊文件
  • 给命令配置别名
  • 总结



前言


正文开始!!!

一、理解分布式版本控制系统

我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上.而我们的**Git其实是分布式版本控制系统!**什么意思呢?

可以简单理解为,我们每个人的电脑上都是一个完整的版本库,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上.既然每个人电脑上都有一个完整的版本库,那多人如何协作呢?比方说你在自己电脑上改了文件A,你的同时也在它的电脑上改了文件A,这时,你们俩之间只需把自己各自的修改推送给对方,就可以互相看到对方的修改了.

Git--远程操作_git

分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了.

在实际开发使用分布式版本控制的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了.也可能今天你的同事病了,它的电脑压根没有开机.因此,分布式版本控制系统通常也有一台充当"中央服务器"的电脑,但这个服务器的作用仅仅是用来方便"交换"大家的修改,没有它大家也一样干活,只要交换修改不方便而已.有了这个"中央服务器"的电脑,这样就不怕本地出现什么故障了(比如运气差,硬盘坏了,上面的所有东西全部丢失,包括git的所有内容).

二、远程仓库

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,怎么分布呢?最早肯定只有一台机器有一个原始版本库.此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分.

你肯定会向,至少需要两台机器才能玩远程库是不是?但是我只有一台电脑,怎么玩?

其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下.不过,现实生活中是不会有人这么傻在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有的库都挂掉,所以我也不告诉你在一台电脑上怎么克隆多个仓库.(哈哈哈,开个玩笑).

实际情况往往是这样的,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个"服务器"仓库克隆一份到自己的电脑上,并且各自八个字的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交.

完全可以自己搭建一台运行Git的服务器.不过现阶段我们只为了学Git搭服务器是小题大做.好在这个世界有个叫GitHub的神奇网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库.

GitHub是国外的网站,速度比较慢.所以在学习过程采用Gitee来托管代码.

下面我们从零开始,使用一个Gitee的远程仓库.

1.新建远程仓库

新建远程项目仓库 :

Git--远程操作_git_02

填写基本信息 :

Git--远程操作_git_03

创建成功 :

Git--远程操作_远程仓库_04


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

Git--远程操作_推送_05


Git--远程操作_git_06


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

Git--远程操作_git_07

Git--远程操作_git_08

2.克隆远程仓库

克隆/下载远端仓库到本地,需要使用git clone命令,后面跟上我们的远端仓库的连接,远端仓库的连接可以从仓库中找到 : 选择"克隆/下载"获取远程仓库的连接 :

Git--远程操作_git_09


SSH协议和HTTPS协议是Git最常使用的两种数据传输协议.SSH协议使用了公钥加密和公钥登录机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放在服务器上,由Git服务器进行管理.使用HTTPS方式时,没有要求,可以直接克隆下来.

  • 使用HTTPS方式 :

Git--远程操作_推送_10

  • 使用SSH方式 :

Git--远程操作_推送_11


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

第一步 : 创建SSH key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,需要创建SSH key :

Git--远程操作_推送_12


注意要输入自己的邮箱,然后一路回车,使用默认值即可.

Git--远程操作_远程仓库_13

顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人.

Git--远程操作_远程仓库_14


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

Git--远程操作_推送_15


Git--远程操作_推送_16

Git--远程操作_git_17

Git--远程操作_推送_18


点击确认后,需要对你进⾏认证,输⼊你的账号密码即可。⾄此,我们的准备⼯作全部做完,欢快的

clone吧。

Git--远程操作_推送_19


done,成功!如果有多个人协作开发,GitHub/Gitee允许添加多个公钥,只要把每个人的电脑上的key都添加到GitHub/Gitee,就可以在每台电脑上往GitHub/Gitee上提交推送了.

当我们从远程仓库克隆猴,实际上Git会自动把本地的master分支和远程的master分值对应起来,并且远程仓库的默认名称是origin.在本地我们可以使用git remote命令,来查看延远程库的信息,如 :

Git--远程操作_远程仓库_20


或者可以使用git remote -v显示更详细的信息:

Git--远程操作_推送_21

上面显示了可以抓取和推送的origin的地址.如果没有推送权限,就看不到push的地址.推送是什么呢?请看下面!

3.向远程仓库推送

Git--远程操作_推送_22


本地已经clone成功远程仓库后,我们便可以向仓库中提交内容,例如新增一个file.txt文件 :

Git--远程操作_远程仓库_23


提交时要注意,如果我们之前设置过全局的name和e-mail,这两项配置需要和gitee上配置的用户名和邮箱一致,否则会出错.或者从来没有设置过全局的name和e-mail,那么我们第一次提交时也会报错.这就需要我们重新配置一下,同样要注意需要和gitee上配置的用户名和邮箱一致.如何配置之前已经讲过,在这里就不再赘述了.

到这里我们已经将内容提交至本地仓库中,如何将本地仓库的内容推送至远程仓库呢,需要使用git push命令,该命令用于降本的分支版本上传到远程合并,命令格式如下 :

git push <远程主机名> <本地分支名>:<远程分支名>

# 如果本地分支名和远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>

此时我们要将本地的master分支推送到origin主机的master分支,则可以 :

Git--远程操作_远程仓库_24


推送成功!这里由于我们使用的是SSH协议,是不用每一次推送都输入密码的,方便了我们的推送操作.如果你使用的是HTTPS协议,有个麻烦的地方就是每次推送都必须输入口令.

Git--远程操作_推送_25

代码已经被推送至远端了 :

Git--远程操作_git_26

4.拉取远程仓库

在Gitee上点击file.txt文件并在线修改它 :

Git--远程操作_git_27


修改内容:

Git--远程操作_git_28


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

git pull <远程主机名> <远程分支名>:<本地分支名>

# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略
git pull <远程主机名> <远程分支名>

使用一下 :

Git--远程操作_推送_29


我们发现,拉取成功了!

Git--远程操作_git_30

5.配置Git

忽略特殊文件

在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让Git知道呢?在Git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件了.

不需要从头写.gitignore文件,gitee在创建仓库时就可以为我们生成,不过需要我们主动勾选一下 :

Git--远程操作_推送_31


如果当时没有选择这个选项,在工作区创建一个也是可以的.无论那种方式,最终都可以得到一个完整的.gitignore文件,例如我们向忽略以.so.ini结尾的所有文件,.gitignore的内容如下 :

Git--远程操作_推送_32


.gitignore文件中也可以指定某个确定的文件.

最后一步就是把.gitignore也提交到远端,就完成了 :

Git--远程操作_推送_33


接下来我们就来验证一下.gitignore文件的功能,在工作区新增两个文件a.sob.ini :

Git--远程操作_推送_34


检验.gitignore的标准就是git status命令是不是说working tree clean.我们发现Git并没有提示在工作区中有文件新增,果然.gitignore生效了!

但有些时候,你就想添加一个文件到Git,但由于这个文件被.gitignore忽略了,根本添加不了,那么可以用-f强制添加 :

git add -f [文件名]

或者你发现,可能是.gitignore写得有问题,需要找出来到底那个规则写错了,比如说a.so文件是要被添加的,可以用git check-ignore -v a.so命令检查 :

Git--远程操作_推送_35


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仓库下都有用.如果不加,那么只针对当前仓库起作用.

接下来我们看看效果 :

Git--远程操作_推送_36


再来配置一个log --pretty=oneline -abbrev-commit,显示日志信息

Git--远程操作_git_37


不过,我个⼈还是不推荐⼤家现在去使⽤它,等大家对命令很熟悉了,再去简化⾃⼰的⼯作吧,尽快适应 Git。


总结

(本章完!)