Git、GitHub与GitLab区别

首先我们要知道的是,Git与GitLab不是一个东西,git是一个可以进行版本控制的操作工具,而GitLab则是一个用来托管文件的远程仓库。

GitLab与GitHub最大的区别就是可以使用自己的服务器进行托管,相比GitHub来说更安全高效,适合团队内部开发。

具体步骤

第一步:新建小组以及项目

首先登录GitLab官网:http://git.lzops.com,输入账号密码然后开始进入。初始的有两个框框,新建项目和新建小组。

img

我已经建好了小组:lz_bigdata,还有一个项目:lzjr_first。

img

第二步:进行远程仓库GitLab与Git版本控制系统的关联

在GitLab空的项目中我们会发现一些系统中给出的提示操作,例如本地Git如何连接远程仓库的一些命令

img

第三步:安装Git分布式版本控制系统,与远程仓库GitLab进行连接

  • 去Git官网:https://git-scm.com 下载Window版64位的安装包,然后安装成功后,在桌面点击鼠标右键会发现多出两行命令。

img

  • 点击Git Bash Here,会出来一个黑窗口,便是Git的命令界面。

img

  • 分别输入之前远程仓库GitLab中的命令提示,按回车执行
git config --global user.name "bigdata"
git config --global user.email "shengliang.fan@lianzhongjinrong.cn"

img

第四步:生成公钥并在远程仓库添加本地密匙

  • 找到GithLab右上角的头像下拉菜单,点击Settings

img

  • 在Profile选项中的Email中找到账户的邮箱,其实邮箱之前在空仓库的提示命令中已经有了。这里多说是因为一会儿我们要把生成的公钥填到SSH Keys中。

img

  • 在Git系统中输入如下命令,大家可以换成自己的邮箱即可
ssh-keygen -t rsa -C "shengliang.fan@lianzhongjinrong.cn"
  • 按下回车后,会出来几次信息确认,账号、密码和确认密码,这里可以直接回车过掉,如果做了校验,那后面每次提交文件到远程仓库或者克隆远程仓库文件到本地都会要求输入密码,很麻烦,所以如果不是非常机密,不建议这么做。

img

  • 确认之后,会出来一串看不懂的密匙图案,说明生成密匙成功。

img

  • 生成的秘钥一般会在根目录的 .ssh 目录下,目录下有两个密匙,id_rsa和id_rsa.pub,分别是私钥和公钥。

img

  • 这里如果电脑中文件过多,秘钥不好找的话给大家推荐一种小软件:everything,找文件比系统的全盘搜索快了N倍。强烈推荐使用!!!

img

  • 然后我们用日记本或者其他编辑器打开公钥:id_rsa.pub文件,切记,是公钥id_rsa.pub文件!!!
  • 打开后我们会发现很长一串子字母符号

img

  • 我们全选然后复制,打开上面中提到的,点击GitLab的右上角头像中的Settings,里面有一个 SSH Keys选项,点开后将刚才的公钥粘贴到Key的框框中,然后取一个标题。点击Add key,就OK了。

img

  • 如下图,说明本地与远程的密匙连接就成功了。

img

第五步:使用Git在本地Clone远程项目,并上传本地文件到远程项目中

  • 在Git中输入下面的命令
git clone git@git.lzops.com:lz_bigdata/lzjr_first.git
  • 后面是远程仓库的SSH地址或者HTTP地址,在如图中可以直接复制拿到

img

  • 输入上面命令回车后,会有提示,直接输入yes回车即可

img

  • 根据提示我们能看到,已经把远程仓库的空项目拉到本地了,在本地也可以看到名字为远程项目名的文件夹lzjr_first

img

  • 打开会发现有个名为 .git 的文件夹,其实这是个隐藏文件,保存一些需要上传到远程的副本。关于如何显示隐藏文件以及文件后缀名,可以打开电脑上面的查看,在右边会有文件拓展名和隐藏的文件选项,勾上就好了。

img

  • 这时候我们就可以上传本地的文件到远程仓库GitLab了。
  • 例如我新建了如下几个文件夹,用来存放后期需要整理的文档需求,然后还要新建一个名为 README.md 的说明文件,用来说明这个项目的作用,此文件必须是MarkDown文档格式。(关于MarkDown文档大家可以自行百度,MarkDown文档编辑器强烈推荐使用Typora,毕竟好用颜值也高。现在的很多笔记工具也都支持了MD的格式,如:有道笔记、印象笔记、简书、CSDN等)

