您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页Git-GitLab

Git-GitLab

来源:华佗小知识
Git简介及GitLab使用

一、Git简介

Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。

Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

文件的三种状态

对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。

基本的 Git 工作流程如下: 1. 在工作目录中修改某些文件。

2. 对修改后的文件进行快照,然后保存到暂存区域。

3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。

所以,我们可以从文件所处的位置来判断状态:如果是 Git 目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而所有其他文件都属于未跟踪文件。它

们既没有上次更新时的快照,也不在当前的暂存区域。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。

在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。所以使用 Git 时的文件状态变化周期如图

可以通过以下网站详细了解Git http://git-scm.com/book/zh/v1/

SVN和Git的区别

svn是集中化的版本控制系统, 只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

git是分布式的版本控制系统, 每一个终端都是一个仓库,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。

集中式版本控制:

分布式版本控制:

二、Git Bash 安装

安装文件在ftp://192.168.1.202/software%20backup/Git-1.9.4-preview20140611.exe,请先下载到本地

双击Git-1.9.4-preview20140611.exe文件,进入安装界面,如下图:

2. 两步next后选择安装目录,如下图:

3.next进入Git安装模块选择

4. next进入Git Setup界面,“Adjusting your PATH environment”,选择默认值“Use Git Bash only”,如下图所示:

5. next进入Git Setup界面,“Configuring the line ending conversions”,选择换行格式,选择“Checkout as-is, commit Unix-style line endings”,如下图所示:

三、GitLab使用说明 3.1新建项目

新建项目前,先创建项目所在的组(也就是说这个项目文件是保存在哪个组里) 1. 选择Admin area,选择Groups——New Group

2.填写组名及相关信息(Groups一定要与Teams名称一致)

3. 选择Create New Projcet

输入项目名称,同时在namespace里选择刚才创建的组

3.2创建用户

1. 选择Admin area 选择Users——New User

2.其中Name为对方的中文名(或英文或拼音,能让其他人识别即可,例如:曹金彦、cjy、caojinyan),Username使用邮箱的前缀(登录gitlab的用户名),Email为公司邮箱(这个按照公司规定来,不一定非得按照我这样方法)

3. 密码尽量选择复杂、带有特殊字符10个以上的,最好使用随机生成的密码,用户名和密码会发送到对方邮箱

4. 项目现在默认即可,并且把Can create group与Can create team给取消默认的勾选

5. 下面信息默认不输入

6. 信息输入完成后,选择Create user;

3.3重置用户密码

1. 选择Admin area,选择User下面的数字

2. 然后选择User下面的Edit,找到Password项就可以重置密码了;

3.4赋予用户项目权限

1.选择Admin area ,选择Teams

2. 输入组名与信息,点击“Create team”

3.先增加这个组可以对哪些项目有什么权限,选择Add projects

在左侧的Projcet name里可以选择你当前gitlab已经存在的项目

在右侧的Max access选择此组对这个项目最大能有什么权限,默认选择Developer

关于这些权限的介绍

Guest

  

Create new issue Leave comments Write on project wall

Reporter

     

Create new issue Leave comments Write on project wall Pull project code Download project Create a code snippets

Developer

 

Create new issue Leave comments

         

Write on project wall Pull project code Download project

Create new merge request Create a code snippets Create new branches

Push to non-protected branches Remove non-protected branches Add tags Write a wiki

Master

          

Create new issue Leave comments Write on project wall Pull project code Download project

Create new merge request Create a code snippets Create new branches

Push to non-protected branches Remove non-protected branches Add tags

       

Write a wiki

Add new team members Push to protected branches Remove protected branches Push with force option Edit project

Add Deploy Keys to project Configure Project Hooks

Owner

 

Transfer project to another namespace Remove project

4. 完成后选择Add 5. 选择Addmembers

在左侧的User name里选择你当前gitlab里已有的用户

在右侧的 Default projectaccess 里,选择相应的权限,默认最好为 Developer 6. 在最后的Team access下不勾选Admin,然后选择Add,这样就完成了用户与组权限的

赋予,该Team中的用户(developer权限)才能对Team中的工程进行clone、pull、push操作

