git及gitlab的使用

 

一.git基本简介

1.分布式版本控制系统(git)与集中式的版本控制系统的区别

 

2.1集中式 (cvs;svn等)

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

 

2.2分布式  (BitKeeper,git等)

分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

 

3. 三种状态

Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

3.1暂存区:index或staging area

暂时存放文件的区域,此时文件已执行 git add aa.html命令,但未执行git commit –m “aa” 命令 

3.2工作区:work area

工作的区域

 3.3本地仓库:Local repository

自己工作的电脑上保存版本数据的地方 此时文件已经执行 git commit –am “aa”命令

3.4远程仓库:Remote repository

     远程仓库,我们用git进行操作,为防止数据在自己电脑上丢失,比如错误删除,电脑中病毒等造成数据丢失,我们需要将自己的工作文件备份到远程服务器上。这个服务器我们可以理解成为远程仓库。

 

二.Git基本命令

1. git congfig –global user.name “xuzhan”

(设置用户名)

2. git congfig –global user.emial xuzhan@antiy.cn

(设置用户邮件)

3. git helpconfig

(请求帮助查看命令)

4. mkdir demo

创建一个名为demo的文件夹

5. git init

 5.1 cd demo //进入demo文件夹

   此时demo文件夹状态是空的

 5.2    git init //命令创建一个空的Git仓库或重新初始化一个现有仓库。

 5.3    再进入demo文件夹,

   发现多了 一个.git文件夹   注:此文件夹是隐藏的

6.创建并修改文件

 nano aa.html  或 touch aa.html(随便创建一个文件,并写点什么)

7.git add aa.html(跟踪aa.html文件)

    此时add前后,可用git status -s 查看文件状态

8  git commit –m“aa”(把已经跟踪的文件提交到版本库中)

     commit 前后可用 git log  查看文件状态

 *git commit –am“aa”=git add aa.html+git commit –m “aa”

跳过暂存区,直接将文件提交到版本库中。

注:上面为常用命令,不是所有命令。

 

三 git分支

首先我们先写一个aa.html 件  里面写一个 1

然后执行git commit –am“”命令 

重复三次。(即 123,各占一行)

1. git branch  查看分支情况

* master

此刻内部分支是这样的。

 

 

 

2. git branch testing(新建分支testing)

插入分支 testing

git branch 发现现在head (*) 指针在master分支上

3. git checkout  testing  切换到testing分支上 

3.1此时内部分支情况是这样的(没有切换时,head是指向master的)

 

 3.2我们再编辑一次 aa.html

       此时内部分支是这样的

 3.3回到master分支验证一下

 在master上查看aa.html, 如果没有4,则验证。(发现切回后真的没有4)

4. git merge testing (合并testing分支)

4.1转到master分支

4.2输入git merge testing (合并testing分支)

显示已经快速合并,没有分支冲突。

5. git branch –d testing (删除testing分支)

显示已经清除分支 现在状态如下

 6. git stash  (储藏当前状态)

6.1建一个xiaipao 分支 并写成以下形式

 

 6.2现需要回到master分支上增加一个6.

  这时如果xiaipao分支上的工作没有提交到版本库上,如果要转到master分支上,会产生分支冲突。所以要先储藏当前状态再切换,由于我已提交,不做演示。执行以下三个命令

1. git stash(储藏当前状态)

2. git stash list(查看储藏列表)

3. git stash list 列表上的名字 (就会转到刚刚的工作状态)

 

7   在master上再建立一个分支dapao,并添加6,

7.1   此时分支状态如下

 

 7.2 合并master(4)分支和dapao(6)分支

    7.2.1先回到master分支

    7.2.2合并两个分支

    7.2.3现在分支情况

7.3删除dapao分支

git branch -d dapao

7.4回到xiaipao上添加一个7

7.5合并master和xiaipao分支

7.6此我们执行git merge xiaipao 会发生合并冲突

因为xiaipao的第六行是7 而master是 6,但是git只能有一个答案。这时需要自己人工解决冲突。

7.7解决冲突

冲突原因:在同一个位置写出了两个不同的代码,此时需要人工选择到底需要拿一个代码

我们修改为下面内容:

7.8解决好后上传储存

 

7.9.打开我们的demo文件夹,查看aa.html。

 

四.gitlab 使用

1.四个平台

目前基于 Git做版本控制的代码托管平台有很多种,比较流行的服务有 Github、Bitbucket、GitLab、 Coding,

·      Github

