目录
Git介绍:分布式坂本控制工具 vs 集中式版本控制工具
Git安装:基于官网发布的最新版本2.38.1安装讲解
Git命令:基于开发案例 详细讲解了git的常用命令
Git分支:分支特性 分支创建 分支转换 分支合并 代码合并冲突解决
idea集成Git
创建远程库
代码推送 Push
代码拉取 Pull
代码克隆 Clone
SSH免密登录
idea集成Github
码云创建远程库
idea集成Gitee码云
码云连接Gitee进行代码的复制和迁移
GitLab服务器的搭建和部署
Idea集成GitLab
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
个人开发过渡到团队协作。
版本控制工具
cVS、SVN(Subversion)、VSS.... ..
集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

Git、Mercurial、Bazaar、Darcs.... . .
像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
2.每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)


代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
局域网
GitLab
互联网
GitHub(外网)
Gitee码云(国内网站)

初始化本地库

基本命令
设置用户签名(--global 可以去掉,去掉的话配置就不是全局的)
git config --global user.name 用户名 git config --global user.email 邮箱


windows设置完上面的内容,去C盘的与当前windows用户名同名目录下,会有.gitconfig文件,文件内容就是设置的全局用户名、邮箱
git init 初始化git,生成隐藏的 .git 目录
Linux 命令 ll -a 能显示隐藏文件
在 git init结果: On branch master # 当前分支 No commits yet # 当前内容还没有提交 nothing to commit (create/copy files and use "git add" to track) # 有哪些东西可以commit
这时候添加一个文件
git add xx 将xx目录、文件添加进暂存区
“git add .” :将此目录下的所有文件都添加到暂存区

将xx目录、文件从暂存区删掉

用于从暂存区中删掉 git add 命令添加进的目录、文件
这个删除只是从git暂存区中删掉,目录、文件的物理实体依旧存在
将xx目录、文件提交到本地库
如果没有给出xx,默认就提交add进暂存区的内容

查看引用日志信息,可以看版本信息(精简的版本号,提交备注)

查看更详细的日志信息(完整版本号,提交人,提交时间,提交备注)
版本穿梭,到版本号指定的那个版本
版本号就是 git reflog、git log 显示内容中的那串码
用于在同一个分支中切换到不同提交的版本
当合并冲突时,当前分支会变为merging状态,取消merging状态命令 git reset --hard head,这里的head不是版本号,就是head

显示所有分支,当前所在分支前会有星号*

git branch 分支名 创建分支,默认会以当前分支为基础创建,也就是新分支的内容就是当前分支的现有内容
git branch -v 查看当前分支
切换分支

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

远程库操作 git remote -v 查看当前所有远程地址别名
别名 远程地址 给“远程地址”起“别名”,别名一般都会是 origin 创建别名后 git remote -v 查看会看到两个,一个用来 fetch 拉取,一个用来 push 推送 注意“远程地址”是github或gitee或gitlab提供的http或https开头的,不是ssh的

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

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

将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
其他 指针 HEAD -> 分支名 -> commit提交版本

我们所说的指针都是指向具体版本记录的指针,当前是哪个分支是由HEAD指针决定的,HEAD指向哪个分支指针,我们就在哪个分支上 所以创建分支的本质就是多创建一个指针;切换分支就是把HEAD指向另一个版本指针
冲突 冲突原因 两个分支在同一个文件的同一个位置有两套完全不同的修改,合并的时候Git无法替我们决定使用哪一个,就产生了冲突
在有冲突的时候合并,会提示错误并且当前分支会变为merging状态

当合并冲突时,当前分支会变保持为merging状态 撤销merging状态命令 git reset --hard head,这里的head不是版本号,就是head
在分支是merging状态时,打开提示有冲突的文件,会发现这样的内容:
<<<<<<< HEAD
当前分支下的内容
要与当前分支合并的另一分支下的内容
========
另一分支的名字

1.首先要解决冲突的文件内容 编辑提示有冲突的文件内容,将冲突的部分手动解决,保存退出
2.添加文件到暂存区 git add 目录或文件名
3.最后提交本地库 git commit -m "备注" 注意,这条命令不能在最后带有“目录或文件名”
将所有冲突的内容提交本地库后,就会发现分支的merging状态消失了

背景 1.本地创建的项目,想推送到自己的远程库 2.远程库没有对应项目,需要新建
操作 远程: 新建仓库 复制仓库地址(http或https开头的,非ssh) 本地:(在项目目录下用git bash操作,默认本地分支是master) git init git status (非必须,这里就是为了看下git状态) git add . git branch (非必须,看git分支) git commit -m '注释' git remote add 远程仓库别名(一般是origin) 远程仓库地址 git remote -v (非必须,看远程分支) git push origin master -f (强制推送,本地会全部覆盖远程,这里只针对远程仓库为空的情况)
如果远程也有内容,即不可以强制push以本地覆盖远程,可参考下面的(本人没试过,不知道效果) git branch 本地新分支名 // 这中间是不是要加一个切换到新分支的过程? “git checkout 本地新分支名” git push 远程仓库名 远程分支名
远程的有些文件或目录想忽略掉,但一开始上传时这些内容都上传到仓库了,现在想根据新的 .ignore 文件 “刷新” 一下远程库,将已经上传的文件从远程库删掉
操作 本地:``配置 .ignore 文件git rm -r --cached .git add .git commit -m '注释'git push 远程仓库别名 远程分支名

