Git版本管理
一、Git的基本结构
名称 | 说明 |
---|---|
Remote | 远程仓库 |
Repository | 本地仓库 |
Index | 暂存区 |
Workspace | 工作区 |
Fetch/Clone | Fetch:本地仓库已有项目主分支,还需从远程仓库下载项目的其他分支;Clone:将远程仓库的项目克隆(clone)到本地。 |
Pull | 从远程仓库获取最新版本,然后再与本地分支merge(合并)。 |
Checkout | 检出(check)分支,即迁出一个分支的特定版本。默认是迁出分支的HEAD版本。 |
Add | 将工作区编辑后的文件可以添加到(add)暂存区。 |
Commit | 将暂存区的文件提交(commit)到本地仓库。 |
二、Git的使用
2.1 Git、Github与GitLab
-
Git
Git是一个版本控制系统,版本控制是一种用于记录一个或多个文件内容变化,方便我们查阅特定版本修订情况的系统。 -
Github
GitHub 和 GitLab 都是基于 web 的 Git 仓库,使用起来二者差不多,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。GitHub 作为开源代码库,拥有超过 900 万的开发者用户,目前仍然是最火的开源项目托管平台,GitHub 同时提供公共仓库和私有仓库,但如果使用私有仓库,是需要付费的。 -
GitLab
GitLab 解决了这个问题,你可以在上面创建私人的免费仓库。
GitLab 让开发团队对他们的代码仓库拥有更多的控制,相比较 GitHub , 它有不少特色:
(1) 允许免费设置仓库权限;
(2) 允许用户选择分享一个 project 的部分代码;
(3) 允许用户设置 project 的获取权限,进一步提升安全性;
(4) 可以设置获取到团队整体的改进进度;
(5) 通过 innersourcing 让不在权限范围内的人访问不到该资源; -
总结,从代码的私有性上来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。
2.2 Github托管Git
2.2.1 IDEA项目上传Github
-
首先,需要在IDEA中配置git,File–>Setting–>Vsrsion Control–>Git,并test:
-
为需要上传的项目创建本地仓库,VCS–>Import into Version Control–>Create Git Respository:
-
本地仓库建好后,因为项目没有导入本地仓库,所以项目文件都会被标红,将项目add、commit到本地仓库后,变回黑色:
-
在Github上创建远程仓库:
-
复制远程仓库的地址,在IDEA上配置远程仓库:
-
将IDEA上的项目commit并push:
push时可能会遇到报错:error: failed to push some refs to ‘xxx(远程库)’
这是因为README.md文件不在本地代码目录中
解决方案:在需要上传的IDEA项目文件夹右键git bash here,输入命令:
git pull –rebase origin master
2.2.2 Github项目添加组员
- 点击【Settings】——>【Collaborators】,在输入框中输入待邀请加入项目中其他成员的GitHub账号,然后点击【Add collaborator】
- 添加完成以后,点击【Copy invite link】,然后复制该邀请链接给邀请的人员
- 接收到邀请链接的人员登录GitHub,然后浏览器打开刚才的那个邀请链接(或是点击GitHub的通知提示信息即可),点击【Accept invitation】接收邀请即可。
2.3 GitLab托管Git
2.3.1 组队管理
- 查看队伍
- 新增队伍
填写 name、URL、description 以及 Visibility level
Visibility level:- Private(访问需授权)
- Internal(登录可访问)
- Public(匿名可访问)
一般设置为Private
- 组成员管理
添加组成员、添加权限;修改组成员权限
权限说明:-
Guest(匿名用户) - 创建项目、写留言薄
-
Reporter(报告人)- 创建项目、写留言薄、拉项目、
下载项目、创建代码片段 -
Developer(开发者)- 创建项目、写留言薄、拉项目、
下载项目、创建代码片段、
创建合并请求、创建新分支、推送不受保护的分支、
移除不受保护的分支 、创建标签、编写wiki -
Master(管理者)- 创建项目、写留言薄、拉项目、
下载项目、创建代码片段、
创建合并请求、创建新分支、推送不受保护的分支、
移除不受保护的分支 、创建标签、编写wiki、
增加团队成员、推送受保护的分支、移除受保护的分支、
编辑项目、添加部署密钥、配置项目钩子 -
Owner(所有者)- 创建项目、写留言薄、拉项目、
下载项目、创建代码片段、
创建合并请求、创建新分支、推送不受保护的分支、
移除不受保护的分支 、创建标签、编写wiki、
增加团队成员、推送受保护的分支、移除受保护的分支、
编辑项目、添加部署密钥、配置项目钩子、
开关公有模式、将项目转移到另一个名称空间、删除项目
-
2.3.2 项目管理
- 新建项目
- Project name
可以为字母、数字、空格、下划线、中划线和英文点号组成,且必须以字母或数字开头,不能使用中文 - Visibility Level
- Private:只有被赋予权限的用户可见
- Internal:登录用户可以下载
- Public:所有人可以下载
2.3.3 SSH Key设置
- 打开本地git brash,在其中输入指令,生成ssh公钥和私钥对,其中xxx@xxx.com为你的邮箱地址。
点击回车,会让你选择存储路径,此时不用理会直接回车,其会保存到默认路径。
ssh-keygen -t rsa -C 'xxx@xxx.com'
- 打开电脑的cmd,在其中输入命令并回车,此时已复制。
type %userprofile%\.ssh\id_rsa.pub | clip
- 到GitLab界面,点击settings,后点击SSH-Keys,将复制过来的公钥黏贴到key框中,下方title可自己命名,点击addkey。
- 经过如上操作,再次拉取代码和提取代码应无需再输密码。
- 若还需输入密码,输入下面命令,然后操作pull/push 会让输入用户名密码,第一次输入进去。下次再操作pull/push时就不需要输入用户名密码。
git config --global credential.helper store
2.3.4 GitLab下Git的使用
2.3.4.1 Git Bash下操作
- clone 克隆远程仓库到本地仓库
git clone git@git.lug.ustc.edu.cn:mygroup-test/getflowdemo.git
- 配置名字和邮箱
git config --global user.name "bukas"
git config --global user.email "bukas@gmail.com"
- 编辑 .gitignore(vim)
.gitignore文件中可以设置相应的忽略规则,来忽略相应文件的提交。
规则 | 作用 |
---|---|
/mtk | 过滤整个文件夹 |
*.zip | 过滤所有.zip文件 |
/mtk/do.c | 过滤某个具体文件 |
!/mtk/one.txt | 追踪(不过滤)某个具体文件 |
![]() | |
vim的使用:"i"进入编辑;“一直按住esc ,再连续按大写的z两次就退出来了。” |
- add、commint、push
git add . //提交单个文件直接接文件名,多个文件空格隔开
git commit -m 'init' //init是本次提交的声明
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master
git status //查看工作区当前的状态
- 创建分支、切换分支
git branch develop //创建develop分支
git branch //查看当前分支
git checkout develop //切换分支
git diff readme.md //查看文件修改内容
- 打标签
标签实际上是打在对应的commit上的,每一个commit 都有一个唯一的ID。
git log //显示从最近到最远的提交日志
git tag -a v0.0.0 c4dacbf395eb15868a3d3242ca1efbe34d392d38 -m "Ver-0.0.0-master"
git push origin v0.0.0
- 解决冲突
先pull,然后编辑、commit和push
git pull origin develop
git diff
- 分支合并到master分支
git pull
git checkout master
git merge develop
git add .
git commit -m 'merge develop to master'
git push -u origin master