草庐IT

GIT、Gitee、GitLab、GitCode详解

迷小圈 2023-06-08 原文

文章目录

内容要点

GitHub创建远程库、 代码推送Push、 代码拉取Pull、 代码克隆 Clone、SSH免密登录、Idea集成GitHub
Gitee码云码云创建远程库、 Idea集成Gitee号 、码云连接Gitlab、进行代码的复制和迁移
GitlabGitLab服务器的搭建和部署、 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首次安装必须设置一下用户签名,否则无法提交代码。

注意:这里设置用户签名和将来登录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 常见六大原因

  1. 用户名 / 邮箱 / 密码是否输入正确
git config user.name | git config user.email  //查询
git config user.name xxx | git config user.email xxx  //设置当前仓库信息
  1. windows凭据
    可以在windows凭据中添加普通凭据,将访问网址设置为白名单。(不过一般连接push时输入账号密码就自动配置了,和问题1相仿)
  2. 是否在项目代码服务端添加公钥
    如果需要公钥和私钥访问的话,没有把公钥挂上代码管理服务端也可能git push失败
  3. 是否只能http访问
    有的项目或项目接口只能http访问,就不要用ssh的方式。
  4. 若ssh访问添加用户名
    地址形如 git@xxx.xxx.xxx.com,将@前替换为自己的项目用户名(这一点很多时候git@也是能正常运行的)
  5. 是否有权限
    配置好以上条件的前提下。我自己因为在gitlab没有管理员为我添加开发者权限(默认为访客),所以一直不能上传。

第十章、git commit 提交规范

类型说明
feat用户功能的新特性(项目自身构建方式的更新,不算新特性)
fix用户功能修复(项目自己的构建错误修复,不算功能修复)
docs更新文档
style代码格式化或风格变化
refactor重构(修改变量名、文件目录结构等不影响功能的变动)
test增加、修改测试代码,不涉及生产运行代码变化
chore日常维护,不涉及生产运行代码变化(写错个字、变更个版本号)

如果已提交记录不符合规范,可以使用git重写提交记录的方法进行修改

有关GIT、Gitee、GitLab、GitCode详解的更多相关文章

  1. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  2. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  3. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

  4. ruby - 混帐 & ruby : How can I unset the GIT_DIR variable from inside a ruby script? - 2

    我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co

  5. ruby - 让 bundler 使用 http : instead of git:? - 2

    我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://

  6. ruby - 将 Gitlab 从 9.3.7 更新到 9.3.8 安装 re2 时出错 - 2

    我们在Ubuntu14.04和Gitlab9.3.7上运行,运行良好。我们正在尝试更新到Gitlabv9.3.8的最新安全补丁,但它给我们这个错误:Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension.currentdirectory:/home/git/gitlab/vendor/bundle/ruby/2.3.0/gems/re2-1.0.0/ext/re2/usr/local/bin/ruby-r./siteconf20170720-19622-15i0edf.rbextconf.rbcheckingformain(

  7. ruby-on-rails - 安装 active admin 时 activeadmin.git (at master) is not yet checked out 错误 - 2

    Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文

  8. ruby-on-rails - 清除 GitLab 中的所有 Assets - 2

    我想在我公司安装的GitLab中使用自定义Logo-白色、Logo-黑色和网站图标。我用谷歌搜索了我的屁股并尝试了所有我能找到的方法来清除这些该死的图像,但似乎没有任何效果。这是唯一似乎成功运行但未删除图像的进程:bundleexecrakecache:clearRAILS_ENV=productionservicegitlabstopredis-cliFLUSHALLbundleexecrakeassets:precompileRAILS_ENV=productionservicegitlabstart然后我清除我的浏览器缓存并转到该域,再次出现相同的该死的图像!我什至删除了我能从应

  9. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  10. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

随机推荐