GitHub是第一个供“用Git进行版本控制系统的软件开发项目”使用的基于Web的代码托管服务,是目前全球最大的开源社交编程及代码托管网站。GitHub 于 2008 年 4 月 10 日正式上线,除了基本的服务以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。

·      Bitbucket

BitBucket是2008年创建的源代码托管网站,采用 Mercurial 和Git 作为分布式版本控制系统,同时提供免费账户和商业计划。2010 年被 Atlassian 收购,与 Atlassian 的其他服务(Git GUI SourceTree、HipChat、Cloud9)顺利集成,主要面向慈善企业和企业用户/其主要市场是大型企业。

·      GitLab

GitLab是一个利用 Ruby on Rails开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。

·      Coding
Coding是一个面向开发者的云端开发平台,目前提供代码托管,运行空间,质量控制,项目管理等功能。此外,还提供社会化协作功能,包含了社交元素,方便开发者进行技术讨论和协作。2016年 3 月 CODING 宣布收购代码托管平台 GitCafe。也许是目前国内体验最接近 github 的产品。

 

总结:

·    如果你想要一个免费开源的解决方案,GitLab也许比较吸引人;

·    如果你正在开发一个开源项目想取得更多的关注,那 GitHub毫无疑问是第一选择;

·    如果你想要免费的私有库,并在使用 Atlassian的其他产品(例如:Confluence,Jira, SourceTree...),代码托管在 Bitbucket 绝对用起来会很爽;

·    如果你想要免费私有代码仓库,想获得更多的中文支持或正在使用 Coding WebIDE,Coding 明显更适合。

 

2.gitlab使用

2.1.进入https://git.avlyun.org/并注册账户

2.2.输入 ssh-keygen _t rsa –C “xuzhan@antiy.cn 获得公钥和私钥。并将公钥配至https://git.avlyun.org

  2.2.1打开自己的c盘下的用户文件夹会发现多了一个.ssh文件夹。

  2.2.2打开后会发现有两个文件id_rsa和id_rsa.pub

  2.2.3打开id_rsa.pub并复制该内容。添加到gitlab中

2.3 输入 ssh git@git.avlyun.org 命令和远程服务器建立连接。

2.4进入git@git.avlyun.org新建一个项目

2.5按照提示建立本地与远程连接

2.6做完后我们打开https://git.avlyun.org后进入project发现mydemo已经上传。

 

五补充

1.如何将自己的本地的master分支提交到gitlab的xuzhan分支?

git push origin master: xuzhan

2.注意修改代码前一定要保持自己的分支和master分支是同步的,修改完成后,也要注意自己的分支是否和master分支同步,否则当你push代码时,会报如下错误。

3.代码回滚

  1. git log查看要回滚的代码Hash值
  2. git reset --hard Hash值 回滚代码
  3. git push -f origin master:xuzhan强制提交代码

4.git status查看状态,也可用git status -s简洁版来查看状态

5.git show hash值  查看某次提交的具体内容

6.git diff 当你修改一个文件后(还未git add)这是使用git diff可以查看修改的地方

7.配置用户名和密码

  $ git config --global user.name "maxsu"

  $ git config --global user.email "yiibai.com@gmail.com"

  切记此操作只使用一次即可,如果需要在某一个地方使用不同的用户名和邮箱

  $ git config  user.name "maxsu"

  $ git config user.email "yiibai.com@gmail.com"

8.添加配置

  $ git config -–add site.name yiibai

  删除配置

  $ git config --local -–unset site.name

9.git reset

(1)当你git add了一个东西后,但是你突然不想add了,这时 git reset 文件名 即可回撤

(2)同理 git reset --soft head 也一样

10.查看本地分支及远程分支

$ git branch -a

11.修改分支名称

$ git branch -m旧分支名 新分支名

12.pull指定分支

$ git pull <远程主机名> <远程分支名>:<本地分支名>

13.比较两个分支的不同

gitlog dev...master

(1)查看 dev 有,而 master 中没有的:

gitlog dev ^master

(2)查看 dev 中比 master 中多提交了哪些内容:

gitlog master..dev

14.git删除远程分支

  $ git push origin :分支名

  注:$ git push -f origin本地分支:远程分支

  就是先删除远程分支,然后在推送与之相同的分支名

15.统计进行过多少次commit

  $ git shortlog

  -s  仅显示次数不显示具体内容  简洁版

  -n 排序 从多到少排序

 

版权声明:本文为weixin_38617363原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。