搭建gitlab 清华的软件库下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

  1. 安装依赖软件 yum -y install policycoreutils openssh-server openssh-clients postfix 2.设置postfix开机自启,并启动,postfix支持gitlab发信功能 systemctl enable postfix && systemctl start postfix

3.安装gitlab 4.修改gitlab配置文件指定服务器ip和自定义端口 复制代码 vim /etc/gitlab/gitlab.rb

gitlab服务器地址+端口

external_url 'http://gitlab.example.com'

改成:

external_url 'http://10.200.117.79:9000'

重置并启动GitLab,执行:

gitlab-ctl reconfigure gitlab-ctl restart

GitLab遇到ssh修改了默认端口解决方法 GItLab用ssh免密钥认证确实很好用,只是配置的时候发现修改了ssh默认端口(22),则不可达,不少小伙伴都遇到了这个问题。经过一番思考,觉得需要修改服务端配置,这里把具体写个博客,让大家少点坑。

修改步骤

1、修改ssh端口(此步骤略过) Port 端口 2、修改/etc/gitlab/gitlab.rb [gitlab.yml中的配置会被这个给覆盖] //在后面修改自己的ssh端口 gitlab_rails['gitlab_shell_ssh_port'] = 21386 3、使其生效 gitlab-ctl reconfigure 默认是22端口,直接访问则不会出现端口的。)

gitlab默认备份路径: /var/opt/gitlab/backups 默认备份保存时间: gitlab_rails['backup_keep_time'] = 604800 ########################################gitlab基本配置完成 在gitlab创建项目库------web-project ####################################### 本地安装git,上传下载代码 #采用ssh通信的方式,需要将自己的公钥存放在gitlab上 yum install -y git

克隆远程仓库到本地:git clone git@192.168.179.149:root/web-project.git 查看所处分支:git branch 删除分支:git branch -d slave 更新代码:git pull 将本地代码上传至gitlab服务器: 提交到本地仓库: git add . git commit -a -m "change by jack6-2" git push (如果push或者pull需要密钥,可能是本地密钥发生改变,需要重新向gitlab提交密钥)

从远程仓库拉取代码: git pull 如果已经没有更新则会提示: Already up-to-date.

如果本地手动误删除了代码,可以使用代码回滚: git reset --hard 5f2f66964e06b607f3fb68e16464ee780de99a77 需要回滚到哪个版本可以,可以使用git log查看历史记录

补充命令:(关于上传下载和查看都可以配合ansible来批量执行) git cat-file -t 哈希值"查看对象的类型

git cat-file -p 哈希值"查看对象的内容

git rev-parse 13614 简短的哈希值获取到整个哈希值

git reflog --oneline 如果版本回退了无法查看最新的版本,可以使用此命令

git branch 查看分支 git checkout slave 切换分支 git branch -d slave 删除分支

###通常情况下HEAD指针指向分支,由分支指向最新提交对象:具体可tree 仓库的.git目录 ###如果HEAD指针直接指向提交对象而不指向分支的情况,我们就成为“分离头” ###分离头使用的场景: 分离头指针的使用场景,当你想要基于某个提交进行一些实验或者测试,可以直接检出这个提交,立马在上面开始实验/测试工作,如果结果满意,就保留,如果结果不满意,就丢弃。你可能会说,我直接基于指定的提交创建一个新的分支,然后在新的分支上进行实验不是也可以吗?是的,完全可以,没有任何问题,只是,如果实验结果不满意,你可能还想要删除这条用于实验的分支,而使用分离头,就可以先实验,再判断是否保留这些提交,避免了在不满意的情况下创建分支或者删除分支的操作。

如果需要保留执行:git chekout -b netbranch 将分离头的分支命名为新的分支并保存。

####比较暂存区和工作区的代码区别:git diff ;git diff -- index.html(检查单个文件) ###比较提交区和工作区的代码区别:git diff 哈希值(版本号) ###比较暂存区和提交区的代码区别:git diff --cached
工作区=======暂存区=========提交区 【本地仓库=====git add=======git commiit】

############################################################################ 总结如下:

常用的参数

此处把上文中的常用的git diff命令总结一下,以便回顾。

Shell git diff 比较工作区和暂存区

git diff HEAD 比较工作区和当前分支最新的提交,你可以把HEAD换成别的分支的名字,比如test分支,"git diff test"表示比较当前工作区和test分支最新的提交之间的差异,也可以把HEAD替换成任何一个commit的ID,表示比较当前工作区和对应提交之间的差异。

git diff --cached 比较暂存区和当前分支最新的提交

