一份Git的全总结


励志

在这里插入图片描述
It’s what I was meant to do. And nothing’s gonna stop me.
这是我命中注定要做的,没什么能够阻止我。

一、Git学习路线

学习时长建议:3天

猴子漫画图解-在线学习

Linux笔记传送门

二、Git安装

windows安装
阿里镜像安装

ubuntu配置:apt-get install git
centos配置:yum install git


以Windos为例,成功安装后:
在这里插入图片描述
备注:

  • Git GUI:Git提供的图形界面工具
  • Git Bash:Git提供的命令行工具
> git config --global user.name "用户名"
> git config --global user.email "邮箱"
#检查信息是否写入成功
git config --list

拓展:为常用指令配置别名

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。

  1. 打开用户目录,创建 .bashrc 文件
    部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行
touch ~/.bashrc
  1. 在 .bashrc 文件中输入如下内容:
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
  1. 打开gitBash,执行
source ~/.bashrc

解决GitBash乱码问题:

  1. 打开GitBash执行下面命令
git config --global core.quotepath false
  1. ${git_home}/etc/bash.bashrc 文件最后加入下面两行
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

三、理论基础

(1)Git的发展

Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成,在编写完成之后就立马上手接管Linux源代码,不过在此之前Linux是由BitMover公司开发的BitKeeper分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但BitMover公司看中Linux开源精神,免费授权给Linux社区使用,在2002年时,Linux开始使用BitKeeper分布式版本控制系统管理源代码,但好景不长,有一天Linux社区成员Andrew(samba(局域网共享文件c/s程序)的作者)试图破解BitKeeper共享给所有人使用,被BitMover公司发现并收回了免费使用的版权,随后Linus就用了两周时间开发出了git(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统

大名鼎鼎的github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西github是一个社区git是一个服务系统,github只支持git分布式系统,所以故名成为github。

(2)Git 是什么?

Git是分布式版本控制系统!(每个人都拥有全部的代码)

主流的版本控制系统:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

现在影响力最大且使用最广泛的是Git(没有中央服务器、工作不需要联网)与SVN(集中式版本控制系统)(版本库是集中放在中央服务器的、工作需要联网)

SVN:
在这里插入图片描述
GIT:
在这里插入图片描述

(3)三种状态

已提交(committed)、已修改(modified) 和 已暂存(staged)

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

这会让Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
在这里插入图片描述

  • 工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git的术语叫做“索引”,不过一般说法还是叫“暂存区”。
  • Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

基本的 Git 工作流程如下:

  1. 在工作区中修改文件。
  2. 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
  3. 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录

如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于
已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。

(4)Git 保证完整性

Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。

Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和a-f)组成的字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:

24b9da6552252987aa493b52f8696cd6d3b00373

Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

(5)Git工作流程图

在这里插入图片描述
命令如下:

  1. clone(克隆): 从远程仓库中克隆代码到本地仓库
  2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加): 在提交前先将代码提交到暂存区
  4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
  6. pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于
    fetch+merge
  7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

(6)基础操作练习

#####################仓库初始化######################
# 创建目录(git_test01)并在目录下打开gitbash#
初始化git仓库
git init
#####################创建文件并提交#####################
# 目录下创建文件 file01.txt#
将修改加入暂存区
git add .
# 将修改提交到本地仓库,提交记录内容为:commit 001
git commit -m 'commit 001'
# 查看日志
git log
####################修改文件并提交######################
# 修改file01的内容为:count=1#
将修改加入暂存区
git add .
# # 将修改提交到本地仓库,提交记录内容为:update file01
git commit --m 'update file01'
# 查看日志
git log
# 以精简的方式显示提交记录
git-log(需要改别名,请看前面)
####################将最后一次修改还原##################
# 查看提交记录
git-log
# 找到倒数第2次提交的commitID#
版本回退
git reset commitID --hard

四、实战

在这里插入图片描述
常用名词解释:

  • msater:默认开发分支
  • origin:默认远程仓库版本库
  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

Win系统下,请打开隐藏文件显示

1.新建代码库

# 在当前目录新建一个Git代码库
$ git init
 
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
 
# 克隆一个项目和它的整个代码历史
$ git clone [url]

2.配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

# 显示当前的Git配置
$ git config --list
 
# 编辑Git配置文件
$ git config -e [--global]
 
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

3.增加/删除/修改文件

文件的四种状态:

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致,文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
# 查看状态
$ git status

# 查看变更内容
$ git diff 

# 添加指定文件到暂存区
$ git add [file1] [file2] ...
 
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
 