3.5取消用户项目权限

1. 选择Admin area,选择Teams

2. 在Name下选择哪个组,点击 组名称,进入如下界面:

3. 在Members里选择User name的用户,点击那个用户

在右侧的Projcets里,若要改变对该项目的权限,可选择Edit

若要对该项目取消任何权限,则选择删除;

以上为管理员操作,以下为普通用户操作

3.6创建SSH 密钥

目的:git使用https协议,每次pull, push都要输入密码,相当的烦。使用git协议,然后使用ssh密钥。这样可以省去每次都输密码。Git 服务器使用 SSH 公钥来进行授权。

第一步、看看是否存在SSH密钥(keys)

需要看看是否看看本机是否存在SSH keys,打开Git Bash,并运行:

$cd ~/.ssh

# 检查你本机用户home目录下是否存在.ssh目录

如果,不存在此目录,则进行第二步操作,否则,你本机已经存在ssh公钥和私钥,可以略过第二步,直接进入第三步操作。

第二步、创建一对新的SSH密钥(keys)

输入如下命令:

$ssh-keygen -t rsa -C \"your_email@example.com\" #这将按照你提供的邮箱地址,创建一对密钥 Generating public/private rsa key pair.

Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter] 注:此处直接回车

直接回车,则将密钥按默认文件进行存储。此时也可以输入特定的文件名,比如/c/Users/you/.ssh/gitlab_rsa

接着,根据提示,你需要输入密码和确认密码。

注:如果输入了密码,则每次提交代码是都需要输入该密码,所以直接回车,不设置密码 相关提示如下:

Enter passphrase (empty for no passphrase): [Type a passphrase] 回车 Enter same passphrase again: [Type passphrase again] 回车

输入完成之后,屏幕会显示如下信息:

Your identification has been saved in /c/Users/you/.ssh/id_rsa. Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub. The key fingerprint is:

01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

注:这些密钥要保存好,密钥文件不要随意删除。

第三步、在web账户中添加公钥

登录web账号,点击My Profile--SSH Keys--Add new

将本机文件/C/Users/you/.ssh/id_rsa.pub使用文本编辑器打开,把文件内容copy出来,粘贴你的密钥到key输入框中

点击“Save”按钮;

第四步、测试

为了确认我们可以通过SSH连接web,我们输入下面命令。输入后,会要求我们提供验证密码,输入之前创建的密码就ok了。

$ssh -T git@git.olymtech.com

你可能会看到告警信息,如下:

The authenticity of host 'git.olymtech.com (121.41.43.201)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?

不用担心,直接输入yes。

如果看到下面信息,就说明一切完美!

Hi username! You've successfully authenticated, but git.olymtech.com does not provide shell access.

3.7另外一种管理项目的方式

第一步:创建工程,选择namespace

Namespace这个选择是用来决定这个工程所属的,可以选User为你自己,或者选择组,这个会影响到后面工程的url。:

a. Global:则表示该工程所在目录是/home/git/repositories/${工程名}.git

URI: git@git.olymtech.com:${工程名}.git

b. Groups:则表示该工程所在目录是/home/git/repositories/${组名}/${工程

名}.git

URI: git@git.olymtech.com:${组名}/${工程名}.git

c. Users:则表示该工程所在目录是/home/git/repositories/${username}/${工程

名}.git

URI:git@git.olymtech.com:${username}/${工程名}.git

工程创建好了之后需要设置Team Member,即对该工程有权限的用户 第二步:在该工程的home页的右边有“Team Member”按钮,如下图:

第三步:点击“New Team Member”按钮,进入设置页面,如下图:

第四步:用户选择成功后,会返回前一页,显示该项目中的团队成员列表,同时在此界面还可以直接修改用户的权限,如下图:

或者是Admin area – Projects –找到该工程,进入,会看到“Edit Team”的按钮

接下来的操作同上第三步

注:若A用户创建了工程P,而没有将B用户放入工程P的Team中,B用户是看不到工程P的;若B用户想要对工程P执行clone、pull、push操作,必须设置B用户为Developer权限;

四、Eclispe使用说明 4.1 Eclipse Git相关配置