上述命令都是比较所有文件的差异,如果想要指定文件,可以使用"--"指定文件的路径,文件路径可以有多个,用空格隔开。

git diff -- file1 git diff -- ./file1 只比较工作区和暂存区中file1文件的差异

git diff -- file1 file2 只比较工作区和暂存区中file1以及file2文件的差异

git diff -- dir1/d1/f1 只比较工作区和暂存区中dir1/d1/f1文件的差异

git diff -- dir1/ 只比较工作区和暂存区中dir1目录中所有文件的差异

git diff HEAD -- ./file1 只比较工作区和当前分支最新的提交中file1文件的差异,HEAD可以替换成分支名或者commitID

git diff testbranch -- ./file1 只比较工作区和testbranch分支最新的提交中file1文件的差异

git diff --cached testbranch 比较暂存区和testbranch分支最新的提交

git diff --cached testbranch --./file1 只比较暂存区和testbranch分支最新的提交中file1文件的差异

git diff HEAD~ HEAD 比较当前分支中最新的两个提交之间的差异

git diff HEAD~ HEAD -- file1 比较当前分支中最新的两个提交中的file1文件的差异

git diff commitID1 commitID2 比较两个commit之间的差异 git diff commitID1..commitID2 同上,比较两个commit之间的差异,两个命令等效

git diff branch1 branch2 比较两个分支上最新提交之间的差异 git diff branch1..branch2 同上,比较两个分支上最新提交之间的差异,两个命令等效

git diff 比较工作区和暂存区

git diff HEAD 比较工作区和当前分支最新的提交,你可以把HEAD换成别的分支的名字,比如test分支,"git diff test"表示比较当前工作区和test分支最新的提交之间的差异,也可以把HEAD替换成任何一个commit的ID,表示比较当前工作区和对应提交之间的差异。

git diff --cached 比较暂存区和当前分支最新的提交

上述命令都是比较所有文件的差异,如果想要指定文件,可以使用"--"指定文件的路径,文件路径可以有多个,用空格隔开。

git diff -- file1 git diff -- ./file1 只比较工作区和暂存区中file1文件的差异

git diff -- file1 file2 只比较工作区和暂存区中file1以及file2文件的差异

git diff -- dir1/d1/f1 只比较工作区和暂存区中dir1/d1/f1文件的差异

git diff -- dir1/ 只比较工作区和暂存区中dir1目录中所有文件的差异

git diff HEAD -- ./file1 只比较工作区和当前分支最新的提交中file1文件的差异,HEAD可以替换成分支名或者commitID

git diff testbranch -- ./file1 只比较工作区和testbranch分支最新的提交中file1文件的差异

git diff --cached testbranch 比较暂存区和testbranch分支最新的提交

git diff --cached testbranch --./file1 只比较暂存区和testbranch分支最新的提交中file1文件的差异

git diff HEAD~ HEAD 比较当前分支中最新的两个提交之间的差异

git diff HEAD~ HEAD -- file1 比较当前分支中最新的两个提交中的file1文件的差异

git diff commitID1 commitID2 比较两个commit之间的差异 git diff commitID1..commitID2 同上,比较两个commit之间的差异,两个命令等效

git diff branch1 branch2 比较两个分支上最新提交之间的差异 git diff branch1..branch2 同上,比较两个分支上最新提交之间的差异,两个命令等效 ############################################################# 首先要注意,如果提交已经推送到远程仓库,操作这些提交时需谨慎。

撤销已经添加到暂存区中的修改,即让暂存区与最近的提交保持一致,可以使用如下命令,如下三条命令等效

git reset HEAD

也可以针对某些文件撤销暂存区中的修改,命令如下

git reset HEAD -- file1 file2

撤销所有暂存区和工作区中的所有变更

git reset --hard HEAD

回退到指定的提交

git reset --hard commitID

你已经将部分提交暂存到了暂存区,然后继续在工作区工作,工作区产生了新的变更,但是这些新变更没有添加到暂存区,此时你创建了提交,刚刚创建完提交你就后悔了,你想要的回到提交创建前一刻的状态,可以使用如下命令

git reset --soft HEAD~

使用如下命令可以撤销工作区中file1文件的相关变更,可以细分为两种情况

git checkout -- file1 情况一:你先修改了file1,并且暂存了,然后又修改了file1,在工作区产生了新的变更,此时执行上述命令,会将工作区中最新的变更撤销,工作区中的file1将会变成暂存区中file1的状态。

情况二:你修改了file1,暂存区中没有file1相关的变更,此时执行上述命令,会将工作区中最新的变更撤销,工作区中的file1将会变成最近一次提交中file1的状态。

