Git与Gitlab

一.git与svn核心区别

git是分布式的

svn,cvs等:非分布式的版本控制系统

git更倾向被用于分布式模式,也就是每个开发人员从中心版本库/服务器上检出代码后会在自己的机器上克隆一个自己的版本库。

可以这样说,如果你被困在一个不能连接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然能够提交文件,查看历史版本记录,创建项目分支,等。对一些人来说,这好像没多大用处,但当你突然遇到没有网络的环境时,这个将解决你的大麻烦。

2.git分支和svn的分支不同

分支在svn中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行命令,来确认代码是否被合并。

然而,处理git的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

二、权限管理

我们的代码之前是托管在公司的svn上, 现在是托管在公司的gitlab上.

具体的步骤是这样子:

用户访问公司gitlab地址master权限用户给其他用户添加添加权限用户安装git or git客户端用户添加ssh

项目权限

private 私有, 项目必须显式地为每个用户访问权授予。internal 内部, 任何登录用户都可以克隆这个项目。public 共有, 所有用户都可以看到这个项目

用户权限

guest 只能提issuereporter 可以看文件, 不能上传任何修改developer 可以看, 可以上传developer分支的修改, 可以建分支, 可以删远程分支. 不能上传master分支的修改master 都可以

wiki权限

guest 只能看reporter 只能看developer 可以增改页面, 但是不能删除页面master 可以增删改

我先是为我们团队建立了一个group, 然后默认所有人都是guest权限, 然后再单独为每个项目为相关的开发开通developer权限, 为部分开发开通了master权限, 让他们也可以自己分配自己的项目内的权限.

三、迁移

将旧代码迁移到新平台gitlab.yeepay.com.

迁移的时候, 冻结svn, 告知所有小伙伴禁止在svn上提交代码, 今后统一换成git.

四、常用命令:

1、克隆git

git clone git@gitlab.yeepay.com:yce-pro/yce-pro101.git

2、创建新git

git clone git@gitlab.yeepay.com:yce-pro/yce-pro101.git cd yce-pro101

touch README.md

git add README.md git commit -m "add README" git push -u origin master

3、本地建git库

cd existing_folder

git init git remote add origin git@gitlab.yeepay.com:yce-pro/yce-pro101.git

git add .

git commit -m "Initial commit"

git push -u origin master

4、已存在的git库

cd existing_repo

git remote rename origin old-origin

git remote add origin git@gitlab.yeepay.com:yce-pro/yce-pro101.git

git push -u origin --all

git push -u origin --tags

5

、查看git log

git log --pretty=format:"%h %s" --graph

在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看。默认不用任何参数的话,git log会按提交时间列出所有的更新,最近的更新排在最上面。

6、git库代码回滚

git reset --hard 2c64fb30

git push origin HEAD --force

但要注意:master分支是不允许push回滚后的代码到远程库的,原因是它被默认保护了,只有解除保护,才可push

切换分支

7、克隆指定分支到本地:

git clone -b 分支名 git库地址

例子:

git clone -b release/rev1.0 git@gitlab.yeepay.com:git_test/git_test2.git

8、切换git分支

git checkout分支名

9、创建并切换git分支

git checkout -b分支名

10、删除git分支

git branch -D分支名