一、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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务