在使用git之前你需要配置一下用户名和邮箱,这项配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录 Window->Preferences->Team->Git->Configuration

点击“Add Entry”,添加user.name

点击“OK”,再次点击“Add Entry”,添加user.email

为了识别方便,一般此处的user.name填写姓名;user.email为公司邮箱; 这样name和email就设置好了

4.2 本地添加Git工程

右键Import,选择Git—Projects from Git

点击Next,选择Clone URI;

点击Next,将gitlab中该项目的ssh地址复制到URI中,

点击Next

点击Next

点击Next

点击Next

点击Finish,就将服务器上的工程clone到本地了。

4.3 Git commit

点击项目右键team->commit(项目添加到本地仓库) 进入如下界面

提交指南:

a. 请将每次提交限定于完成一次逻辑功能。并且可能的话,适当地分解为多次小更新,

以便每次小型提交都更易于理解。请不要在周末穷追猛打一次性解决五个问题,而最后拖到周一再提交。

b. 需要谨记的是提交说明的撰写。写得好可以让大家协作起来更轻松。一般来说,提

交说明最好在一行以内,50 个字符以下,简明扼要地描述更新内容,空开一行后,再展开详细注解。Git 项目本身需要开发者撰写详尽注解,包括本次修订的因由,以及前后不同实现之间的比较,我们也该借鉴这种做法。 c. .gitignore文件(可以手动在项目下创建该文件),把要忽略的文件名填进去,Git

就会自动忽略这些文件; 忽略文件的原则是:

1.忽略操作系统自动生成的文件,比如缩略图等; 2.忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;

3.忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

注:.gitignore文件只对还没有加入版本管理的文件起作用,如果之前已经用git把这些文件纳入了版本库,就不起作用了

解决方法:需要在git库中删除该文件,并更新。

4.4 Git push

项目右键team->remote->push(将项目提交到远程仓库)

点击Next

注:如果勾选force update,则表示覆盖提交,请勿勾选 点击Next

如果在提交时有红色冲突提示,如下图:

此时必须先更新,解决掉冲突后再提交 如果没有冲突,点击Finish

4.5 Git pull

如果项目要提交到远程仓库,应先从远程仓库拉取更新:team->pull,如果没有冲突,进行push;若有冲突,要先解决冲突后再进行提交; 解决冲突:

冲突的地方一般使用“<<<<”,“======”,“>>>>>”标记出不同分支的内容,这种情况需要熟悉这段代码,最好是原作者坐在一起共同修改,将修改好的文件,右键点击此冲突文件,选择Team -> Add to index再次将文件加入索引控制,此时文件已经不是冲突状态,并且可以进行commit并push到服务器端

4.6 创建分支

项目名称右键team->Switch to -> new Branch

分支的命名规则使用小驼峰式命名法,不要使用特殊字符,不要使用点。

4.7 Git merge

项目名称右键team->merge

由于master和dev分支都对同一个文件进行了修改,所以点击“Merge”按钮时,会弹出以下提示框:

选择将合并结果输入的文件;任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

master分支是主分支,因此要时刻与远程同步;

dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

如果为修改一个bug,可以创建本地分支,就没必要推到远程了,修复后,合并分支,然后将临时分支删除即可。

4.8具体工作场景

第一步:创建工程priceservice

第二步:将Eclipse中的priceservice工程share project for Git

第三步:commit 第四步:push

选择提交分支:

成功提交

至此项目初始化就完成了,gitlab上该工程已存在files

第五步:管理Team,操作同3.8另外一种管理项目的方式 第二步

注:Eclipse中新建的工程名称必须与GitLab中的工程名相同,才能成功push到远程服务器上

五、git 命令说明

请参考:http://gitref.org/zh/

六、代码统计

统计某段时间内添加或修改的代码行数(将项目代码更新到本地,使用git bash进入项目目录下,执行以下命令)

git log --since=1.weeks.ago --until=today --stat | perl -ne 'END{print $c} $c+=$1 if/(\\d+) insertions/;' 统计某段时间内删除的代码行数

git log --since=1.weeks.ago --until=today --stat | perl -ne 'END{print $c} $c+=$1 if/(\\d+) deletion/;'

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务