如果出现 401 等情况连接不上的,是因为网络原因,可以使用以下方式连接:

然后去 GitHub 账户上设置 token


复制红框中的字符串到 idea 中。

点击登录。


来到 GitHub 中发现已经帮我们创建好了 gitTest 的远程仓库。
右键点击项目,可以将当前分支的内容 push 到 GitHub 的远程仓库中。



注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
右键点击项目,可以将远程仓库的内容 pull 到本地仓库。

注意:pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

为 clone 下来的项目创建一个工程,然后点击 Next。
众所周知,GitHub 服务器在国外,使用 GitHub 作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内的项目托管网站-码云。
码云是开源中国推出的基于 Git 的代码托管服务中心,网址是 https://gitee.com/ ,使用方式跟 GitHub 一样,而且它还是一个中文网站,如果你英文不是很好它是最好的选择。
进入码云官网地址:https://gitee.com/,点击注册 Gitee,输入个人信息,进行注册即可
点击首页右上角的加号,选择下面的新建仓库

Idea 链接码云和链接 GitHub 几乎一样,安装成功后,重启 Idea。
Idea 重启以后在 Version Control 设置里面看到 Gitee,说明码云插件安装成功。

然后在码云插件里面添加码云帐号,我们就可以用 Idea 连接码云了。
Idea 连接码云和连接 GitHub 几乎一样,首先在 Idea 里面创建一个工程,初始化 git 工程,然后将代码添加到暂存区,提交到本地库,这些步骤上面已经讲过,此处不再赘述。
➢ 将本地代码 push 到码云远程库

自定义远程库链接。
给远程库链接定义个 name,然后再 URL 里面填入码云远程库的 HTTPS 链接即可。码云服务器在国内,用 HTTPS 链接即可,没必要用 SSH 免密链接。
然后选择定义好的远程链接,点击 Push 即可。
看到提示就说明 Push 远程库成功。

去码云远程库查看代码。
只要码云远程库链接定义好以后,对码云远程库进行 pull 和 clone 的操作和 Github 一致,此处不再赘述。
码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。
具体操作如下:

如果 GitHub 项目更新了以后,在码云项目端可以手动重新同步,进行更新!
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 等组织使用。
官网地址:https://about.gitlab.com/
安装说明:https://about.gitlab.com/installation/
服务器准备
准备一个系统为 CentOS7 以上版本的服务器,要求内存 4G,磁盘 50G。关闭防火墙,并且配置好主机名和 IP,保证服务器可以上网。此教程使用虚拟机:主机名:gitlab-server IP 地址:192.168.6.200
安装包准备
Yum 在线安装 gitlab- ce 时,需要下载几百 M 的安装文件,非常耗时,所以最好提前把所需 RPM 包下载到本地,然后使用离线 rpm 的方式安装。
下载地址:
https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
编写安装脚本
安装 gitlab 步骤比较繁琐,因此我们可以参考官网编写 gitlab 的安装脚本。
- [root@gitlab-server module]# 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/gitlab-ce/script.rpm.sh | sudo bash
-
- sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
给脚本增加执行权限

然后执行该脚本,开始安装 gitlab-ce。注意一定要保证服务器可以上网
初始化 GitLab 服务

启动 GitLab 服务

使用浏览器访问 GitLab
使用主机名或者 IP地址即可访问GitLab服务。需要提前配一下windows 的hosts 文件。

GitLab 创建远程库
IDEA 集成 GitLab
➢ 1)安装 GitLab 插件
push 本地代码到 GitLab 远程库
自定义远程连接
1、 先把master主分支上的代码与远程仓库同步到最新版本。直接从远程仓库pull下来
2、 在本地创建并切换到工作分支,创建完成后会自动切换到该分支(这时候master/work分支的内容是相同的。)
3、 编写代码。
4、 完成后,add commit到work分支
5、 将主分支从远程仓库pull最新的版本下来。
6、 将工作分支合并到主分支
先切换到主分支master
选中要合并的分支work,点击merge
如果有冲突,则需要手动解决冲突
7、 这时候所有在work分支上做得修改就会合并到主分支上。
8、 最后就可以push到远程仓库上了。
关于分支切换的两个注意点
分支切换一定要先add/commit当前分支上的修改,然后如果在修改完代码后没有提交,就想切换,idea会提示是否进行smart checkou,如果你点击yes你就完完了,idea会把当代分支上的修改,保存到你要切换的另一个分支上。这样一样就乱套了。
如果当前工作分支上有很多bug不想提交,那么你可以先隐藏当前工作分支上的修改,stash(隐藏),然后切换到另一个分支上,那么下次你又切换回工作分支的时候,你可以通过unstash把修改的代码重新显示出来。