文章目录
概述
(1)git是什么?
git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
git易于学习,占用空间小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。
(2)什么是版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
(3)集中式和分布式的区别
集中式:
版本库是集中的存放于中央服务器的。干活的时候,先要去中央服务器里领取最新的版本,然后在开始干活。干完活在将自己的版本上传到中央服务器。
缺点就是,一但没有网或者网络不好的话,自己写的东西就很难得传上去。别人也不能及时的看到。简单的说就是没有网就不能使用。
分布式:
分布式版本系统没有绝对的所谓中央服务器,每个人的电脑上都有一个版本库,使用的时候就不需要进行联网了,直接自己进行修改就行。当多个人进行写作呢,只需要把你修改的和同事修改的进行交换就行。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
区别:
- 分布式每个人的电脑上都可以直接拷贝完整的代码版本。而集中式只能拷贝自己需要的。
- 分布式的服务器挂掉之后,不会影响工作。而集中式的服务器挂掉之后,根本就没法进行工作。
(4)工作机制
下载和安装
(1)去官网下载安装包
点击跳转官网
根据你的电脑配置选择相应的版本
我选的64位 windows setup。
(2)双击安装程序,开始安装
更改一下安装路径
保持默认
选择编辑器,默认是vim,vim是纯命令行,使用不太方便,正好我安装了VSCode,所以我们选择了VSCode作为默认编辑器。
除了vim,选择其他第三方软件作为默认编辑器,需要安装第三方软件,然后在环境变量配置软件的安装目录。
选择初始化新项目的主干名字,选择默认
选择第一个就行
这个也是默认就行
普通用户选择第一个就行
配置行尾符号转换,选第一个就行
配置终端模拟器与Git Bash一起使用,选择第一个
选择默认
默认
默认,开启缓存
实验室功能,有些功能可能不太成熟,建议不要开启。
安装完成
(3)测试
右键桌面选择“Git Bash Here”。
输入“git --version”查看版本。
常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户名 |
git config --global user.email 邮箱 | 设置用户邮箱 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 将文件提交到暂存区 |
git rm --cached 文件名 | 将文件存暂存区删除 |
git commit -m “日志信息” 文件名 | 将暂存区的文件提交到本地库 |
git reflog | 查看历史记录 |
git log | 查看详细的历史记录 |
git reset --hard 版本号 | 版本穿梭(回到指定版本) |
(1)设置用户名和邮箱
第一次使用Git要先设置用户名和邮箱,打开git bash,输入如下命令设置用户名和密码
git config --global user.name 用户名
git config --global user.email 邮箱
设置好用户名和邮箱后,可以进入你的用户目录(C盘user文件夹里电脑用户名开头的文件夹),在里面有一个配置文件“.gitconfig”。
用记事本打开可以在里边看到你配置的用户名和邮箱。
(2)初始化本地库
随便建立一个文件夹,然后在文件夹内右键打开git bash,输入如下命令这个文件夹就会被初始化为我们的本地库。
git init
成功初始化后显示如下信息:
然后会在我们的目录下生成一个隐藏文件夹“.git”,可以进入看一下,结构如下:
HEAD文件记录当前指向的分支,什么是分支后面会说,现在先提一下。
(3)查看本地库状态
初始化本地库后可以使用如下命令来查看本地库的状态
git status
输入命令后,结果如下
这有三句话,第一句话说我们当前在master分支;第二句说我们还没有提交过东西;第三句说我们没有什么东西可以提交,也就是我们还没有文件,接下来我们创建一个文件演示一下,如何提交文件。
(4)创建一个文件
输入如下命令会创建一个a.txt文件并使用VSCode打开
code a.txt
在文件中编辑一些内容,保存并退出
然后在我们初始化本地库的文件夹中会出现这个文件。
(5)提交到暂存区
再次查看本地库的状态
可以看到我们新建的文件a.txt,但是是红色的,表示还没有被提交,输入如下命令会将文件提交到暂存
git add a.txt
提交后再次查看本地库状态,可以看到文件变绿了,表示我们已经成功提交到暂存区了。
在暂存区的文件我们还可以删除(git rm --cached a.txt),因为还没有提交的本地库,所以不会生成版本信息。如果提交到本地库,就会生成提交记录,记录就会永久保存。
(6)提交到本地库
提交到暂存区后,输入如下命令可以将文件提交到本地库
git commit -m "第一次提交" a.txt
提交后结果如下
(7)查看本地库提交记录
使用如下命令可以查看本地库的提交记录
git reflog 精简的历史记录信息
git log 详细的历史记录信息
结果如下
可以看到提交记录中有精简版和详细版都有一串复杂的号码,那就是我们提交的每个版本的版本号,后面我们可以通过版本号回到想去的版本。
(8)版本穿梭
版本穿梭就是我们可以回到想去的提交过的指定版本,我们可以将文件修改后再提交一次
给文件加上一句话,然后提交到本地库,再次查看本地库的提交记录
可以看到这次有两个记录了,如果我们要回到第一次提交的时候,只需输入以下命令
git reset --hard c764516
其中c764516就是我们第一次提交版本的版本号。执行命令结果如下
再次打开a.txt查看文件内容
可以看到回到我们第一次提交的版本了。
分支
概述
可以认为分支就是当前工作目录中代码的一份副本。使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。在初始化本地Git仓库的时候,Git默认已经帮我们创建了一个名字叫做master的分支。通常我们把这个master分支叫做主分支。在这个主分支的基础上,我们可以创建新的分支、合并分支等功能。
在实际工作中,master主分支的作用是:用来保存和记录整个项目已完成的功能代码。因此,不允许程序员直接在master分支上修改代码,因为这样做的风险太高,容易导致整个项目崩溃,因此我们需要在自己负责开发的分支上进行开发。
常用命令
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定分支合并到当前分支上 |
(1)查看分支
使用如下命令查看当前有哪些分支
git branch -v
结果如下:
当前只有一个分支master,而我们就是在当前分支下(左边有*号)。
(2)创建分支
在master的基础上,我们使用如下命令创建一个新分支,命令如下
git branch branch2
查看分支
可以看到这次有两个分支,其中branch2就是我们新创建的分支。
(3)切换分支
使用如下命令切换到branch2分支
git checkout branch2
再次查看分支
指针已经指向了branch2,再对文件进行操作就是在branch2分支操作了,不会影响master分支。
(4)修改分支内的文件
在分支branch2中修改文件
提交到本地库
(5)合并分支
先切换回master分支,然后使用如下命令将branch2分支的内容合并到master分支中。
git merge branch2
结果如下
这样branch2中的内容就合并到master分支中来了。
(6)冲突合并
上面讲的合并分支是普通合并,在实际生产中,大部分都是冲突合并,为什么会产生冲突呢?合并分支时,两个分支在同一个文件的同一个位置有两套不同的修改,这时候,git就不知道选择哪一个了,就需要我们去手动合并。
接下来演示一下冲突合并。
首先切换到分支branch2中,将文件修改成如下内容,提交到本地库
切回master分支,修改文件成如下内容,提交到本地库
注意了!注意了!要是我们再进行合并,是无法成功合并,会报错的,因为我们同时对两个分支的文件都做了修改,git不知道要保留那个,所以会报错。
接下来将分支branch2合并到master分支中,观察控制台消息
可以看到自动合并失败了,需要我们手动合并,这时我们打开文件看看文件内容
可以看到文件在同一个位置的修改已经被标记出来,将不需要的删除就行,选择要留下来的内容
再次将文件添加到暂存区。
然后将文件提交到本地库,注意,这一次提交就不需要带文件名了,如果带文件名反而提交不成功。
这样就完成冲突合并了。
注:分支与版本的切换实际是指针指向的改变。在.git目录中HEAD文件记录的就是当前指向的分支,在.git\refs\heads文件中会有几个和你的分支名同名的文件,每一个分支对应一个文件,每个文件中记录的就是该分支指向的版本。
团队协作
概述
什么是团队协作呢,如下:
A创建了一个项目,将项目push到远程库,然后B可以将项目clone克隆下来,经过修改后,又将项目push到远程库(必须要有A给的权限才能push),然后A就可以将修改好的项目pull拉下来。这就是团队内协作了,除了可以团队内协作,也可以跨团队协作,如下:
这时候不仅A和B可以修改项目,在另一个团队的C也可以,C先将A远程库的内容fork到自己远程库,然后克隆到自己的本地库,修改一番后push到自己的远程库,然后A将C远程库的内容拉过来进行merge合并。
远程库
要有远程库,我们要先注册一个githup网站的账号。登录账号后选择新建一个仓库(右上角)
填上仓库的名字,一般取项目的名字就行,然后选择public公共库(免费),点击创建就行了。
创建完成后,进入到一个页面,这个页面中记录着我们远程库的地址,有HTTPS和SSH两种类型,记住这个HTTPS的,后面要用。
常用命令
命令 | 描述 |
---|---|
git remote -v | 查看当前所有远程库地址的别名 |
git remote add 别名 远程库地址 | 给远程库的地址起个别名 |
git remote remove 别名 | 删除别名 |
git push 别名 分支 | 同送本地库内容到远程库 |
git clone 远程库地址 | 克隆远程库内容到本地库 |
git pull 别名 分支名 | 将远程库对于分支最新的内容拉下来后与本地分支直接合并 |
(1)设置远程库别名
前面远程库的地址太长了,不太好记,使用如下命令给刚才的远程库取个别名。
git remote add demo1 https://github.com/caiheyu/demo1.git
(2)查看当前所有远程地址的别名
创建好别名后,查看一下是否成功
可以看到成功创建别名,为什么有两个呢,推送和拉取分别有一个。
(3)推送到远程库
使用push命令可以将指定分支上的内容推送到远程库,演示一下将master分支推送到远程库
git push demo1 master
第一次推送会让你登录绑定你的账号,然后就会开始推送,由于githup是国外网站,第一次推送可能会超时,多试几次。
出现这个信息就代表成功了,浏览器打开远程库地址刷新一下就可以看到文件被推送到远程库了。
注:上传远程库到远程库的内容,我们可以在网页直接打开,也可以在网页进行修改。
(4)拉取(pull)远程库到本地库
当远程库中的内容修改以后,和本地库中的内容不同,就可以拉取远程库的更改的内容到本地库,命令如下:
git pull 远程库别名 分支名
测试:
在网页修改一下远程库内容(模拟远程库内容被修改)
在文件末尾加上一句话,然后回到本地库目录,打开git bash,输入拉取命令。
出现上述结果就证明拉取成功了。
(5)克隆远程库到本地库
将远程库的内容克隆到本地库。命令如下:
git clone 远程库地址
注:克隆远程库内容不需要登录账号也能克隆;clone命令会自动帮你初始化本地库;也会自动帮你为远程库地址设置别名,可以自己查看别名。
邀请别人加入团队
如果想让别人也能往你的远程库上push代码,首先你要邀请他成为你的团队成员。步骤如下:
(1)登录你的githup网站,找到你的远程库,点击settings
(2)点击Collaborators
(3)输入密码
(4)选择添加成员
(5)搜索成员的用户名,找到后添加到团队
(6)点击复制邀请链接
(7)将链接发送给成员点击即可
跨团队协作
跨团队协作,就需要两个远程库之间的沟通了,需要的请求有fork、pull request、merge操作。
(1)fork操作,拉取别的远程库内容到自己的远程库
首先打开githup官网
在网站的左上角可以搜索所有的远程库,随便搜索一个,点击进入到它们的远程库。
进入别人的远程库,在右上角,有个Fork,点击,就会进入一个界面,引导你创建一个Fork,也就是让你再创建一个新的远程库。
点击“Create fork”即可完成fork操作。
(2)pull request
完成fork操作后,我们就相当于将别人的远程库内容复制到自己新建的远程库中了,就可以对其进行修改了,就当成自己的远程库操作就行了,修改完成后,我们可以发起pull request请求给原先远程库的创建者。如下
点击第二个“pull requests”。
(3)merge合并
当我们发送pull request请求后,原创建者会收到我们发送的消息,会在这个“pull requests”显示,然后可以点进去查看,可以查看有哪些改变,并可以选择与自己远程库的内容合并。
ssh免密登录
之前我们拉取和推送都是使用的HTTPS协议,那么使用SSH和HTTPS有什么不同呢。主要有如下两点
- HTTPS:拿到url就可以随便clone,但是在push的时候需要验证Github的用户名和密码;
- SSH:Github 需要添加本机的 SSH key; 如果配置SSH key的时候设置了密码,在push的时候需要输入密码,否则直接push。
简单来说,ssh使用较为方便安全。
接下来测试如何使用SSH进行推送。
(1)打开家目录(C盘user目录下和你用户名同名的目录),新建一个目录名为“.ssh”.。
(2)进入.ssh目录,打开git bash,输入如下命令
ssh-keygen -t rsa -C CaiCai
-t指定生成密钥的算法,-C指定标识或注释,可以随意写。
确认执行后,按三次回车。
(3)运行命令后会在该目录生成两个文件,一个公钥、一个私钥。
以“.pub”结尾的是公钥,用记事本打开公钥,复制里边的内容。
(4)打开githup官网,进行如下设置:
点击右上角头像->settings->SSH adn GPG keys->New SSH key
Title随便输一个,将复制的公钥放在key下。点击添加。
验证一下密码。然后就添加成功了,就可以使用ssh进行传输了。
(5)设置完成后,打开测试的远程库,复制ssh远程库地址。
(6)在本地修改文件后,利用ssh远程库地址推送内容到远程库。
修改文件,提交到本地库,然后使用SSH地址推送到远程库
(7)打开远程库,查看文件内容是否提交成功。
注:ssh远程库地址也可以设置别名。
IDEA集成Git
配置忽略文件
什么是忽略文件?为什么要忽略它们?
就是当我们将项目推送到远程库时,要忽略一些文件不将它们上传,这些文件与项目的实际功能无关,不参与服务器上部署运行。把他们忽略掉能够屏蔽IDE工具之间的差异。
怎么忽略?
(1)创建忽略规则文件“xxx.ignore”。前缀名可以随便起,建议是git.ignore。
文件放在那里都可以,但是为了便于寻找,建议也放在家目录下。
(2)配置文件模板内容规则如下:
#号表示注释
*.log表示忽略以log为后缀的文件,也可以指定某个具体的文件名,表示忽略这个文件
要忽略某个目录或文件直接写它的路径和名称就行,
!表示取反,即不忽略某个文件。比如你忽略了某个目录,在这个目录中有一个文件你不想忽略,就可以使用该符号。
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
###############
*.jar
*.war
(3)创建好文件后,将文件配置到".gitconfig"文件中(家目录下),打开“.gitconfig”文件,在文件末尾加上如下格式的内容
[core]
excludesfile = ignore文件的全路径
注意,路径要使用“/”分隔。
配置git程序路径
打开IDEA,创建一个普通的maven项目,点击settings设置,如下:
点击测试看是否出现你的git版本,然后点击应用、确定。
初始化本地库
不需要使用git bash中的命令了,直接在VCS中创建仓库。
添加暂存区、提交本地库
添加暂存区:
初始化本地库后,可以看到文件变红了,变红意味着没有被添加到暂存区。可以右键该文件,选择如下设置即可添加到暂存区。
提交本地库:
添加暂存区的文件就变绿了,变绿是还没有提交本地库,接下来演示提交本地库
选择提交后,输入日志,点击提交。
也可以右键,将整个文件夹提交。
切换版本
点击左下角的Git,在里边选择想要回退的版本,右键选择签出。
分支操作
创建分支&&切换分支
创建分支:
点击右下角的分支名,可以创建新分支
切换分支:
右下角点击分支,选择想要切换的分支,选择签出。
分支合并
切换到主分支,点击其他分支选择合并到master
如果分支有冲突,会提示我们手动合并
远程库
设置GitHub账号
设置->版本控制->GitHub->添加账户
建议选择令牌登录,点击生成会跳转网页
网页填好后选择生成token。
复制token粘贴到IDEA就行了。
创建远程库
填写仓库名,远程地址别名和描述,点击共享,就会在你的githup账户中自动创建一个远程库。
推送
可以自定义远程库别名,本来是origin,是使用HTTPS推送的,我们可以将仓库的SSH链接复制下来,定义一个别名。
我定义了一个别名origin-ssh使用的是ssh的链接。
点击推送。
拉取
选择合并到当前分支,然后就可将远程仓库最新的内容拉取到本地。
克隆
新建项目,选择从VCS获取。
填写URL和选择本地仓库目录。
点击确定,即可自动克隆远程库代码到本地。
码云Gitee
概述
码云是一个国内的代码托管中心,如果无法使用GitHub,可以考虑使用码云。
点击跳转码云官网
要使用码云要先注册账号,使用也和githup网站基本一样,布局也都挺像。
IDEA集成码云
安装插件
安装完插件后重启,进入设置界面,绑定gitee账号
同样也是可以使用账号密码登录或者token口令登录。token需要去网站生成,生成口令具体步骤如下:
右上角头像->账号设置->私人令牌->生成新令牌
写上描述,点击提交,复制口令粘贴到IDEA中。
常用操作
创建仓库
和github基本一样
推送push
推送和github时一样,就是选择远程地址别名时,自定义一个gitee的地址,选择gitee的地址推送就行。
拉取pull
拉取和使用github一样,直接点击拉取图标。
克隆
和使用github步骤一样。选择从VCS获取。
也可在项目内新建,选择来自版本控制的项目。
然后,输入URL时选择gitee的远程库地址
点击确定即可从gitee克隆项目到本地。
导入GitHub项目
可以直接导入GitHub远程仓库到Gitee中。
右上角“+”号,选择“从GitHub/GitLab导入仓库”。
复制github远程库的地址,粘贴到这来,点击导入即可导入成功。
导入成功后,点击仓库名右边的符号可以强制更新,就是如果githup仓库更新内容了,我们可以点击这个符号也更新gitee上的内容。