Git和IDEA
- Git 概述
- 何为版本控制
- 版本控制工具
- Git 工作机制
- Git 和代码托管中心
- Git 安装
- Git 常用命令
- 初始化本地库
- 查看本地库状态
- 分支操作
- Git团队协作机制
- GitHub 操作
- ssh免密登陆
- IDEA 集成 Git
- 配置 Git 忽略文件
- 初始化本地库
- 创建分支切换分支
- 合并分支
- 冲突合并
- 码云集成IDEA(同GitHub一样)
- 在码云上导入github项目
- 自建代码托管平台-GitLab
- GitLab 简介
- 安装包准备
- 编写安装脚本
- end
Git 概述
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
何为版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,
方便版本切换。
版本控制工具
- 集中式版本控制工具 SVN(Subversion)
- 分布式版本控制工具 Git
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
- 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
- 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
Git 工作机制
历史版本是删除不了的,就算在之后的版本覆盖了,还是能切换回未删除时的版本
Git 和代码托管中心
本地库push到远程库
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库
。
- 局域网 GitLab
- 互联网 GitHub(外网) Gitee 码云(国内网站)
Git 安装
mac已经自带git
Git 常用命令
命令名称 | 作用 |
git config -l | 查看所有配置 |
git config --globaluser.name用户名 | 设置用户签名 |
git config --globaluser.email邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add文件名 | 添加到暂存区 |
git commit -m"日志信息"文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard版本号 | 版本穿梭 |
说明:
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看
到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任
何关系。
初始化本地库
git init
查看本地库状态
添加一个文件后,检测到未追踪的文件
添加暂存区
这个时候文件还是可以删除的,删除的只是暂存区的文件,工作区文件还是在的
将暂存区提交本地库,形成历史版本
查看版本库
修改文件
修改文件后显示modified add 后 commit 显示一个文件改变,一行插入,一行删除,因为git中是按照行来维护文件,那一行被删除后在添加上去,指针指向第二个版本
版本穿梭,切换到指定版本,文件内容也会退回或前进到指定版本的内容
Git 切换版本,底层其实是移动的 HEAD 指针
分支操作
- 什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
- 分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。
- 分支的操作
命令名称 | 作用 |
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
创建了一个分支后(相当于复制当前指针所指的版本),修改分支的文件,切换回其他分支,发现对其他分支不会产生影响
- 合并分支
git merge 分支名
hot-fix分支在master最新节点上复制而来,切换至hot-fix分支修改并commit,切换回master马上进行合并则不会产生冲突,因为两个分支都是在同一个节点基础上(master还未产生新的提交)
冲突只会产生在两个分支相同的一个文件之内,新增的文件不会产生冲突。
- 产生冲突
自动合并失败
上一步的基础上,切换回master后,更改了master再合并,此时回产生冲突,因为git不知道该以那个分支的为准,此时手动去除git在文件中做的冲突标记就可以合并了
需要手动解决冲突,删除标记符号,手动修改到希望留下来的代码
再 git add。这时 git commit 不能带文件名,否则会报错
Git团队协作机制
跨团队协作,其他人可以fork复制一个远程库,再从复制的远程库clone到本地,修改后push到复制的远程库,最后将复制的远程库pull request 推送到被复制人的远程库
- 远程仓库操作
命令名称 | 作用 |
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
|
|
|
|
|
|
GitHub 操作
- 创建远程仓库
- 创建成功后会生成一个仓库地址
- 创建远程仓库别名
1)基本语法
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
- 推送本地分支到远程仓库
git push 别名 分支
- 克隆远程仓库到本地
1)基本语法
git clone 远程地址
小结:clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名
- 远程拉取
git pull 地址或别名 分支
邀请加入团队,只有在团队的人才能往远程库推送代码
填入想要合作的人
复 制 地 址 并 通 过 微 信 钉 钉 等 方 式 发 送 给 该 用 户 , 复 制 内 容 如 下 :
复制的连接发送给需要邀请到的人,同意后就加入了团队
- 跨团队协作
进入其他人的仓库点击forkfork就可以将仓库叉过来,对代码进行编写了
正常commit后,pull request推送到被叉的仓库
被叉的仓库管理员收到pull,点击后审核,点击Merge pull request 合并到当前仓库
ssh免密登陆
IDEA 集成 Git
配置 Git 忽略文件
1)Eclipse 特定文件
2)IDEA 特定文件
.idea目录 、.iml文件、maven的target目录
问题 1:为什么要忽略他们?
答:与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。
问题 2:怎么忽略?
1)创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore)
这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下
git.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, see
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
初始化本地库
新建了一个工程后,选择VCS就可以将当前工程进行git init 初始化
创建分支切换分支
合并分支
如在master分支上 合并hot-fix分支,则
修改了hot-fix分支,没修改master所以没有冲突,正常合并
冲突合并
在master分支上 合并hot-fix分支
修改了hot-fix分支,也修改了master所冲突,正常合并
左侧是master分支代码,右侧是hot-fix分支代码,中间是没有冲突的代码,箭头是保留,叉是丢弃。完成后点apply就能自动提交
码云集成IDEA(同GitHub一样)
idea安装码云插件
添加码云账号
向码云推送
点击push就能推送成功
在吗云在线编辑后提交了
重新拉取
在码云上导入github项目
复制git的https地址就可以导入了
强制同步,同步github的更新过来
自建代码托管平台-GitLab
GitLab 简介
GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有
wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby 语言写
成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。GitLab 被 IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX 等组织使用。
GitLab 官网地址
官网地址:https://about.gitlab.com/
安装说明:https://about.gitlab.com/installation/
准备一台虚拟机,关闭防火墙、能访问外网、配置好ip
安装包准备
Yum 在线安装 gitlab- ce 时,需要下载几百 M 的安装文件,非常耗时,所以最好提前把所需 RPM 包下载到本地,然后使用离线 rpm 的方式安装。直接将此包上传到服务器/opt/module 目录下即可。
下载地址:https://packages.gitlab.com/gitlab/gitlabce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
编写安装脚本
安装 gitlab 步骤比较繁琐,因此我们可以参考官网编写 gitlab 的安装脚本。
直接用vim创建一个脚本,注意第一行安装文件的目录vim gitlab-install.sh
sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
sudo yum install -y postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlabce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlabce
end