目录
一、搭建gitlab服务器
二、开始学习使用git
三、实战练习
Git 是一个开源的分布式版本控制系统,Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,也就是说git可以在不联网的情况下使用,Git 并不像 SVN 那样有个中心服务器,目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上,比如使用github或者gitlab,github不开源,gitlab开源,我们这里使用gitlab,大概的工作流程是这个样子的
我们为了自己练习使用,自己动手搭建一台gitlab服务器,首先需要准备一台linux(CentOs)环境的虚拟机,在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,安装过程需要在root用户权限下。
1、安装ssh (如果已经安装可以忽略此步骤)
命令:yum install -y curl policycoreutils-python openssh-server
将SSH服务设置成开机自启动 命令:systemctl enable sshd
启动SSH服务 命令:systemctl start sshd
2、安装防火墙(如果已经安装可以忽略此步骤)
命令:yum install firewalld systemd -y
开启防火强 systemctl start firewalld
添加http服务到firewalld,pemmanent表示永久生效,若不加--permanent系统下次启动后就会失效
命令:sudo firewall-cmd --permanent --add-service=http
重启防火墙,命令:sudo systemctl reload firewalld
3、安装Postfix以发送通知邮件(可以先不用安装)
命令:sudo yum install postfix
将postfix服务设置成开机自启动,
命令:sudo systemctl enable postfix
启动postfix,
命令:sudo systemctl start postfix
4、下载gitlab镜像源并安装
下载地址 gitlab安装包.zip_gitlab安装包下载,gitlab下载安装-Linux文档类资源-CSDN下载
安装gitlab 命令:rpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
如果出现下图,则说明安装成功
修改gitlab配置文件指定服务器ip和自定义端口
vim /etc/gitlab/gitlab.rb
重置并启动gitlab
重置:gitlab-ctl reconfigure
启动:gitlab-ctl restart
提示 "ok: run:"表示启动成功
浏览器访问 http://192.168.11.132:9000/
初始账户: root 密码:5iveL!fe 第一次登陆需要修改密码。
gitlab-ctl start # 启动所有 gitlab 组件;
gitlab-ctl stop # 停止所有 gitlab 组件;
gitlab-ctl restart # 重启所有 gitlab 组件;
gitlab-ctl status # 查看服务状态;
gitlab-ctl reconfigure # 启动服务;
vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace # 检查gitlab;
sudo gitlab-ctl tail # 查看日志;
登陆gitlab是英文的,下面我们把它汉化。
5、gitlab汉化
下载汉化补丁https://download.csdn.net/download/qq_34139393/20009303并上传服务器
1、下载汉化补丁 cd gitlab 2、查看全部分支版本 git branch -a 3、对比版本、生成补丁包 git diff remotes/origin/10-0-stable remotes/origin/10-0-stable-zh > /tmp/10.0.0-zh.diff 4、停止服务器 gitlab-ctl stop 5、打补丁 patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.0.0-zh.diff 6、启动和重新配置 gitlab-ctl start gitlab-ctl reconfigure
汉化完成再次访问 http://192.168.11.132:9000/
1、git的安装配置,Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行,下面我们在最熟悉的Windows平台上安装使用git,Git 各平台安装包下载地址为:
Git - Downloads,安装完成后鼠标右键会出现两个选项,“Git Bash Here”和 “Git GUI Here”
在使用git之前,首先要理解git中三个重要的概念 “工作区”、“暂存区”、“版本库”
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
2分支管理
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master
分支。HEAD
严格来说不是指向提交,而是指向master
,master
才是指向提交的,所以,HEAD
指向的就是当前分支。一开始的时候,master
分支是一条线,Git用master
指向最新的提交,再用HEAD
指向master
,就能确定当前分支,以及当前分支的提交点:
每次提交,master
分支都会向前移动一步,这样,随着你不断提交,master
分支的线也越来越长。
当我们创建新的分支,例如dev
时,Git新建了一个指针叫dev
,指向master
相同的提交,再把HEAD
指向dev
,就表示当前分支在dev
上:
你看,Git创建一个分支很快,因为除了增加一个dev
指针,改改HEAD
的指向,工作区的文件都没有任何变化!
不过,从现在开始,对工作区的修改和提交就是针对dev
分支了,比如新提交一次后,dev
指针往前移动一步,而master
指针不变:
假如我们在dev
上的工作完成了,就可以把dev
合并到master
上。Git怎么合并呢?最简单的方法,就是直接把master
指向dev
的当前提交,就完成了合并:
所以Git合并分支也很快!就改改指针,工作区内容也不变!
合并完分支后,甚至可以删除dev
分支。删除dev
分支就是把dev
指针给删掉,删掉后,我们就剩下了一条master
分支:
3、创建仓库
使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录。
使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout),例如git clone git://github.com/schacon/grit.git
在使用git之前我们还需要对git做一些配置工作
查看git所有配置 git config --list
编辑 git 配置文件 :
$ git config -e # 针对当前仓库
$ git config -e --global # 针对系统上所有仓库
设置提交代码时的用户信息:
git config --global user.name "runoob"
git config --global user.email [email protected]
如果去掉 --global 参数只对当前仓库有效。
1首先我们在gitlab中新建群组和用户并新建项目。
2将新建的项目克隆岛本地。
git clone http://192.168.11.132:9000/testgroup/myproject.git
执行完后我们会在本地出现以下myproject的文件夹,里面包含一个.git文件,说明这个目录是由git管理的仓库,然后我们在这个目录下新建一个web项目testproject
我们在做项目提交代码的时候,有些文件可能不需要我们提交,比如.classpath .setttings这样的文件,在git中我们可以设置忽略这些文件
输入命令 touch .gitignore,生成.gitignore 文件并编辑
输入命令 git status 查看当前状态
状态为untracked说明 testproject这个文件夹还没有放入暂存区
输入命令git add testproject . 添加当前目录下的所有文件到暂存区,然后git status在查看状态
出现这种状态说明我们已经把要提交的文件添加到了暂存区,但是还没有提交到本地版本库,使用git commit -m "提交的注释" 命令将暂存区的内容添加到本地版本库中,然后在git status 查看状态
我们看到状态为 working tree clean 说明已经没有要提交的记录了
我们在做项目的时候都是团队开发,如果想让自己提交的代码能够被别人获取,那就需要将本地仓库的代码推送到远程仓库。使用 git push 命令将代码推送到远程仓库。
在推送之前我们可以先使用 git remote -v 命令查看一下远程仓库信息
我们可以看到远程仓库的名称 和地址 ,当我们clone仓库时,会默认创建一个master分支,也就是主分支,一般情况下主分支不用来开发使用,主分支用来发布稳定版本,下面我们先将代码推送到远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>,本地分支名称和远程分支名称一样可以省略:
此时我们已经经代码推送到远程仓库的master分支上了,我们登陆gitlab查看一下
3、下面介绍一些常用命令
现在我修改了项目中的代码
第一步 git status 查看一下状态
第二步 git add 将修改的文件添加到暂存区
第三步 git commit -m "注释" 将修改的文件添加的本地仓库
如果注释写错了 可以通过 git commit --amend 命令进行修改
使用git log 命令可以查看提交的历史记录,可以看到每次提交的版本号,提交人和时间
我们想要回退历史版本,首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
git reset --hard HEAD^
回退到指定版本使用 git reset --hard 版本号
要是不记得刚才的版本号了,可以使用 git reflog命令查看
4、新建分支
master分支是用来做稳定版本发布的,我们需要新建一个dev分支来作为开发使用
查看本地分支git branch ,可以看到只有一个master分支
创建本地分支:git branch dev
切换分支:git checkou dev
查看远程分支 git branch -r
创建远程分支(本地分支push到远程):$ git push origin dev
再次查看gitlab,发现多了一个dev分支,接下我们所有的开发工作都在dev上来完成,我们将本地切换到dev分支
我们修改一个本地的文件index.jsp
通过git add==>git commit -m ==>git push 上传到远程仓库,在gitlab中查看,只有dev分支下的we文件改动了,master分支没有变换。
5、冲突解决
我们在开发的过程中很可能会遇到代码冲突的问题,下面我们模拟一下代码冲突
直接在gitlab中修改一下index.jsp文件,
我们在本地也同样修改一下index.jsp
很明显代码有冲突的地方了,当我们远程仓库推送代码的时候就会提示错误信息说明代码有冲突的地方,需要解决冲突后在提交代码
这时我们就得先拉取一下远程仓库的最新最新代码到本地
拉取远程仓库:$ git pull origin dev
这时会看到有冲突的地方
我们把冲突解决掉然后重新提交就没有问题了。
6.合并分支
当我们开发完成后,需要将代码合并到master分支,也就是发布稳定版本
合并某个分支到当前分支
git merge dev
更多详细命令可以参考Git 教程 | 菜鸟教程