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

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

Git 工作机制

idea 强制 gitlab token_idea


历史版本是删除不了的,就算在之后的版本覆盖了,还是能切换回未删除时的版本

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

idea 强制 gitlab token_github_02

查看本地库状态

idea 强制 gitlab token_github_03


添加一个文件后,检测到未追踪的文件

idea 强制 gitlab token_本地库_04

添加暂存区

idea 强制 gitlab token_gitee_05


这个时候文件还是可以删除的,删除的只是暂存区的文件,工作区文件还是在的

idea 强制 gitlab token_git_06

将暂存区提交本地库,形成历史版本

idea 强制 gitlab token_git_07

查看版本库

idea 强制 gitlab token_git_08

修改文件

修改文件后显示modified add 后 commit 显示一个文件改变,一行插入,一行删除,因为git中是按照行来维护文件,那一行被删除后在添加上去,指针指向第二个版本

idea 强制 gitlab token_git_09

版本穿梭,切换到指定版本,文件内容也会退回或前进到指定版本的内容

idea 强制 gitlab token_gitee_10


Git 切换版本,底层其实是移动的 HEAD 指针

分支操作

  • 什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

  • 分支的好处

同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。

  • 分支的操作

命令名称

作用

git branch 分支名

创建分支

git branch -v

查看分支

git checkout 分支名

切换分支

git merge 分支名

把指定的分支合并到当前分支上

创建了一个分支后(相当于复制当前指针所指的版本),修改分支的文件,切换回其他分支,发现对其他分支不会产生影响

idea 强制 gitlab token_gitee_11

  • 合并分支

git merge 分支名
hot-fix分支在master最新节点上复制而来,切换至hot-fix分支修改并commit,切换回master马上进行合并则不会产生冲突,因为两个分支都是在同一个节点基础上(master还未产生新的提交)
冲突只会产生在两个分支相同的一个文件之内,新增的文件不会产生冲突。

  • 产生冲突

自动合并失败

上一步的基础上,切换回master后,更改了master再合并,此时回产生冲突,因为git不知道该以那个分支的为准,此时手动去除git在文件中做的冲突标记就可以合并了

idea 强制 gitlab token_本地库_12

需要手动解决冲突,删除标记符号,手动修改到希望留下来的代码
再 git add。这时 git commit 不能带文件名,否则会报错

Git团队协作机制

idea 强制 gitlab token_本地库_13

跨团队协作,其他人可以fork复制一个远程库,再从复制的远程库clone到本地,修改后push到复制的远程库,最后将复制的远程库pull request 推送到被复制人的远程库

idea 强制 gitlab token_idea_14

  • 远程仓库操作

命令名称

作用

git remote -v

查看当前所有远程地址别名

git remote add 别名 远程地址

起别名

git push 别名 分支

推送本地分支上的内容到远程仓库

git clone 远程地址

将远程仓库的内容克隆到本地

git pull 远程库地址别名 远程分支名

将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

GitHub 操作

  1. 创建远程仓库

idea 强制 gitlab token_idea_15

idea 强制 gitlab token_git_16

  • 创建成功后会生成一个仓库地址

idea 强制 gitlab token_gitee_17

  • 创建远程仓库别名
    1)基本语法
    git remote -v 查看当前所有远程地址别名
    git remote add 别名 远程地址

idea 强制 gitlab token_git_18

  • 推送本地分支到远程仓库

git push 别名 分支

idea 强制 gitlab token_gitee_19

  • 克隆远程仓库到本地
    1)基本语法
    git clone 远程地址

idea 强制 gitlab token_git_20

小结:clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名

  • 远程拉取
    git pull 地址或别名 分支

邀请加入团队,只有在团队的人才能往远程库推送代码

idea 强制 gitlab token_gitee_21

填入想要合作的人

idea 强制 gitlab token_gitee_22

复 制 地 址 并 通 过 微 信 钉 钉 等 方 式 发 送 给 该 用 户 , 复 制 内 容 如 下 :

idea 强制 gitlab token_本地库_23


复制的连接发送给需要邀请到的人,同意后就加入了团队

  • 跨团队协作

进入其他人的仓库点击forkfork就可以将仓库叉过来,对代码进行编写了

idea 强制 gitlab token_idea_24

正常commit后,pull request推送到被叉的仓库

idea 强制 gitlab token_本地库_25

被叉的仓库管理员收到pull,点击后审核,点击Merge pull request 合并到当前仓库

idea 强制 gitlab token_idea_26

idea 强制 gitlab token_git_27

ssh免密登陆

IDEA 集成 Git

配置 Git 忽略文件

1)Eclipse 特定文件

idea 强制 gitlab token_git_28


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 初始化

idea 强制 gitlab token_idea_29

创建分支切换分支

idea 强制 gitlab token_gitee_30

合并分支

如在master分支上 合并hot-fix分支,则

修改了hot-fix分支,没修改master所以没有冲突,正常合并

idea 强制 gitlab token_idea_31

冲突合并

在master分支上 合并hot-fix分支

修改了hot-fix分支,也修改了master所冲突,正常合并

idea 强制 gitlab token_idea_32

idea 强制 gitlab token_git_33

左侧是master分支代码,右侧是hot-fix分支代码,中间是没有冲突的代码,箭头是保留,叉是丢弃。完成后点apply就能自动提交

码云集成IDEA(同GitHub一样)

idea安装码云插件

idea 强制 gitlab token_idea_34

添加码云账号

idea 强制 gitlab token_本地库_35


向码云推送

idea 强制 gitlab token_本地库_36


点击push就能推送成功

idea 强制 gitlab token_idea_37

在吗云在线编辑后提交了

idea 强制 gitlab token_gitee_38


重新拉取

idea 强制 gitlab token_idea_39

在码云上导入github项目

复制git的https地址就可以导入了

idea 强制 gitlab token_git_40

强制同步,同步github的更新过来

idea 强制 gitlab token_idea_41

自建代码托管平台-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