内容要点
GitHub | 创建远程库、 代码推送Push、 代码拉取Pull、 代码克隆 Clone、SSH免密登录、Idea集成GitHub |
---|---|
Gitee码云 | 码云创建远程库、 Idea集成Gitee号 、码云连接Gitlab、进行代码的复制和迁移 |
Gitlab | GitLab服务器的搭建和部署、 idea集成Gitlab |
开源免费的分布式版本控制系统,目前最新版本2.36.1
例子 | 优点 | 缺点 | |
---|---|---|---|
集中式版本控制 | CVS、SVN,存的是版本间的差异,占用空间小,回滚速度慢 | 项目存放在单一的服务器上,便于项目管理 | 中央服务器单点故障 |
分布式版本控制 | Git、Mercurial、Bazaar、Darcs,分布式版本控制存的不是版本与版本间的差异,而是版本间的索引,完整的版本快照,速度块 | 解决集中式缺点,每个客户端存的都是完整的项目(历史更新) |
VCS系统-----常用软件:
CVS 2000以前
SVN 2010年以前
Git 2010年以后
linux与git之父:托瓦兹
工作区------>git add 暂存区------->git commit 本地库(生成历史版本) ------->git push 到远程库
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
局域网 | GitLab |
---|---|
互联网 | GitHub(外网)、Gitee码云(国内网站) |
官网地址:https://git-scm.com/
查看GNU协议,可以直接点击下一步。
git version //git version 2.13.0.windows.1 查看版本
git config --global user.name 用户名 | 设置用户签名 |
---|---|
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add .文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog、git log | 查看历史版本,git log 查看详细版本信息 |
git reset --hard 版本号 | 版本穿梭 |
注:
①签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
注意:这里设置用户签名和将来登录Github(或其他代码托管中心)的账号没有任何关系。
设置用户签名后,由wanglu@DESKTOP-3T1MLM1 MINGW64 ~/Desktop 可知,在c盘用户的wanglu下,有.gitconfig文件,里面存储设置的name与邮箱
②git status //文件颜色是红色的代表该文件在工作区,绿色代表已存暂存区
③git rm --cached //删除暂存区文件
④生成的git文件名称意义:新建一个工作区workspace,git bash here,初始化git init
hooks--目录包含客户端或服务端的钩子脚本;
info--包含一个全局性排除文件
logs--保存日志信息
objects--目录储所有数据内容;
refs---目录存储指向数据(分支)的提交对象的指针
config--文件包含项目特有的配置选项
description--用来显示对仓库的描述信息
HEAD--文件指示目前被检出的分支
index--文件保存暂存区信息
注:在生成的.git里面的HEAD保存当前的文件是在哪个分支;在refs里面的heads里,保存了当前分支的最新版本
什么是分支?
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
分支的好处?
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
git branch 分支名 | 创建分支 |
---|---|
git branch -v | 查看分支 |
git branch -a | 查看所有分支(本地和远程分支) |
git branch -r | 查看远程分支,如果远程分支一直不显示,就git fetch,在git branch -r |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
1)冲突合并
冲突原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。
- master、hot-fix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的。所以创建分支的本质就是多创建一个指针。
- HEAD如果指向master,那么我们现在就在master分支上。
- HEAD如果执行hotfix,那么我们现在就在hotfix分支上。
- 所以切换分支的本质就是移动HEAD指针。
1)团队内协作
有一个远程仓库(代码托管中心),可执行pull、push、clone、
2)跨团队协作,体现分布式
fork 叉子
pull request 拉取请求
merge
①+New Repository、创建远程库名Repository name(和本地名一样就行)、选公共库,具有读权限(私有库,收费)、create repository
git remote -v | 查看当前所有远程地址别名 |
---|---|
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 |
创建远程仓库别名,本地git仓库与远程仓库关联(两种方式:1.https方式;2.SSH方式)
git remote add origin https://github.com/Jianhaochung/DGL_GCNER.git //远程仓库名称长,起个别名origin
git remote add origin [email protected]:Jianhaochung/DGL_GCNER.git //ssh
推送本地分支到远程仓库
git push origin master //推送分支
git push-u origin master
//如果本地分支master推送到远程分支dev
git push origin master:dev
git push origin dev --force //覆盖远程dev分支的内容
删除本地及远程分支
1 先切换到别的分支: git checkout dev
2 删除本地分支: git branch -d dev
3 如果删除不了可以强制删除,git branch -D dev
4 有必要的情况下,删除远程分支:git push origin --delete dev
5 在从公用的仓库fetch代码:git fetch origin master:dev
6 然后切换分支即可:git checkout dev
拉取代码
git pull origin master //拉取代码
克隆远程仓库到本地
git clone https://github.com/Jianhaochung/DGL_GCNER.git //克隆不需要登录账号
邀请团队加入
setting-----manage access
member ----invite member ----把邀请函链接发送给成员
拉取远程库内容
git pull origin master //拉取代码
成员拉取、下载、fork代码
生成ssh免密登录协议
ssh-keygen -t rsa -C atguigu@yueyue.com
//使用rsa非对称加密算法协议 连敲3次回车
ssh-keygen -t rsa -C “你的邮箱地址”
//执行生成私钥的命令后,会提示你输入一些信息,这里不用输入,直接回车即可(重复几次会车)。
在C:\Users\wanglu\ssh下有,id_rsa私钥、 id_rsa.pub公钥,获取公钥,复制到账号的SSH and GPG keys里面
ssh方式克隆:
ssh
//ssh.dll ssh.exe ssh-add.exe ssh-agent.exe ssh-copy-id sshd.exe ssh-keygen.exe ssh-keyscan.exe ssh-pageant.exe
ssh-keygen.exe
cat ~/.ssh/
//查看是否生成了id_rsa和id_rsa.pub
cat ~/.ssh/id_rsa.pub //获取公钥 id_rsa是私钥 id_rsa.pub是公钥
cd ~/.ssh //进入 .ssh 目录,查看是否有ssh
ls //找到 id_rsa.pub 文件
cat id_rsa.pub //查看公钥
ssh-keygen-t rsa //生成密钥
与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽IDE工具之间的差异。
创建忽略文件(git.ignore),放在用户的根目录下
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
还要在git.config下引用忽略的文件
[user]
name=Laynee
email=Layne@atquigu.come
[core]
excludesfile=C:/Users/asus/git.ignoree
注意:这里要使用"正斜线(/)",不要使用"反斜线(\)"
在idea的配置
file->setting->version control->git ->bin->git.exe->test
vcs->input into version control->create git repository
git 接管项目
在文件上右键add
git commit
在Version的版本里面的某一个,checkout Revision
new Branch
branch checkout
merge into current
conficts
手动merge
众所周知,GitHub服务器在国外,使用GitHub作为项目托管网站,如果网速不好的严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内托管网站-码云。
码云是开源中国推出的基于Git的代码托管服务中心,网址是https/gitee.com/,使用方式跟GitlHub一样,而且它还是一个中文网站。
idea不带码云,需要安装gitee插件
码云提供了直接复制GitlHub项目的功能,方便我们做项目的迁移和下载。
选择github连接,在码云创建已有仓库
强制刷新
Gitlab由乌克兰程序员DmitriyZaporozhets和ValerySizov 开发,它使用Ruby 语言写成。后来,一些部分用Go语言重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。Gitlab被IBM,Sony,JulichResearchCenter,NASA,Alibaba,Invincea,OReillyMedia,Leibniz-Rechenzentrum(L.RZ),CERN,SpaceX等组织使用。
1)服务器准备
只支持cetos7以上,要求内存4G,磁盘50G
关闭防火墙,并且配置好主机名和IP,保证服务器可以上网。
此教程使用虚拟机:主机名:gitlab-server IP地址:192.168.6.200
2)安装包
Yum在线安装gitlab-ce时,需要下载几百M的安装文件,非常耗时,所以最好提前把所需RPM包下载到本地,然后使用离线pm的方式安装。
下载地址:
https://packages.gitlab.com/gitlab/gitlab-
ce/packages/el/7/gitlab-ce-13.10.2-ce.0.e17.×86 64.rpm
注:资料里提供了此rpm包,直接将此包上传到服务器/opt/module目录下即可。
3)编写安装脚本
参考官网编写gitlab的安装脚本。保证服务器能上网
4)初始化GitLab服务
Gitlab添加组、创建用户、创建项目
5)启动GitLab服务
gitlab-ctl stop
gitlab-ctl start
6)使用浏览器访问GitLab
直接使用ip地址访问
使用主机名访问
安装gitlab插件
在plugin里搜索安装
只要GitLab的远程库连接定义好以后,对GitLab远程库进行pull和clone的操作和Github和码云一致,此处不再赘述。
1. 打开具体的项目
2. setting
3. General
4. Advanced
5. Remove project
6. 输入项目名称
Gitlab用户在组中权限
Gitlab用户在组中一般有五种权限:Guest、Reporter、Developer、Maintainer、Owner。
Guest | 可以创建issue、发表评论,但不能读写版本库 |
Reporter | 可以克隆代码,但不能提交,QA、PM可以赋予这个权限; |
Developer | 可以克隆代码、开发、提交、push,RD可以赋予这个权限; |
Maintainer | 可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限; |
Owner | 可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限。 |
Gitlab中的组和项目权限
Gitlab中的组和项目有三种访问权限:Private、Internal、Public
Private | 只有组成员才能看到 |
Internal | 只要登录的用户就能看到 |
Public | 所有人都能看到 |
开源项目和组设置的是Internal
2020年9月10日,CSDN正式推出全新升级的开源平台 GitCode
看了基本的介绍,基本和GitHub和开源中国的Gitee类似,基本操作也都是基于git,所以难度也很小
9.1、You are not allowed to push code to this project 常见六大原因
git config user.name | git config user.email //查询
git config user.name xxx | git config user.email xxx //设置当前仓库信息
类型 | 说明 |
---|---|
feat | 用户功能的新特性(项目自身构建方式的更新,不算新特性) |
fix | 用户功能修复(项目自己的构建错误修复,不算功能修复) |
docs | 更新文档 |
style | 代码格式化或风格变化 |
refactor | 重构(修改变量名、文件目录结构等不影响功能的变动) |
test | 增加、修改测试代码,不涉及生产运行代码变化 |
chore | 日常维护,不涉及生产运行代码变化(写错个字、变更个版本号) |
如果已提交记录不符合规范,可以使用git重写提交记录的方法进行修改