# 添加当前目录的所有文件到暂存区
$ git add .
 
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
 
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
 
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
 
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

注意:rm 命令删除的只是工作目录和暂存区域的文件(即取消跟踪,在下次提交时不纳入版本管理)

4.代码提交

忽略文件:

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号 (#)开始 的行将会被忽略。
  2. 可以使用Linux 通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号 (!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

# 提交暂存区到仓库区
$ git commit -m [message]
 
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
 
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
 
# 提交时显示所有diff信息
$ git commit -v
 
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
 
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

5.分支

在开发中,一般有如下分支使用原则与流程:

  • master (生产) 分支
    线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
  • develop(开发)分支
    是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
  • feature/xxxx分支
    从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
  • hotfix/xxxx分支,
    从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。
  • 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。
# 列出所有本地分支
$ git branch
 
# 列出所有远程分支
$ git branch -r

# 列出本地分支与远程分支的关联关系
$ git branch -vv
 
# 列出所有本地分支和远程分支
$ git branch -a
 
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
 
# **以远程分支为基础新建一个分支,并切换到该分支
$ git checkout -b [branch] origin/[remote-branch]
 
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
 
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
 
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
 
# 切换到上一个分支
$ git checkout -
 
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
 
# 合并指定分支到当前分支
$ git merge [branch]
 
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
 
# 删除分支
$ git branch -d [branch-name]

$ git branch -D [branch-name]  强制删除
 
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

6.标签

# 列出所有tag
$ git tag
 
# 新建一个tag在当前commit
$ git tag [tag]
 
# 新建一个tag在指定commit
$ git tag [tag] [commit]
 
# 删除本地tag
$ git tag -d [tag]
 
# 删除远程tag
$ git push origin :refs/tags/[tagName]
 
# 查看tag信息
$ git show [tag]
 
# 提交指定tag
$ git push [remote] [tag]
 
# 提交所有tag
$ git push [remote] --tags
 
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

7.查看信息

暂存区与工作树:

目的:对比版本之间有哪些不同

在已经存在的文件b.txt中添加内容:

$ git diff
diff --git a/b.txt b/b.txt
index 9ab39d5..4d37a8a 100644
--- a/b.txt
+++ b/b.txt
@@ -2,3 +2,4 @@
1212
123123123
234234234
+手动阀手动阀

现在来解释一下上面每一行的含义:

第一行:diff --git a/b.txt b/b.txt
表示对比的是存放在暂存区域和工作目录的b.txt

第二行:index 9ab39d5…4d37a8a 100644
表示对应文件的 ID 分别是 9ab39d5和 4d37a8a,左边暂存区域,后边当前目录。最后的 100644 是指定文件的类型和权限

第三行:— a/b.txt
— 表示该文件是旧文件(存放在暂存区域)

第四行:+++ b/b.txt
+++ 表示该文件是新文件(存放在工作区域)

第五行:@@ -2,3 +2,4 @@
以 @@ 开头和结束,中间的“-”表示旧文件,“+”表示新文件,后边的数字表示“开始行号,显示行数”

内容:+代表新增的行 -代表少了的行

直接执行 git diff 命令是比较暂存区域与工作目录的文件内容

# 显示有变更的文件
$ git status
 
# 显示当前分支的版本历史
$ git log
 
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat
 
# 搜索提交历史,根据关键词
$ git log -S [keyword]
 
# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s
 
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature
 
# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]
 
# 显示指定文件相关的每一次diff
$ git log -p [file]
 
# 显示过去5次提交
$ git log -5 --pretty --oneline
 
# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
 
# 显示指定文件是什么人在什么时间修改过
$ git blame [file]
 
# 显示暂存区和工作区的差异
$ git diff
 
# 显示暂存区和上一个commit的差异
$ git diff --cached [file]
 
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
 
# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]
 
# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"
 
# 显示某次提交的元数据和内容变化
$ git show [commit]
 
# 显示某次提交发生变化的文件
$ git show --name-only [commit]
 
# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]
 
# 显示当前分支的最近几次提交
$ git reflog

8.远程同步

# 下载远程仓库的所有变动(不合并)
$ git fetch [remote]
 
# 显示所有远程仓库
$ git remote -v
 
# 显示某个远程仓库的信息
$ git remote show [remote]
 
# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
 
# 取回远程仓库的变化,并与本地分支合并(fetch + merge)
$ git pull [remote] [branch]
 
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]
 
# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force
 
# 推送所有分支到远程仓库
$ git push [remote] --all

9.撤销

时光回退:

有关回退的命令有两个:reset 和 checkout

(1)回滚快照

注:快照即提交的版本,每个版本我们称之为一个快照。
head永远指向当前分支的当前快照
HEAD~ 表示 HEAD 的上一个快照,HEAD~~表示上上个快照 , 如果表示上10个快照,则可以用HEAD ~10

在这里插入图片描述

  • –hard : 回退版本库,暂存区,工作区。(因此我们修改过的代码就没了,需要谨慎使用)
  • reset 不仅移动 HEAD 的指向,将快照回滚动到暂存区域,它还将暂存区域的文件还原到工作目录。
  • –mixed: 回退版本库,暂存区。(–mixed为git reset的默认参数,即当任何参数都不加的时候的参数)
  • –soft: 回退版本库。就相当于只移动 HEAD 的指向,但并不会将快照回滚到暂存区域。相当于撤消了上一次的提交(commit)。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(2)回滚指定快照

reset 不仅可以回滚指定快照,还可以回滚个别文件。

命令格式:

git reset --hard c7c0e3bf6d64404e3e68632c24ca13eac38b02e2

唯一的一个前提条件是:你需要知道指定快照的 ID 号

git reflog

# 恢复暂存区的指定文件到工作区
$ git checkout [file]
 
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
 
# 恢复暂存区的所有文件到工作区
$ git checkout .
 
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
 
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
 
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
 
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
 
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
 
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
 
# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop

10.其他

# 生成一个可供发布的压缩包
$ git archive

11.解决冲突

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

  1. 处理文件中冲突的地方
  2. 将解决完冲突的文件加入暂存区(add)
  3. 提交到仓库(commit)

五、码云的使用

既然git是一个团队合作开发的工具,那本地的仓库肯定不能满足团队开发的需求!就必须要有一个远程仓库统一管理我们的代码。

在这里插入图片描述
Gitee传送门

作者的Gittee,开源Java学习全路线、全资料,让天下没有难学的Java!
传送门
在这里插入图片描述

0.名词解释

1、pull Request 开发者在本地对源代码进行修改之后,想仓库提交请求合并的功能
2、Wiki 该功能通常用作文档手册的编写当中
3、Issues:是将一个任务或问题分配给一个issue进行跟踪和管理,可以当做bug管理系统使用,每一个
功能的更正或修改都应该对应一个issue,只要看issues就能看到关于这个更改的所有信息
4、统计就是仓库各项数据的数据统计,devOPs是持续继承、持续交付的服务,服务:其他码云提供的
一些服务。
5、管理:对仓库的一些修改删除等操作

1.创建远程仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.建立本地仓库

# 使用前先简单配置git(主要是使用者的name和email),用于代码提交时识别用户,以下两行命令最后的字符串写自己的
git config --global user.name '你的用户名'
git config --global user.email '你的邮箱'

# 创建gitee_learn文件夹,并进入
mkdir git-study
cd git-study

# 使用git命令初始化该文件夹,将其变为git可以进行版本管理的本地仓库
git init

# 创建文件123.txt,并写入数据"Hello world!"
echo 'Hello world!' > 123.txt

# 添加到仓库
git add 123.txt

# 提交到仓库
git commit -m 'first add a file'

# 查看仓库修改信息
git log

3.连接本地仓库和远程仓库进行程序上传和下载

# 本地仓库与gitee上的仓库关联起来
git remote add origin git@gitee.com:love666xh/git-study.git(SSH)
git remote add origin https://gitee.com/love666xh/git-study.git(HTTPS)

# 推送本地仓库到gitee
git push -u origin master
# 首次推送需要使用-u参数,以后推送就不需要该参数,直接推送
git push origin master

# 从gitee上拷贝仓库到本地
git clone git@gitee.com:love666xh/git-study.git

# 同步gitee远端仓库到本地
cd git-study
git pull
git fetch  // 合并本地

4.团队协作


HTTPS好还是SSH好?

git可以使用四种主要的协议来传输资料: 本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 git协议。其中,本地协议由于目前大都是进行远程开发和共享代码所以一般不常用,而git协议由于缺乏授权机制且较难架设所以也不常用。最常用的便是SSH和HTTP(S)协议。git关联远程仓库可以使用http协议或者ssh协议.

HTTPS优缺点:

  • 优点1: 相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用Git 之前先在本地生成 SSH密钥对再把公钥上传到服务器。 对非资深的使用者,或者系统上缺少SSH 相关程序的使用者,HTTP 协议的可用性是主要的优势。 与 SSH协议类似,HTTP 协议也非常快和高效
  • 优点2: 企业防火墙一般会打开 80 和 443这两个常见的http和https协议的端口,使用http和https的协议在架设了防火墙的企业里面就可以绕过安全限制正常使用git,非常方便
  • 缺点: 使用http/https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令. 但是现在操作系统或者其他git工具都提供了keychain 的功能,可以把你的账户密码记录在系统里,例如OSX 的 Keychain 或者 Windows的凭证管理器。所以也只需要输一次密码就搞定了。

SSH的优缺点:

  • 优点1: 架设 Git 服务器时常用 SSH 协议作为传输协议。 因为大多数环境下已经支持通过 SSH 访问——即时没有也比较很容易架设。 SSH 协议也是一个验证授权的网络协议;并且,因为其普遍性,架设和使用都很容易
  • 缺点1: SSH服务端一般使用22端口,企业防火墙可能没有打开这个端口。
  • 缺点2: SSH 协议的缺点在于你不能通过它实现匿名访问。 即便只要读取数据,使用者也要有通过SSH 访问你的主机的权限,这使得 SSH 协议不利于开源的项目。 如果你只在公司网络使用,SSH协议可能是你唯一要用到的协议。 如果你要同时提供匿名只读访问和 SSH 协议,那么你除了为自己推送架设 SSH 服务以外,还得架设一个可以让其他人访问的服务。

总结:

HTTPS利于匿名访问,适合开源项目可以方便被别人克隆和读取(但他没有push权限);毕竟为了克隆别人一个仓库学习一下你就要生成个ssh-key折腾一番还是比较麻烦,所以github除了支持ssh协议必然提供了https协议的支持。而SSH协议使用公钥认证比较适合内部项目。 当然了现在的代码管理平台例如github、gitliab,两种协议都是支持的,基本上看自己喜好和需求来选择就可以了。

关于Gittee SSH公钥问题:传送门

生成/添加SSH公钥:

Gitee 提供了基于SSH协议的Git服务,在使用SSH协议访问仓库仓库之前,需要先配置好账户/仓库的SSH公钥。

生成 sshkey:

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"

## 或者这个
ssh-keygen -t rsa

这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。

按照提示完成三次回车,即可生成 ssh key。

在这里插入图片描述
通过查看 ~/.ssh/id_rsa.pub 文件内容,获取到你的public key

cat ~/.ssh/id_rsa.pub

在这里插入图片描述
复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的public key 添加到仓库中。

在这里插入图片描述
在这里插入图片描述
添加后,在终端(Terminal)中输入

ssh -T git@gitee.com

首次使用需要确认并添加主机到本机SSH可信列表。若返回 Hi XXX! You’ve successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功。

win下的公钥具体产生地址:
在这里插入图片描述
可能会遇到的问题:

The authenticity of host ‘gitee.com (212.64.62.183)’ can’t be established.
在这里插入图片描述
原因:文件夹内缺少known_hosts文件

解决方案:输入yes回车,生成缺少的known_hosts文件

验证:

ssh -T git@gitee.com

在这里插入图片描述
使用SSH:
在这里插入图片描述

git init
git remote add origin xxxx
git push -u origin "master"

仓库公钥和可部署公钥

为了便于用户在多个项目仓库下使用一套公钥,免于重复部署和管理的繁琐,Gitee 推出了 「可部署公钥」 功能,支持在一个仓库空间下使用当前账户名下/参与的另一个仓库空间的部署公钥,实现公钥共用。

部署公钥允许以只读的方式访问仓库,主要用于仓库在生产服务器的部署上,免去HTTP方式每次操作都要输入密码和普通SSH方式担心不小心修改仓库代码的麻烦。

部署公钥配置后的机器,只支持clone与pull等只读操作。如果您想要对仓库进行写操作,请 添加个人公钥

个人公钥的添加地址:
在这里插入图片描述

多人合作开发流程

在这里插入图片描述

  1. 首先项目经理初始化仓库建立好分支。一般会建立两个,一个master分支,一个develop分支。当然,也可能建立一个预发布版本的分支用于测试不如realse分支。
  2. 对个分支设置保护行为。
  3. 添加项目成员

小航的开发:

  1. 将项目克隆到本地。
  2. 切换至开发分支
  3. 在开发分支上新建一个单独的功能分支,进行开发。
  4. 开发完成,合并到开发分支,如果功能分支没用了,可以删除。
  5. 先拉取新代码(git pull),其实就是合并,发生冲突,解决冲突。
  6. 解决完冲突,将代码推送至代码托管平台。

1、代码审查设置

在这里插入图片描述

2、选择项目分支保护

在这里插入图片描述
在这里插入图片描述

3、添加开发者

在这里插入图片描述
以上涉及到的Git命令:

>>> git clone 仓库地址
>>> git checkout develop
# 切换到`develop`分支
>>> git checkout -b feature-discuss
# 分出一个功能性分支
>>> touch discuss.java
# 假装discuss.java就是我们要开发的功能
>>> git add .
>>> git commit -m 'finish discuss feature'
# 提交更改,多次测试以后
>>> git checkout develop
# 回到develop分支
>>> git merge feature-discuss
# 把做好的功能合并到develop中
>>> git branch -d feature-discuss
# 删除功能性分支
>>> git push origin develop
# 把develop提交到远程仓库中

跨团队合作开发

在这里插入图片描述
项目组成员的开发保持不变。

跨团队成员的合作方式:

  1. 将代码fork到自己的仓库,同样可以进行相关的配置。
  2. 项目克隆到本地。
  3. 可以担任开发也可以多人开发。
  4. 开发完成后合并到自己的仓库
  5. 发起pull request请求给源仓库管理员
  6. 源仓库管理员进行code review(重新检查代码,审核代码),测试审核,通过则进行合并。

源仓库的构建:
这一步通常由项目发起人(项目管理员)来操作,源仓库为op/Chanjet_Asset_Management,并初始化两个分支master和develop.

开发者fork仓库到自己的账户下,作为自己开发所用的仓库:

在这里插入图片描述
把自己开发者仓库clone到本地

 >>> git clone 地址

重点

不要随便动别人的代码,写代码和提交之前先拉去最新的代码!
不要随便动别人的代码,写代码和提交之前先拉去最新的代码!
不要随便动别人的代码,写代码和提交之前先拉去最新的代码!

  1. 切换分支前先提交本地的修改
  2. 代码及时提交,提交过了就不会丢

六、Idea使用Git

配置

在这里插入图片描述

Gitee插件

在这里插入图片描述

从远程仓库拉项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

控制台查看分支提交等信息

查看分支

在这里插入图片描述
创建分支
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


建议这样创建分支:

示例1:
在这里插入图片描述
示例2:
在这里插入图片描述

针对某个具体的进行创建分支


分支的第三种操作:
在这里插入图片描述

切换分支
在这里插入图片描述
合并分支

在这里插入图片描述
项目回滚

找到要回滚的项目:
在这里插入图片描述
在这里插入图片描述
得到快照的ID号:
bbdf1b8f430df543218d92568994bc6324338384
在这里插入图片描述
在这里插入图片描述

提交代码

在这里插入图片描述
commit→pull→push
在这里插入图片描述
注意:如果是第一次提交代码,直接push,否则先pull,再push

在这里插入图片描述

解决冲突

在这里插入图片描述
解决冲突完后,别忘了加入暂存区,然后提交到本地仓库,最后推送到远程仓库

可能会遇到的问题:


提交项目到gitee报错Push to origin/master was rejected的解决办法

在项目文件夹下依次输入以下命令:

git pull
git pull origin master
git pull origin master --allow-unrelated-histories

git push -u origin master -f

IDEA配置.gitignore不生效的问题

原因:.gitignore只能忽略未被track的文件,而git本地缓存。如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

解决:先把本地缓存删除(改变成未track状态),然后再提交

在项目中右键点击 Git Bash Here进行命令窗口输入

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

IDEA常用Git操作入口

在这里插入图片描述
在这里插入图片描述

IDEA集成GitBash作为Terminal

在这里插入图片描述

七、加速访问GitHub

绑定hosts绕过DNS解析

  1. 找到hosts文件(win: C:\Windows\System32\drivers\etc linux: /etc/hosts)
  2. 查询ip传送门
    获得 github.com 和 github.global.ssl.fastly.net 域名的ip地址。
    在这里插入图片描述
    在这里插入图片描述
    得到ip地址:
    140.82.112.3
    199.232.69.194
  3. 添加hosts文件
# github
140.82.112.3       github.com
199.232.69.194     github.global.ssl.fastly.net
  1. 刷新DNS缓存。如windows下,在cmd窗口,执行 ipconfig/flushdns。
    在这里插入图片描述
  2. 重启浏览器,进入网页 https://github.com/

在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值