目录
理解分布式版本控制系统
远程仓库
新建远程仓库:
克隆远程仓库:
向远程仓库推送:
从远端仓库拉取:
配置Git
忽略特殊文件:
给命令配置别名:
标签管理
理解标签:
创建标签:
带有说明的标签:
删除标签:
删除远程标签:
理解分布式版本控制系统
之前文章所分享的所有内容(工作区,暂存区,版本库等待),都是在本地的!而我们的Git其实是分布式版本控制系统!
可以简单理解为,我们每个⼈的电脑上都是⼀个完整的版本库,这样你⼯作的时候,就不需要联⽹
了,因为版本库就在你⾃⼰的电脑上。如果想让对方也能看到你所做的修改,那就需要将这些东西推送给对方~~
远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。怎么进行分布?
一开始有一台机器具有一个原始版本库,此后别的机器对他"克隆"。
我们将自己的代码推送至远程的服务器,让其他人能够看到我们的推送,实现多人开发合作
这里我们可以登录GitHub网站,这个网站能提供对Git仓库的托管服务的。只要注册一个账号,就可以免费获得Git远程仓库
但github是国外的网站,速度比较慢。国内的话用码云gitee快的多,这里我们就使用gitee了~~
填写基本信息:
这样就成功创建了我们自己的仓库,且该仓库就一个主分支master
克隆远端仓库到本地,需要用到git clone命令,后面跟上远端仓库的链接即可
SSH协议和HTTPS协议是Git最常使⽤的两种数据传输协议。SSH协议使⽤了公钥加密和公钥登陆机制,体现了其实⽤性和安全性,使⽤此协议需要将我们的公钥放上服务器,由Git服务器进⾏管理。使⽤HTTPS⽅式时,没有要求,可以直接克隆下来。
注意这里仓库改成开源可以直接clone~~
SSH
直接使用的话会报错,并不能直接git clone下来,原因是因为没有添加公钥到远端库中,服务器拒接了我们clone链接。需要手动设置一下
第一步:
创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看目录有没有id_rsa和id_rsa.pub这两个文件,如果有就直接下一步,没有的话创建一下:
ssh-keygen -t rsa -C "自己的gitee邮箱"
顺利的话.ssh目录下就有这两个文件:id_rsa是私钥不能泄露,id_rsa.pub是公钥,可以放心告诉别人
第二步:
添加自己的公钥到远端仓库
对设置中的SSH公钥进行设置
点击确认后,需要对你进行认证,输入你的账号密码即可。至此,ssh的准备工作搞定,接下来的clone就畅通无阻了
如果有多个⼈协作开发,GitHub/Gitee允许添加多个公钥,只要把每个⼈的电脑上的Key都添加到GitHub/Gitee,就可以在每台电脑上往GitHub/Gitee上提交推送了
当我们从远程仓库克隆后,实际上Git会⾃动把本地的maste分⽀和远程的master分⽀对应起来,并且,远程仓库的默认名称是origin 。在本地我们可以使⽤ git remote 命令,来查看远程库的信息
更详细一点~~
上面显示了可以抓取和推送的origin地址,如果没有推送权限,就看不到push地址
本地已经clone成功远程仓库后,我们便可以向仓库中提交内容,例如新增一个file.txt文件:
如果我们之前设置过全局的name和e-mail,这两项配置需要和gitee上配置的⽤⼾名和邮箱⼀致,否则会出错。或者从来没有设置过全局的name和e-mail,那么我们第⼀次提交时也会报错。这就需要我们重新配置下了,同样要注意需要和gitee上配置的⽤⼾名和邮箱⼀致
提交之后就可以推送了:
git push <远程主机名> <本地分⽀名>:<远程分⽀名>
# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号:
git push <远程主机名> <本地分⽀名>
此时我们要将本地的master分支推送到origin主机的master分支 ,则可以:
git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
# 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
git pull <远程主机名> <远程分⽀名>
这就是我们新提交的文件
我们先在gitee仓库中对file1进行修改~
此时,远程仓库是要领先于本地仓库⼀个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。Git提供了 git pull 命令,该命令⽤于从远程获取代码并合并本地的版
本。格式如下 :
git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
# 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
git pull <远程主机名> <远程分⽀名>
此时终端中也有了gitee上修改的内容,注意pull是拉取并合并~~
配置Git
在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让Git知道呢?在Git⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件名填进去,Git就会⾃动忽略这些⽂件了
不需要从头写.gitignore文件,gitee在创建仓库的的时候就可以为我们生成,不过要我们手动勾选一下
如果当时没有选,在工作区创建一个也是可以的。无论哪种方式,最终都可以的得到一个完整的.gitignore文件,例如我们想忽略以.so 和 .ini 结尾的所有文件,.gitignore的内容如下
很好理解,*为通配符,后缀为.ini 和 .so都符合上面的形式,这样推送的时候就会被忽略,此时也要记得将.gitignore文件也提交到远端:
但如果有些时候你想强制添加一个文件到Git,但是这个文件被ignore忽略了,根本添加不了,那么就可以用-f强制添加
git add -f [filename]
或者你发现,可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,⽐如说?a.so?⽂件
是要被添加的,可以⽤ git check-ignore 命令检查:
git check-ignore -v a.so
Git?会告诉我们, .gitignore 的第4⾏规则忽略了该⽂件
但这样强制的-f添加进去破坏了.gitignore文件的规则,那么就可以在.ignore中额外添加一条例外规则:
这里的意思就是排除所有.so后缀结尾的文件,但是给a.so一个特例,让他需要被提交
在我们使⽤Git期间,有些命令敲的时候着实让⼈头疼幸运的是,git⽀持对命令进⾏简化!
举个例子将git status 简化成 git st:
git config --global alias.st status
--global 参数是全局参数,也就是这些命令在这台电脑的所有git仓库下都有用,如果不加就只对当前仓库有用
建议是在学习期间,还是多敲敲代码,以后工作再用这个~~
标签管理
标签tag,可以简单理解为对某次commit的一个标识,相当于起了一个别名。例如,在项目发布的某个版本的时候,针对最后一次commit起一个v1.0这样的标签来表示里程碑的意义。
这有啥用?
相较于难以记住的commit id,tag很好的解决了这个问题,因为tag一定要给一个让人好记住,且有意义的名字。当我们要回退到某个重要版本的时候,直接使用tag就能很快定位
在Git中创建非常简单,首先切换到需要打标签的分支上
然后,敲命令git tag [name]即可
可以使用git tag 查看所有标签
默认标签是打在最新提交的commit上的。那如何在指定的commit上打标签呢?方法是找到历史提交的commit id,然后打上就行了
注意标签不是俺时间顺序列出,而是字符排序
可以使用git show [tagname] 查看标签信息的
Git还提供可以创建带有说明的标签,-a指定标签名 ,-m指定说明文字:
git tag -a [name] -m "XXX" [commit_id]
另外打完标签后再看看本地库.git下有什么变化,便于帮你理解
语法:
git tag -d [tag_name]
因为创建的标签都只存储在本地,不会⾃动推送到远程。所以,打错的标签可以在本地安全删除。如果要推送某个标签到远程,使⽤命令 git push origin
比如推送v1.0标签
git push origin v1.0
当然如果你有很多标签也可以一次性全部推送到终端:
git push origin --tags
这个稍微麻烦一点
第一步:先删除本地
第二步:从远端删除,删除命令也是push,但是格式如下