img

  • 然后我们在此处重新打开Git系统,输入下面的命令
git add .		## 添加除了删除之外的变化
git add -U ## 只添加增加的也就是更新的那部分变化
git add -A ## 添加所有的变化
  • 这个命令是将未提交内容添加到暂存区,关于git add .git add -U 还有git add -A 的区别,大家可以去百度看详细资料,推荐使用 git add . !!!
  • 接下来是将这些变化提交到本地仓库,这里的 -m 建议加上,不然后面做了什么修改会不清楚
git commit -m '解释说明'

img

  • 在提交前和提交后我们都可以用如下命令来监视 目前文件的提交状态
git status

img

  • 最终是将本地仓库的文件推送到远程仓库
git push -u origin master

img

  • 看到如上的提示语,说明提交到远程就完成了。
  • 最后回到远程GitLab中,会看到 README.md 这个文件。并且在GitLab中是支持md格式的文档的。

img

这里会发现一个问题,我明明还创建了5个文件夹,这里怎么没推送过来呢?

其实这是因为在Git中不支持推送空的文件夹,这个也没事,等以后有了文件之后,再推一下就会过来啦。

今天的教程就到这里,谢谢大家!!!

分支的新建与合并

在Git版本控制中,有个主分支master与其他分支的概念,分支的好处在于每个分支都是对主项目的映射,在不影响项目正常运行的前提下也起到了安全备份的作用,使丢失率大大降低,这也对应了分布式的理念和思想。

注意:分支名称推荐使用自己的名字首字母缩写,如我的:xss

一、创建并切换分支

首先,我们假设你正在你的项目上工作,并且已经有一些提交。

img

现在,新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令:

$ git checkout -b xss

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch xss
$ git checkout xss

img

根据箭头所指可以看到当前分支名称已经切换。

img

二、查看分支

然后,用git branch命令查看当前分支:

$ git branch

git branch命令会列出所有分支,当前分支前面会标一个*号。

img

然后,我们就可以在xss分支上正常提交,比如对README.md做个修改,然后提交:

$ git add README.md		## 加上文件名则只提交此文件,.和-A则提交全部
$ git commit -m "branch test"

img

你继续在分支xss上工作,并且做了一些提交。 在此过程中,xss 分支在不断的向前推进,因为你已经检出到该分支(也就是说,你的 HEAD 指针指向了 xss 分支)

img

版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

现在,xss分支的工作完成,存在两种情况:

1、将本地分支推送到远程,直接在远程页面合并

  • 直接将分支xss推送到远程:
$ git push origin xss

img

  • 推送成功后,在远程GitLab可以看到已经新建了一个xss分支,以及分支下刚刚更新的文件

img

  • 而主分支中没有更新的文件!!!

img

  • 去远程GitLab中的项目中点击右上角的Merge request图标,选择你要合并的项目

img

然后如图选择你要进行合并的分支来源和分支目标。我们更新的内容在xss分支上,要将它合并到master主分支中。

img

然后提交合并,通过即可。

这时到远程GitLab中查看会发现,xss分支中的更新内容已经合并到master主分支中了,而且xss分支中的内容也还在,可见此合并过程实际是个拷贝覆盖的过程。

img

2、将本地分支直接合并到主分支,然后推送到远程

先切换回master分支:

$ git checkout master

img

切换回master分支后,再查看一个README.md文件,刚才添加的内容不见了!因为那个提交是在xss分支上,而master分支此刻的提交点并没有变:

>$ git log  ##查看历史提交记录
>

img

合并分支到主分支

现在,我们把xss分支的工作成果合并到master分支上:

$ git merge xss

img

git merge命令用于合并指定分支到当前分支。合并后,再查看README.md的内容,就可以看到,和dev分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

img

如图所示,分支的C3版本被合并到主分支master上。

提交结果到远程

最后将本地提交到远程GitLab即可

$ git push origin mater

img

这两种合并的方法都可以,这里暂时为了简单推荐第一种。大家在自己的分支中区操作整理,然后定期更新合并到主分支master中就可以了!!!

关于合并中的冲突解决可以去看廖雪峰老师的教学,很不错。(最简单的方法就是使用get pull命令,将远程的部分拉过来并与现在的合并后,再推送回远程即可)

分支常用命令

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>