title: GIT
date: 2022-06-27 14:15:13
tags:
Git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。
git官网
特点:项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性!
Git之所以快速和高效,主要依赖于它的如下两个特性:
Git快照是在原有文件版本的基础.上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
缺点:占用空间资源大 空间换时间
使用Git管理的项目,拥有三个区域,分别是工作区、暂存区、Git 仓库。
WorkingDirectory (工作区,相当于开发人员电脑)
StagingArea (暂存区)
.git directory(Repository)(Git仓库)
基本的Git工作流程如下:
①在工作区中修改文件
②将你想要下次提交的更改进行暂存
③提交更新,找到暂存区的文件,将快照永久性存储到Git仓库
安装完Git之后,要做的第一件事就是设置自己的用户名和邮件地址。因为通过Git对项目进行版本管理的时候,Git需要使用这些基本信息,来记录是谁对项目进行了操作:
–golbal选项只需执行一次就可以永久生效
通过git config --global user.name和git config --global user.email配置的用户名和邮箱地址,会被写入到C:/Users/用户名文件夹/.gitconfig文件中。这个文件是Git 的全局配置文件,配置- -次即可永久生效。
可以使用记事本打开此文件,从而查看自己曾经对Git做了哪些全局性的配置。
除了使用记事本查看全局的配置信息之外,还可以运行如下的终端命令,快速的查看Git的全局配置信息:
可以使用**git help **命令,无需联网即可在浏览器中打开帮助手册,例如:
如果不想查看完整的手册,那么可以用-h选项获得更简明的"help" 输出:
①将尚未进行版本控制的本地目录转换为Git仓库
②从其它服务器克隆一个已存在的Git仓库
以上两种方式都能够在自己的电脑上得到一一个可用的Git仓库
如果自己有一个尚未进行版本控制的项目目录,想要用Git来控制它,需要执行如下两个步骤:
①在项目目录中,通过鼠标右键打开"Git Bash"
②执行 git init 命令将当前的目录转化为Git仓库
git init命令会创建一个名为 .git 的隐藏目录,这个.git目录就是当前项目的Git仓库,里面包含了初始的必要
文件,这些文件是Git仓库的必要组成部分。
工作区中的每一个文件可能有4种状态,这四种状态共分为两大类,如图所示:
未跟踪 ??
已暂存 A
被修改 M
被修改并且放入暂存 M
可以使用git status 命令查看文件处于什么状态,例如:
在状态报告中可以看到新建的index.html文件出现在Untracked files (未跟踪的文件)下面。
以精简的方式显示文件状态
使用git status输出的状态报告很详细,但有些繁琐。如果希望以精简的方式显示文件的状态,可以使用如下两条完全等价的命令,其中-s是–short的简写形式:
使用命令 git add 开始跟踪一个文件 所以要跟踪index.html文件,运行如下的命令即可
此时再运行git status命令,会看到index.html文件在Changes to be committed这行的下面,说明已被跟踪,并处于暂存状态:
如果需要被暂存的文件比较多,可以使用 git add . 命令一次性向暂存区提交多个文件
项目开发常用命令,将新增和修改后的文件放入暂存区
现在暂存区中有一个index.html文件等待被提交到Git仓库中进行保存。可以执行git commit命令进行提交,其中 -m 选项后面是本次的提交消息,用来对提交的内容做进一步的描述:
提交成功后会显示如下信息:
目前,index.html 文件已经被Git跟踪,并且工作区和Git仓库中的index.html文件内容保持一致。 当我们
修改了工作区中index.html的内容之后,再次运行git status和git status -s命令,会看到如下的内容:
文件index.html出现在Changes not staged for commit这行下面,说明已跟踪文件的内容发生了变化,
但还没有放到暂存区。
注意:修改过的,没有放入暂存区的文件前面有****红色的M标记
目前,工作区中的index.html文件已被修改,如果要暂存这次修改,需要再次运行 git add 命令,这个命令
是个多功能的命令,主要有如下3个功效:
再次运行 git commit -m “提交消息” 命令,即可将暂存区中记录的index.html的快照,提交到Git仓库中进行保存:
撤销对文件的修改指的是:把对工作区中对应文件的修改,还原成Git仓库中所保存的版本。
操作的结果:所有的修改会丢失,且无法恢复! 危险性比较高,请慎重操作!
如果需要从暂存区中移除对应的文件,可以使用如下命令:
Git标准的工作流程是工作区→暂存区→Git仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到Git仓库,这时候Git工作的流程简化为了工作区→Git仓库。
Git提供了一个跳过使用暂存区域的方式,只要在提交的时候, 给git commit加上-a选项,Git 就会自动把
所有已经跟踪过的文件暂存起来一并提交, 从而跳过git add步骤:
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。在这种情况下,我们可以创建一一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式。
文件.gitignore的格式规范如下: .
①以 #开头 的是注释
②以 /结尾 的是目录
③以 /开头 防止递归
④以 !开头 表示取反
⑤可以使用 glob模式 进行文件和文件夹的匹配 (glob指简化了的正则表达式)
glob模式是指简化了的正则表达式:
①星号*匹配零个或多个任意字符
②**[abc]** 匹配任何- -个列在方括号中的字符(此案例匹配-个a或匹配-一个b或匹配一个c)
③问号?只匹配-一个任意字符
④在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配( 比如[0-9]表示匹配
所有0到9的数字)
⑤两个星号*表示匹配任意中间目录(比如a/*/z可以匹配a/z、a/b/z 或a/b/C/z等)
如果希望回顾项目的提交历史,可以使用 git log 这个简单且有效的命令。
注意:回退到旧版本后不能再使用 git log --pretty=oneline 查看历史版本
从主线分支出复线,可以多分支操作项目。类似于平行宇宙,不同分支不会相互影响,完成某个功能后再次合并到主线上。
git branch
运行结果:
“*” 代表当前所在分支
git branch 分支名 在当前分支下创建新的分支,新分支代码与主线代码一致
注意:创建新分支后用户还是处于主分支
git checkout 分支名
git checkout -b 分支名称
一条命令就可以实现创建和切换分支
功能分支代码开发测试完毕后可以使用如下命令将完成后的代码合并到master主分支上:
在分支上进行的操作不会对主分支造成影响,所以切换到主分支后不会看到在复分支上的更改,需要合并之后才可以看见。
不能在所在的分支上删除分支
两个分支都同时对同一个文件进行了修改,在合并时候会报错。此时就需要打开冲突文件手动解决冲突
如果是第一次将本地分支推送到远程仓库,需要执行以下命令:
第一次推送分支需要带-u参数,此后可直接使用 git push 推送代码到远程仓库分支
git remote show 远程仓库名称
从远程仓库中,把远程分支下载到本地仓库中。需要运行如下命令:
使用 git pull 把远程分支最新的代码下载到本地对应的分支中
删除远程分支命令
git push origin --delete 远程分支名
常见的五种开源许可协议
BSD (Berkeley Software Distribution)
Apache Licence 2.0
GPL ( GNU General Public License)
LGPL (GNU Lesser General Public License)
MIT (Massachusetts Institute of Technology, MIT)
专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台主要有以下3个:
注意:以上3个开源项目托管平台,只能托管以Git管理的项目源代码,因此,它们的名字都以Git开头。
Github.上的远程仓库,有两种访问方式,分别是HTTPS和SSH。它们的区别是:
①HTTPS:零配置;但是每次访问仓库时,需要重复输入Github的账号和密码才能访问成功
②SSH: 需要进行额外的配置;但是配置成功后,每次访问仓库时,不需重复输入Github的账号和密码
注意:在实际开发中,推荐使用SSH的方式访问远程仓库。
注意:要先在官网绑定令牌
绑定令牌的方式:
1.找到"C:\Users\无敌暴龙战士.ssh"路径下两个文件 id_rsa.pub 后缀的为私人令牌
2.在github官网个人设置中找到绑定令牌
3.选择new SSH key 添加绑定令牌
如果想要上传本地被修改后的仓库需要将修改后的文件全部提交并且使用 git push 命令上传,同时也要注意,在弹出框输入密钥*(并非令牌)*
关于密钥的生成:
使用 git clone 远程库地址
##Git flsBlog##
要想实现单个库连接多个平台可以使用多库连接的方式,比如当更新一个项目后想要同时上传GitHub和Gitee就可以避免繁琐的操作,同时绑定不同的SSH地址。在push或者pull的时候就可以同时上传/获取
原帖子:##git实现多库共存##
首先,指令 git remote -v 查看本地仓库所关联的远程仓库:
git remote rm origin 删除远程库
然后,用 git remote add (name) 添加一个远程仓库,其中name可以任意指定(对应上面的origin部分),比如:
再次查看本地仓库所关联的远程仓库,可以发现成功关联了两个远程仓库:
此后,若需进行push操作,则需要指定目标仓库,git push ,对这两个远程仓库分别操作:
同理,pull操作也需要指定从哪个远程仓库拉取,git pull ,从这两个仓库中选择其一:
首先,指令 git remote -v 查看本地仓库所关联的远程仓库:
然后,不额外添加远程仓库,而是给现有的远程仓库添加额外的 URL。使用 git remote set-url -add ,已有的名为name的远程仓库添加一个远程地址,比如:
再次查看所关联的远程仓库:
可以看到,我们并没有如方法 1 一般增加远程仓库的数目,而是给一个远程仓库赋予了多个地址(或者准确地说,多个用于push的地址)。
因此,这样设置后的push 和pull操作与最初的操作完全一致,不需要进行调整。