文章目录
内容要点
GitHub | 创建远程库、 代码推送Push、 代码拉取Pull、 代码克隆 Clone、SSH免密登录、Idea集成GitHub |
---|---|
Gitee码云 | 码云创建远程库、 Idea集成Gitee号 、码云连接Gitlab、进行代码的复制和迁移 |
Gitlab | GitLab服务器的搭建和部署、 idea集成Gitlab |
第1章、 Git概述
开源免费的分布式版本控制系统,目前最新版本2.36.1
1.1、集中式版本控制和分布式版本控制
例子 | 优点 | 缺点 | |
---|---|---|---|
集中式版本控制 | CVS、SVN,存的是版本间的差异,占用空间小,回滚速度慢 | 项目存放在单一的服务器上,便于项目管理 | 中央服务器单点故障 |
分布式版本控制 | Git、Mercurial、Bazaar、Darcs,分布式版本控制存的不是版本与版本间的差异,而是版本间的索引,完整的版本快照,速度块 | 解决集中式缺点,每个客户端存的都是完整的项目(历史更新) |
VCS系统-----常用软件:
CVS 2000以前
SVN 2010年以前
Git 2010年以后
1.2、git历史
linux与git之父:托瓦兹
1.3、使用
工作区------>git add 暂存区------->git commit 本地库(生成历史版本) ------->git push 到远程库
1.4、Git与代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
局域网 | GitLab |
---|---|
互联网 | GitHub(外网)、Gitee码云(国内网站) |
第2章、 Git安装、常用命名
1.1、安装
官网地址:https://git-scm.com/
查看GNU协议,可以直接点击下一步。
git version //git version 2.13.0.windows.1 查看版本
1.2、Git常用命令
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 config 配置
Git中有三层config文件:系统、全局、本地
// 查看系统config,是git的安装目录
git config --system --list
// 查看当前用户(global)配置,当前登录用户的配置。(Win:C:\Users\Administrator.gitconfig) --global 全局
git config --global --list
// 查看当前仓库配置信息,适用于特定git项目的配置。–local当前项目
git config --local --list
注:
①签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。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里,保存了当前分支的最新版本
第3章 、Git分支操作及团队协作机制
3.1、分支的好处
什么是分支?
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
分支的好处?
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
3.2、分支的操作
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指针。
3.3、Git团队协作机制
1)团队内协作
有一个远程仓库(代码托管中心),可执行pull、push、clone、
2)跨团队协作,体现分布式
fork 叉子
pull request 拉取请求
merge
第4章、 GitHub操作
4.1、创建远程仓库
①+New Repository、创建远程库名Repository name(和本地名一样就行)、选公共库,具有读权限(私有库,收费)、create repository
4.2、远程仓库操作
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 git@github.com: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 //拉取代码
4.3、跨团队协作
成员拉取、下载、fork代码
4.4、SSH免密登录(*****)
生成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 //生成密钥
第5章、 IDEA集成Git
5.1配置Git忽略文件
与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽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
注意:这里要使用"正斜线(/)",不要使用"反斜线(\)"
5.2充位Gi程序
在idea的配置
file->setting->version control->git ->bin->git.exe->test
5.3初始化本地库
vcs->input into version control->create git repository
git 接管项目
5.4添加到新存区
在文件上右键add
5.5提交到本地库
git commit
5.6切换板本
在Version的版本里面的某一个,checkout Revision
5.7创建分支与切换分支
new Branch
branch checkout
5.8合并分支
merge into current
5.9解决冲突
conficts
手动merge
第6章、国内代码托管中心码云Gitee
6.1、简介
众所周知,GitHub服务器在国外,使用GitHub作为项目托管网站,如果网速不好的严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内托管网站-码云。
码云是开源中国推出的基于Git的代码托管服务中心,网址是https/gitee.com/,使用方式跟GitlHub一样,而且它还是一个中文网站。
6.2、码云创建远程仓库
6.3、idea使用码云
idea不带码云,需要安装gitee插件
6.4、码云复制GitHub项目
码云提供了直接复制GitlHub项目的功能,方便我们做项目的迁移和下载。
选择github连接,在码云创建已有仓库
强制刷新
第7章、自建代码托管平台Gitlab
7.1、简介
Gitlab由乌克兰程序员DmitriyZaporozhets和ValerySizov 开发,它使用Ruby 语言写成。后来,一些部分用Go语言重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。Gitlab被IBM,Sony,JulichResearchCenter,NASA,Alibaba,Invincea,OReillyMedia,Leibniz-Rechenzentrum(L.RZ),CERN,SpaceX等组织使用。
7.2、Gitlab安装与配置
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地址访问
使用主机名访问
7.3、IDEA集成Gitlab
安装gitlab插件
在plugin里搜索安装
只要GitLab的远程库连接定义好以后,对GitLab远程库进行pull和clone的操作和Github和码云一致,此处不再赘述。
7.4、删除gitlab项目
1. 打开具体的项目
2. setting
3. General
4. Advanced
5. Remove project
6. 输入项目名称
7.5、给member添加push权限
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
第八章 csdn的gitCode
2020年9月10日,CSDN正式推出全新升级的开源平台 GitCode
看了基本的介绍,基本和GitHub和开源中国的Gitee类似,基本操作也都是基于git,所以难度也很小
第九章 git push失败原因
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 //设置当前仓库信息
- windows凭据
可以在windows凭据中添加普通凭据,将访问网址设置为白名单。(不过一般连接push时输入账号密码就自动配置了,和问题1相仿) - 是否在项目代码服务端添加公钥
如果需要公钥和私钥访问的话,没有把公钥挂上代码管理服务端也可能git push失败 - 是否只能http访问
有的项目或项目接口只能http访问,就不要用ssh的方式。 - 若ssh访问添加用户名
地址形如 git@xxx.xxx.xxx.com,将@前替换为自己的项目用户名(这一点很多时候git@也是能正常运行的) - 是否有权限
配置好以上条件的前提下。我自己因为在gitlab没有管理员为我添加开发者权限(默认为访客),所以一直不能上传。
第十章、git commit 提交规范
类型 | 说明 |
---|---|
feat | 用户功能的新特性(项目自身构建方式的更新,不算新特性) |
fix | 用户功能修复(项目自己的构建错误修复,不算功能修复) |
docs | 更新文档 |
style | 代码格式化或风格变化 |
refactor | 重构(修改变量名、文件目录结构等不影响功能的变动) |
test | 增加、修改测试代码,不涉及生产运行代码变化 |
chore | 日常维护,不涉及生产运行代码变化(写错个字、变更个版本号) |
如果已提交记录不符合规范,可以使用git重写提交记录的方法进行修改