Git 概述、命令、分支,免密登录;及 Idea 集成 GitHub
Git
Git 概述
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目
Git 易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具
集中化的版本控制系统诸如 CVS、SVN 等、都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易
事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷
- 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
- 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
Git 分为工作区(本地磁盘)-暂存区(临时存储)-本地库(历史版本)-远程库(托管中心)
- Git 的当前版本是基于上一版本的,因此不能删除历史版本
- 代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库
- 局域网:GitLab
- 互联网:GitHub、Gitee
Git 安装
略
Git 命令
常用命令
命令名称 | 作用 |
---|---|
git config --global user.name | 设置用户签名 |
git config --global user.email | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “提交说明” 文件名 | 提交到本地库 |
git reflog | 查看历史记录(含版本号前七位) |
git reset --hard 版本号 | 版本穿梭 |
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码
这里设置的用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系
较之于 git reflog,git log 可以看到更完整的历史记录(包含日期、用户名、邮箱和完整版本号)
Git 版本穿梭的底层是修改指针引用
- head → master → second(指向 master 分支的第二版)
- head → master → first(指向 master 分支的第一版)
Git 分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本(分支的底层其实也是指针的引用)
分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可
Git 分支命令
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
合并分支时,若两个分支在同一个文件的同一个位置(这里指同一行或相邻行,间隔一行不会触发)有两套完全不同的修改。Git 就会认为发生了合并冲突
此时需要手动进行修改,并将修改后的文件添加到暂存区,提交到本地库,即合并成功
合并分支只会修改一个分支(被合并的分支)
创建分支的本质就是多创建一个指针,head 指向当前所在的分支的提交
跨团队协作(跨仓库)时,才会使用 fork 和 merge 操作
Idea 集成 Git
配置 Git 忽略文件(有些文件与项目的实际功能无关,不参与服务器上部署运行。把他们忽略掉能够屏蔽 IDE 工具之间的差异)
-
创建忽略规则文件 xxxx.ignore(一般是 git.ignore)
-
.ignore 文件模板内容如下
# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs hs_err_pid* .classpath .project .settings target .idea *.iml
-
在 .gitconfig 文件中引用忽略配置文件
[core] excludesfile = C:/Users/asus/git.ignore
在 Maven 中也可以直接配置 ignore
Idea 初始化本地库:VCS(Version Control Setting)→ Import into Version Control → Create Git Repository
Idea 中标红的文件表示未添加到暂存区
Idea 中标绿的文件表示已添加到暂存区
Idea 中标蓝的文件表示已添加到暂存区,并被再次修改了
Idea 添加到本地库:右键项目→ Git → Add,会提示 The following dictory may contain ignored files. Do you want to force add it? 这时点击 Cancel,即添加成功
Idea 提交到本地库:右键项目→ Git → Commit Directory,输入提交说明,点击 Commit
Idea 中正常标黑的文件表示已提交到本地库,不需要再提交了
Idea 切换版本:左下 Version Control → Log 可以查看所有分支版本和当前分支版本,在要切换的版本上右键点击 Checkout Revision ‘xxxxxxxx’
在 Idea 中,既可以将 head 指针指向某个版本,也可以将 head 指针指向某个分支指针(如 master,这也是默认的行为)
Idea 创建分支:右键项目→ Git → Repository → Branches → New Branch
在 Idea 的右下角状态栏也会显示当前处于哪个分支,可点击并创建的新分支
若勾选 Checkout branch,则不仅会创建分支,还会切换到新分支
Idea 合并分支:在右下角状态栏点击分支,点击要合并来的分支,点击 Merge into Current
Idea 冲突合并:会弹出标题为 Conflicts 的弹窗,可选择:
- Accept Yours
- Accept Theirs
- Merge…(手动合并)
GitHub
创建远程库
点击 New repository,输入远程库名字(建议和本地库名字一致)
常用命令
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址 |
git remote add | 添加远程地址 |
代码推送 Push
略
代码拉取 Pull
拉取动作会自动提交本地库(一般用于合并代码)
代码克隆 Clone
从公共库克隆代码不需要登录账号
Clone 会做如下操作:
- 拉取代码
- 初始化本地库
- 创建别名
SSH 免密登录
ssh-keygen -t rsa -C atguiguyueyue@aliyun.com
生成公钥后,复制到 GitHub 的 SSH keys 中
此后,可以使用 SSH 链接在 Git 进行拉取和推送(不必登录)
Idea 集成 GitHub
push 操作:
- 在进行 push 操作之前,确保先进行了 pull 操作,以便将远程库的最新更改合并到本地库中
- 如果本地库的版本比远程库的版本高(有新的提交),则在 push 之前需要先进行合并操作,以解决可能存在的冲突
- 确保解决冲突后,再进行 push 操作,将本地库的更改推送到远程库
pull 操作:
- 在进行 pull 操作之前,确保先进行了 commit 操作,将本地的修改保存到本地库中
- 如果远程库的版本比本地库的版本高(有新的提交),则进行 pull 操作将远程库的更改合并到本地库中
- 如果合并过程中存在冲突,需要解决冲突后再进行 commit 操作
clone 操作:新建时,选择 Get from Version Control
Gitee
创建远程库
略
Idea 集成 Gitee
略
Gitee 连接 GitHub 进行代码的复制和迁移
码云(Gitee)提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载
- 导入已有仓库
- 已导入的 GitHub 仓库内容更新后,可在 Gitee 中选择强制同步,覆盖 Gitee 仓库
GitLab
GitLab 服务器的搭建和部署
略
Idea 集成 GitLab
略