Gitlab使用说明 目录 ⚫ Git简介 ⚫ Git常用命令 ⚫ Windows下Git配置 ⚫ Gitlab使用 Git简介 ⚫ Git的三种状态 Git最初是在2005年由Linux之父Linus TorvaLinus领导开发的一套为Linux内核维护的版本管理系统,Git 日臻成熟完善,在 高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管 理系统,可以应付各 种复杂的项目开发需求。 ⚫ Git的三种状态 Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容 的具体差异。对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。 已提交表示该文件已经被安全地保存在本地数据库 中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修 改的文件放在下次提交时要保存的清单中。由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区 域,以及本地仓库。 Git简介 ⚫ Git的基本概念 基本概念 本地 远程 本地分支 暂存区 Stage/ Index 工作目录 Working Dir 远程分支 中央仓库 Git简介 ⚫ Git的下载和提交 下载和提交 本地 远程 本地分支 远程分支 git pull 暂存区 工作目录 中央仓库 Git简介 ⚫ Git的比较 比较操作 本地 远程 git diff <commit1> <commit2> SHA1 SHA1 SHA1 暂存区 工作目录 本地分支 远程分支 中央仓库 Git常用命令 创建仓库 ⚫ git init // 初始化一个git仓 ⚫ git clone git clone http://southchips.net:8192/root/w_lite.git git clone ssh://fei@southchips.net:root/w_lite.git // 复制远程仓库到本地, 前者为需要账号密码的http方式,后者需要将自己的ssh公钥保存在服务器的公钥库中 ⚫ git pull // 更新所有分支至远程仓库最新节点 ⚫ git fetch // 获取远程仓库中所有分支的最新节点 pull 和 fetch的区别: git fetch:相当于是从远程获取最新版本到本地,不会自动merge git pull:相当于是从远程获取最新版本并merge到本地,相当于git fetch 和 git merge 在实际使用中,git fetch更安全一些。因为在merge前,我们可以查看更新情况,然后再决定是否合并 Git常用命令 提交代码 ⚫ git add <paths> // 保存文件或目录到缓存区 ⚫ git rm <paths> // 从缓存区删除文件或目录 ⚫ git mv <pathA> <pathB> // 重命名缓存区中的文件或目录(从A改成B) ⚫ git commit -m “代码提交信息” // 将缓存区提交到本地仓库 ⚫ git commit –amend ⚫ git push origin master // 合并最后一次提交 // 将本地仓库master主干分支推送到中央仓库 Git常用命令 恢复代码 ⚫ git reset HEAD -- <paths> // 在本地仓库恢复文件或目录至HEAD节点,文件无变化,修改的差异在修改区体现 ⚫ git checkout HEAD <paths> // 从本地仓库恢复文件或目录 ⚫ git checkout <paths> // 从暂存区恢复文件或目录 ⚫ git clean –dfx [<paths>] // 删除所有没有被跟踪的文件 回滚代码 ⚫ git reset --hard <commit> ⚫ git revert <commit> // 回滚本地仓库到commit节点 // 回退commit节点提交的所有修改,并提交为一个新的commit reset 和 revert的区别: git reset:将当前的工作目录完全回滚到指定的commit节点(需加上--hard,不加则只会改变节点信息,不会修改文件) git revert:还原一个版本的修改,必须提供一个具体的git节点信息,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20' reset是指将当前head的内容重置,不会留任何痕迹。 revert是撤销某次提交,但是这次撤销也会作为一次提交进行保存。 Git常用命令 合并代码 ⚫ git merge <b1> // 合并b1分支的改动到当前分支 ⚫ git rebase <b1> // 重放b1分支的改动到当前分支 ⚫ git cherry-pick <commit> // 合并指定提交到当前分支 ⚫ git rebase HEAD~2 // 合并最近两次提交成一个提交 rebase命令执行后,实际上是将分支点从C移到了G,这样分支也就具有了从C到G的功能 多人在同一个分支开发时,git push前最好先用git pull –rebase命令,拉取开发期间别人的新提交 Git常用命令 暂存代码 ⚫ git stash [save “message...”] // 保存modified和staged区的工作进度(即保存工作目录和 暂存区的快照) // 查看目前所有暂存的工作进度列表 ⚫ git stash list ⚫ git stash pop [--index] [<stash>] ⚫ git stash apply [--index] [<stash>] ⚫ git stash drop [<stash>] ⚫ git stash clear // 恢复并删除最近一个暂存的工作进度 // 恢复最近的一个工作进度 // 删除工作进度 // 清空所有工作进度 Git常用命令 标签操作 // 查看标签 ⚫ git tag [–l XXX] ⚫ git tag v1.4-lw // 创建轻量级标签 ⚫ git tag -a v1.4 -m ‘version 1.4′ // 创建带注释的标签 ⚫ git show v1.4 // 查看标签详细信息 ⚫ git push –tags // 提交标签到中央仓库 在 git 中有两种最主要的标签–轻量级标签(lightweight)和带注释的标签(annotated)。轻量级标签跟分枝一样,不会改变。它就是 针对某个特定提交的指针。带注释的标签是git仓库中的对象。它是一组校验和,包含标签名、email、日期,标签信息,GPG签名和验证。 一般情况下,建议创建带注释的标签,这样就会保留这些信息,但是如果你只是需要临时性标签或者某些原因你不想在标签中附带上 面说的这些信息,lightweight标签更合适些。 Git常用命令 其他常用命令 // 查看文件修改状态,绿色为staged,红色为modified ⚫ git status ⚫ git log [--pretty=raw] // 查看提交日志 ⚫ git show <commit> // 查看commit节点提交的修改细节 ⚫ git branch [–r] // 查看所有分支 ⚫ git reflog // 查看本地仓库所有的分支HEAD操作记录 Windows下Git配置 安装Windows下的Git工具 一直Next,默认安装即可,安装完成后,右键菜单中会出 现“Git GUI Here”和“Git Bash Here”,前者为图形界面, 后者为命令行界面。 找到合适的文件夹,右键选择“Git Bash Here”,就可以使用 git clone命令来下载对应的远程仓库的代码,前提是你拥有对应项 目的开发者权限。 Windows下Git配置 Git工具的配置文件 Git的配置文件默认路径为:C:\Users\xxx\.gitconfig 需要配置的有: [user] name = Liu Fei email = fei-liu@southchip.com [alias] a = add –A ma = commit –amend mm = commit –m dc = diff –cached cd = clean –df rh = reset –hard rc = rebase --continue [core] autocrlf = false editor = vim [user] 配置的是全局姓名和邮箱 [alias] 配置一下常用命令的缩写 [core] 配置命令行界面下的文件编辑器为vim Gitlab使用 注册和登录: 浏览器访问:http://southchips.net:8192/ 注意:E-mail必须使用南芯企业邮箱,后续会受到验证邮件,验证通过后即可登录。 Gitlab使用 个人偏好设置: 进到Settings->Preferences下的Localization区域,Language中可选择为简体中文,其他部分可根据个人喜好设置 Gitlab使用 项目管理: 一个用户可以同时在不同项目中扮演不同角色,Gitlab中共有Guest,Reporter,Developer,Maintainer四种角色。 Guest: 访客,只可查看公共信息 Reporter: 可以创建Issue,提交问题,粘贴问题描述的图片和测试log文件 Developer:可以访问代码,创建分支并提交修改,可以提交Merge Request Maintainer:拥有本项目的所有权限,可以管理人员,wiki的书写以及合入开发人员提交的Merge Request 各角色的不同权限详情请见: http://southchips.net:8192/help/user/permissions Gitlab Workflow DEVELOP Init E D A merge pull MASTER Init A B C D pull PRODUTION • • • Init A B E ··· cherry-pick D E 目前所有的项目仓库,只存在一个主分支master,它是所有新特性的集合,永远是最新且能稳定工作的。 当由于新需求、问题需要修改代码时,建议在开发时从master pull一个develop-xxx分支。所有相关的开发工作都在develop-xxx分支完 成,最后测试通过后,再通过merge request合入master 。 当一个项目开发到量产阶段时,可以从此时的master分支pull一个production-xxx分支,用于保存项目的最终量产代码,当发现必须要修 改的bug后,同样先基于master pull一个develop-xxx 分支,将修改的代码提交至develop-xxx ,回归测试确认没有问题后,再cherrypick至production-xxx分支。并发布新的程序版本。 Gitlab 新建议题 1. 在项目中创建新议题: 2. 填写新议题的信息: Gitlab 新建议题 3. 从议题详情中,创建相关的合并请求与分支: Gitlab 代码修改及提交 1. 在本地仓库获取新分支信息,并将修改提交: 需要用到的git命令: git pull 获取新分支信息 git checkout xxx 将本地代码切换到xxx分支 git add –u 本地提交修改的文件 git commit 填写修改信息,并提交 git push 将提交推送到服务器上 参考资料 ⚫ Gitlab社区版使用说明 https://docs.gitlab.com.cn/ce/README.html ⚫ 菜鸟联盟git教程 https://www.runoob.com/git/git-tutorial.html ⚫ Git官方说明 https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control