########################################################## 合并分支:https://www.zsythink.net/archives/3470 常用: git merge --no-ff BRANCH -m "message" --no-ff:不用快速合并的方式,如果没有此项,使用了快速合并会忽略-m参数

fast-forward:快速合并,需要合并的一方,从创建分支开始,状态没有改变,否则不会成功

通常使用非快速合并,合并后会创建新的提交点

############################################################ 在没有新建项目文件的情况下,可以省略git add file,直接将暂存区的文件提交 git commit -am "message"

需要删除项目中的文件:git rm filename 相当与执行rm 并git add

需要对项目文件改名:git mv filename newfilename 相当于执行mv 并git add

########################################################### 远程仓库提交: 使用的是2.x版本的git,那么你可以使用短选项"-u"代替上述命令中的长选项"--set-upstream",也就是说,"git push --set-upstream origin new:new" 和 "git push -u origin new:new" 的效果是一样的,需要注意的是,在早期的1.x版本的git中,只有长选项,没有短选项,由于我们想要推送的本地分支与对应的远程分支同名,所以上述命令还可以简写成"git push -u origin new",效果也是一样的,当执行完上述命令后,由于new分支已经存在了对应的上游分支,而且上游分支和本地new分支同名,之后再在new分支中执行推送操作时,就可以直接执行"git push"命令了(注意:2.x版本默认只会推送当前所在的分支),不用加任何选项和参数,直接执行"git push"命令即可。

这个场景就是,如果之前有一个只有自己使用的本地仓库,现在突然想要多人协作,能否将已经存在于本地个人仓库中的内容同步到 新创建的远程仓库中供大家使用呢?答案是肯定的,其实方法也很简单,就是将本地私人使用的仓库与新创建的远程仓库建立关系,还记得我们之前使用的"git remote -v"命令吗?我们可以在克隆远程仓库以后,通过此命令查看当前仓库与远程仓库的对应关系,通过此命令可以查看到本地仓库的上游仓库的具体名称和地址,其实,我们也可以手动的指定本地仓库对应的远程仓库,如果一开始的本地仓库只是你个人使用的,现在你想要通过新创建的远程仓库与别人进行协作,只需要手动的将本地仓库的上游仓库指定为新创建的远程仓库即可,指定远程仓库以后,再将需要协作的分支从本地仓库推送到远程仓库中,别人就能够通过远程仓库获取到对应的分支了,那么为本地仓库添加远程仓库的命令是什么呢?命令如下:

Shell git remote add origin git@github.com:zsythink/test1.git 1 git remote add origin git@github.com:zsythink/test1.git 你肯定看明白了,你只需要在本地仓库中执行如上命令,即可将本地仓库的远程仓库指定为origin,远程仓库的地址就是"git@github.com:zsythink/test1.git",远程仓库名和仓库地址你可以根据实际情况进行设定,当然,这个地址也可以是https格式的地址。

执行上述命令后,本地仓库的远程仓库就指定为origin了,此时再次执行命令"git remote -v"查看远程仓库,就能够看到对应的远程仓库地址了。

你也可以为同一个本地仓库添加多个远程仓库,换句话说就是,你可以为本地仓库添加多个远程仓库的对应关系,这样你在本地仓库执行拉取操作和推送操作时,就需要指定对应的远程仓库名称,比如,我们之前执行的推送命令"git push -u origin new",你可以将命令中的origin换成对应的远程仓库名称就行了。

########################################################## git push --all 此命令表示当本地分支与上游分支同名时,push所有分支的更新到对应的远程分支。

git fetch 此命令表示获取远程仓库的更新到本地,但是不会更新本地分支中的代码。

git pull remote branchA 此命令表示将remote仓库的A分支pull到本地当前所在分支,如果你想要pull到本地的A分支,需要先checkout到本地A分支中。

git pull remote branchA:branchB 此命令表示将remote仓库的A分支pull到本地的B分支,在成功的将远程A分支pull到本地B分支后(如果远程A到本地B的pull操作失败了,后面的操作不会执行),再将远程A分支pull到本地的当前所在的分支。

git pull 此命令表示当本地分支与上游分支同名时,对当前分支执行pull操作,对其他分支执行fetch操作,具体的差异主要取决于对应的远程分支有没有更新。

########################################################## gitlab-ctl reconfigure ---------------------如何更改配置,需要重新生成 gitlab-ctl restart ----------------------重启gitlab,可以看到ok,up gitlab-ctl stop -----------------------停掉gitlab,可以看到ok,down