Git/Gitlab

git/gitlab
git是一个开源的分布式版本控制系统,可以非常有效、高速地处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库。
所以,工作的时候就不需要联网了,因为版本库都是在自己的电脑 上。现在每个人的电脑都有一个完整的版本库,那多个人如何协作呢?
比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

git的主要特点如下:
1、版本控制
2、分布式
3、工作过程是将服务器上的代码下载到本地,本地开发完成以后,再提交到服务器。
git 相对于svn功能更加强大,命令也更多。

git于svn对比:
1、git是分布式的,svn是集中式的。
2、git是每一个版本都存储完整的文件,便于恢复,svn是存储差异文件。(核心)
3、git可以离线完成大部分操作。svn则不能。
4、git有更优雅的分支和合并实现。
5、git有更强的撤销修改和修改历史版本的能力。
6、git效率更高速度更快。
7、git还具有本地仓库gitlab
 
三种状态:
Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。
已提交表示数据已经安全的保存在本地数据库中。
已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

git的几个概念:
一. 工作目录
工作目录是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
二. 暂存区域
是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。
三. Git 仓库目录
是Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
基本的 Git 工作流程如下:
在工作目录中修改文件 > 暂存文件,将文件的快照放入暂存区域 > 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
如果 Git 目录中保存着的特定版本文件,就属于已提交状态。
如果作了修改并已放入暂存区域,就属于已暂存状态。如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
有两种取得 Git 项目仓库的方法: 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。
 
git的安装:
yum install git -y   #也可以通过编译来安装,不过要手动解决依赖关系。
git它是一个命令行工具,无需通过systemctl来启动。
git --version   #查看git的版本信息

创建git 的工作目录:
mkdir /ken
cd /ken  #这个目录要是空目录
初始化目录:
git init   #ls -a 可以看到初始化之后生成的隐藏目录。
创建一个测试文件:
echo "this is git" > test.txt
git add test.txt     #添加修改的文件到暂存区域(索引)
git commit -m “version1” #提交
git log       #查看提交后的版本信息
然后再次修改文件:
echo "append" >> test.txt
git add test.txt
git commit -m "version2"
再次查看:
git log     #发现有两个版本的信息
恢复到版本1:
git reset --hard HEAD1   #HEAD1就是commit之后的记录码的一部分,供以识别。
当前恢复到1版本但是使用git log看不到version2的信息了。如果重置到version2呢?
使用git reflog #获取version2的commit的值,即可重置到版本2
git reset --hard HEAD2   #完成重置,使用git log可以查看以及回到了version2
git add .   #提交整个工作目录中的内容。
git status  #查看当前git的状态,如果你没有做任何操作那么会告诉你,工作目录是干净的,没有要提交的内容。
echo 111 > a.txt 
git status   #这个时候查看就会显示a.txt已经被修改了(modified)
如果要撤销工作区的内容:
git checkout -- a.txt   #数据回滚,撤销工作区的内容。
git status      #发现git提示没有要提交的内容,数据已经回滚。(也能够看到当前所处的分支)
一旦使用git add a.txt 那么数据就已经被提交到了暂存区域

如何撤销暂存区域的内容?
git reset HEAD a.txt
git status #查看状态信息,发现已经到了工作区
git checkout -- a.txt #再撤销工作区的内容即可
git status  #提示没有要commit的内容
git分支的查看、创建、切换
 
git分支介绍:
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。
与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。
git branch   #查看分支,*在哪个分支上,就是当前所处的分支。
#如果是一个刚刚初始化的空目录,使用git branch是没有分支的。只有有文件的时候才有分支的概念。
一旦创建一个文件,通过git add .  和 git commit -m “v1” 使用git branch,就会返回分支信息。
git branch ken   #创建分支
git branch   #查看创建的分支
git checkout ken  #切换分支
分支的使用:其他分支不影响主分支,最后开发提交到主分支上就可以。
如果在ken分支上做出修改后commit成功了,那么在master分支上是看不到的。
只有合并分支之后才能看到
git merge ken
git log   #能够看到之前提交的版本信息了

gitlab仓库的搭建
Gitlab是搭建在局域网内,github是公有的。
Gitlab简介
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。
可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。
团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。
管理的命令
gitlab-ctl stop
gitlab-ctl start
gitlab-ctl restart
首先上传或下载gitlab的安装包:gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm
yum localinstall gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm -y
[root@centos ~]# vim /etc/gitlab/gitlab.rb    #更改11行为你的web访问ip
...
 ## Url on which GitLab will be reachable.
  9 ## For more details on configuring external_url see:
 10 ## https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/configuration.md#configuring-the-external-url-for-gitlab
 11 external_url 'http://192.168.27.30'
 12
 13
 14 ## Note: configuration settings below are optional.
 15 ## Uncomment and change the value.
 16 ############################
 17 # gitlab.yml configuration #
 18 ############################
...
使得配置生效:gitlab-ctl reconfigure
这个过程可能需要一点时间。需要注意的是,gitlab占用的是80端口,如果你有其他的web服务需要停用。
lsof -i :80
然后使用浏览器访问即可。
然后再web端创建项目然后拉取:
git clone http://192.168.27.30/root/test.git  #从root仓库中克隆
拉去的是一个目录,进到目录中找到有.git隐藏目录的目录中操作。也就是进入到工作目录之中。
然后创建分支:
git branch dev
git checkout dev
echo “testing” > 1.txt
git add .
git commit -m "testingfile"
git push origin dev  #当前子分支的名字
然后在网络上查看dev分支的内容即可。
在push推送到gitlab时是需要输入用户和密码的。那么如何实现免密呢?
在web端选择ssh,然后ssh-keygen生成你linux的密钥,然后将你的公钥复制粘贴到web端的SSH Keys
然后克隆的时候使用ssh的地址。
 
原文地址:https://www.cnblogs.com/getbird/p/11670496.html