Git
一、概述
Git是一个免费的、开源的分布式版本控制系统
版本控制系统主要分为分布式版本控制系统和集中式版本控制系统。相信,只要接触过项目的,或多或少都听说过它们,那么它们两有什么区别呢?
首先是集中式版本控制系统例如svn、cvs等。集中式版本控制系统是我最先用的版本控制系统,它有个很明显的特点,就是集中,所有的代码上传下载都得通过中央服务器来管理。如果这个中央服务器你连不上了,那么你就无法上传和下载最新代码进行版本控制。
分布式版本控制系统其实也有一个所谓的中央服务器,但是这个中央服务器只是为了平时管理方便。每一台电脑本地都有自己的版本控制库,就算中央服务器挂了,自己本地也能做版本控制,还能和其他电脑进行版本控制。只是平时为了更加方便,大家就将代码统一放在中央服务器管理而已。
代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般简称为远程库。
- 局域网:GitLab
- 互联网:GitHub(外网)、Gitee码云(国内)
分支
默认对代码的管理是在master上,此时如果多人要开发多个不同功能时,如果都提交到master就会产生问题。此时可以创建分支,相当于把master赋值了一个副本到该分支上,不同分支之间互不干扰。当每个分支都实现功能后,再和master合并。
二、Git的安装
如果去Git官网上下载速度非常慢,而且中间还会下载失败,让人崩溃,这里推荐一个下载地址:
该网站有git的今年来的全部版本,选择你喜欢的进行下载。下载有两种,一种.tar结尾的压缩包,解压后就是git,无需安装。另一种.exe结尾,需要进行安装,好处是可以进行一些自定义配置。下面演示.exe结尾。
其他一路下一步即可。
三、常用命令
1.配置命令
git安装完后,系统配置文件再/etc/gitconfig中
git config --l
查看当前git的所有命令git config --global user.name 用户名
设置用户的签名,签名在每次版本提交信息中可以看到,用来确定本次是谁提交的。git必须设置一个用户签名,否则无法提交代码。git config --global user.email 邮箱
设置用户邮箱
如果希望再特点的项目中使用不同的名称或e-mail地址,可以再项目中运行不加–global选项的该命令。
2.基本命令
创建本地仓库的方法有2种:一种是创建全新的仓库,另一种是克隆远程仓库。
git init 初始化本地库
git clone url 克隆远程仓库来创建本地库
git status 查看本地库状态
删除文件方法的有4种:
rm 文件名 删除本地文件。如果想删除版本库中的文件,需要先add再commit。
git rm 删除工作区的文件,并自动add到暂存区。commit后可以删除工作区和本地库的文件。需要注意的是这种方法删除需要工作区和本地库的代码一样。
git rm -f 删除工作区和暂存区的文件。commit后可以删除工作区和本地库的文件。这种方法可以工作区和本地库的代码不一样。
git rm --cached 删除暂存区文件,但保留工作区的文件,并且将这次删除放入暂存区。commit后可以删除工作区和本地库的文件。这种方法不会删除本地文件。
git add 文件名
添加到暂存区,添加到暂存区的文件可以被提交到本地库。如果暂存区的文件被修改通过git status可以查看。git commit -m "日志信息" "文件名"
提交到本地库git reflog
查看历史记录git log
查看详细历史记录git reset
--hard 版本号
3.git reset
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset [--soft | --mixed | --hard] [HEAD]
其中HEAD 为commit提交的id。
--soft
将本地库还原到上一个版本,git log看不到其他日志。--mixed
若不指定具体文件,则将本地库和暂存区都还原到指定版本。如果指定了具体文件,则只把暂存区还原到指定版本。--hard
将本地库、暂存区和工作区都还原到上一个版本,it log看不到其他日志。
4.分支命令
git branch 分支名
创建分支git branch -v
查看分支git checkout 分支名
切换分支git checkout -b 分支名
创建新的 分支,并切换到该分支上git checkout 分支名/commitid 文件名
从该分支上还原文件。若未指定分支或版本,则先从暂存区还原。再从当前库还原。git branch -d 分支名
删除分支git merge 分支名
把指定的分支合并到当前分支上,合并成功后会自动提交到本地库
合并的分支只有当前所在分支的代码会合并,如果产生冲突,需要手动打开冲突文件,将特殊字符和不想要的内容删掉,然后执行add,commit。注意commit时不带文件名。
四、git文件状态
git中的文件有4种状态
- untracked
该状态文件未跟踪。此文件在文件夹中,但并没有加入到git库中,不参与版本控制。通过git add
状态变为staged
- Staged
暂存状态。执行git commit
则将修改同步到库中。
文件状态变为Unmodify
状态。执行git reset HEAD filename
取消暂存,文件状态为modified
- Unmodify
文件被追踪,并且没有修改。即本地库中的文件快照内容与文件夹中完全一致。
如果这种文件被修改了,则变为modified
状态。。
- Modified
文件被追踪,并且文件被修改。通过git add
进入暂存状态。
五、忽略文件
有时候我们不想把某些文件纳入版本控制,比如数据库文件,临时文件,设计文件等。
在主目录下建立.gitignore
文件,此文件有如下规则:
1.忽略文件中的空行或以#开始的行将被忽略
2.可以使用linux通配符。例如(*)代表任意多个字符,问号(?)表示一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2})代表可选的字符串等。
3.如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
4.如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录的文件不忽略。
5.如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录
例如:
# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
# 忽略 build/ 文件夹下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
六、Git团队协作示意图
1.团队内协作
2.跨团队协作
七、GitHub基本使用
登陆github官网,创建或者登陆账号。登陆成功后,点击右上角头像旁边的+号创建一个远程库,创造完项目后,会自动生成https。
此时在本地的git客户端中就可以通过该https进行代码的上传和拉取。但是https太繁琐,可以在本地取一个别名来代替。
git使用github常用命令
git clone代码时,会将远程的https默认命名为origin,此时通过下列命令可以操控别名。
git remote -v
查看本地客户端的别名信息git remote add 别名 https链接
起别名git push 别名或https master或分支名
上传代码到github,需要登陆githubgit pull别名或https master或分支名
拉去代码从githubgit clone https地址
从gtihub上克隆代码。该操作会将项目代码拉去下来,并进行初始化本地仓库,最后创建一个默认别名。
github使用步骤
当github上没有本地仓库或本地仓库为空时
- 先在github创建本地仓库,生成https或者ssh
- 在本地创建同样名字的文件夹
- 在其中右键打开git命令行
- 输入git init,初始化本地仓库
- 输入git remote add origin https或ssh ,为远程仓库取一个别名,通常取项目的名字
- 然后可以进行拉去或者上传代码
当想从github上克隆代码
- 直接 git clone https地址
当跨团队协作时:
fork可以将别人仓库中的项目完整拷贝一份到自己的github仓库中。改好后,点击Pull Request可以将自己修改好的内容发给作者。
免密登陆
当创建好一个项目时,不仅会生成https,还会生成一个ssh,将之前命令中的https替换成ssh则无需再登陆github。但是生成ssh需要进行如下配置:
在自己的c盘用户文件下打开github客户端,输入:
ssh-keygen -t rsa -C 自定义字符
输入后连续按3次回车即可。
随后会在当前目录生成.ssh文件夹,其中会自动生成公钥和私钥。
将.pub结尾的文件内公钥复制下来或者在git控制台输入cat ~/.ssh/id_rsa.pub
即可打印出文件内容,然后粘贴到github的如图所示位置:
配置好公钥后,即可生成ssh链接。
八、IDEA整合Git
创建忽略文件
当我们要进行版本控制时,其实并不是所有的文件都需要进行版本控制,例如iml文件,一些本地编译的class文件都不需要提交到本地仓库。使用.gitignore文件,就可以在进行版本控制时忽略这些文件。
在idea中需要安装.ignore插件:
通过上述步骤则会生成一个默认的.gitignore文件,你也可以修改.gitignore内容来匹配你想要忽略的文件类型。
IDEA使用Git
初始化本地库
add和commit
切换版本
分支操作
IDEA登陆github
如图所示,在idea中登陆github有两种方式,第一种是输入账号密码登陆,这种应为国内网速的原因,所以登陆起来非常困难。第二种是通过token登陆,下面来演示一下第二种。
登陆github官网,按照如上三张图操作即可生成出一个token,注意生成后要复制保存下来,应为它只会显示这一次!有了token直接将token复制到idea即可登陆。
IDEA使用github
通常我们需要在github上创建远程库,然后再把代码push到github远程库上。但是idea的github插件可以创建远程库并同时将代码push到远程库中,具体步骤如图:
创建好本地库后,就可以push和pull代码了,和客户端一样有https和ssh两种方式。使用步骤如下:
以上两种方式都可以push和pull代码,选择一种即可。
当你想要克隆远程仓库的代码,步骤如图:
Gitee导入Github
码云的使用几乎和github一模一样,码云还可以导入github的仓库。
在码云创建新项目的页面最下面有一个导入已有仓库,点击后输入https即可将github的仓库迁移到gitee上,并且如果修改了github的仓库,只用点击gitee仓库名旁边的刷新图标即可同步过来。