Git 培训实战

2020-04-02
10分钟阅读时长

实验1:注册 Gitee 账号和环境搭建

【版本】

当前版本号v20200405

版本修改说明
v20200405优化部分学生容易误解犯错的地方,增加一些常见问题的解答
v20200402初始化版本

【实验名称】

实验1:注册 Gitee 账号和环境搭建

【实验目的】

  • 注册 Gitee 账号
  • 搭建 Git 客户端和免密登录

【实验原理】

  • 注册 Gitee 账号,创建仓库
  • 获取 Git 客户端,通过 Git 访问仓库

【实验环境】

  • 操作系统: Windows系统。
  • Git 客户端 Cmder

【实验资源】

  • Git 客户端 cmder.7z:是一个集成 Git 的命令行的终端软件。

  • 文本编辑器 Notepad++:是一个优秀的文本编辑器。

https://pan.baidu.com/s/1gukX79FA_Lcg2IFFaW_hzA#提取码:eenh

【实验步骤】

  1. 浏览器访问Gitee.com,点击“加入码云”,输入你的个人信息,注册一个账号。

  1. 下载 Cmder,在电脑本地解压 Cmder ,Cmder 自带了Git 命令。

  2. 打开 Cmder,输入 git 测试是否显示命令的使用方法。

  1. 配置你Git 全局用户名和邮箱。注意替换你的英文名和注册 Gitee 的邮箱。
git config --global user.name "替换为你的英文名"
git config --global user.email "替换为你注册Gitee的邮箱"
  1. 接下来配置免密访问Gitee.com。为了能够向刚创建的仓库提交代码,我们需要配置加密的密钥到Gitee.com,实现通讯加密的同时,不需要每次都验证账户输入密码。

  2. 在Cmder 输入以下命令,注意把邮箱替换为你注册Gitee.com 的邮箱地址。Cmder 反馈的问题只需要一路按回车即可。

ssh-keygen -t rsa -C "你注册的Gitee.com的邮箱地址"

  1. 命令结束以后会在你的个人用户目录下生成一个.ssh的目录,例如C:\Users\修改为你的Windows用户名\.ssh。进入此目录会发现有2个生成好的公钥和私钥文件。
#RSA 私钥
id_rsa

#RSA 公钥文件
id_rsa.pub
  1. .ssh目录新建2个文本文件,文件名和内容如下。

文件名(注意去除.txt后缀名):config

# gitee 指定私钥路径
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

文件名(注意去除.txt后缀名):known_hosts

gitee.com <粘贴id_rsa.pub的内容,并去掉它结尾的邮箱>
  1. 登录 Gitee,进入此链接 https://gitee.com/profile/sshkeys 添加公钥。标题可以输入Pub-202004,打开 id_rsa.pub,把所有内容复制粘贴到公钥,并保存。

  1. 打开 Cmder 测试是否能正常认证 Gitee.com
ssh -T git@gitee.com


实验2:创建 Gitee 仓库和提交代码

【实验名称】

实验2:创建 Gitee 仓库和提交代码

【实验目的】

  • 掌握创建 Gitee 仓库
  • 掌握使用 Git 提交代码。

【实验原理】

【实验环境】

  • 操作系统: Windows系统。
  • Git 客户端 Cmder
  • Gitee 注册仓库

【实验资源】

实验代码下载

https://pan.baidu.com/s/1gukX79FA_Lcg2IFFaW_hzA#提取码:eenh

【实验步骤】

  1. 登录 Gitee.com,点击右上角+号,新建一个仓库。

  1. 新建一个名为GitSample的公开仓库,具体设置如下。

  1. 注意选择分支类型为生产/发布模型

  1. 点击创建按钮,完成仓库的创建。

  2. 复制仓库的 SSH 访问链接。(注意是 SSH 协议,不是 HTTPS)

  3. 打开 Cmder,选取一个目录存放仓库的代码,例如d:\GitTest。执行以下命令 clone 仓库的代码。

d:
mkdir d:\GitTest
cd d:\GitTest
git clone 替换为你的仓库SSH访问链接

  1. 进入D:\GitTest目录会看到仓库已经下载成功。

  2. Git培训代码.zip解压到 GitSample 目录下。

  3. 使用git add命令把新增的代码加入暂存区。

cd GitSample
git add *

  1. 查看暂存区的代码状态。可以看到文件处于new file状态。
git status

  1. 使用git commit命令把新增的代码提交到本地仓库。
git commit -m "项目初始化提交"

  1. 查看暂存区的代码状态。可以看到暂存区没有文件提交的状态。
git status

  1. 使用git push命令把本地仓库代码提交到远程仓库(Gitee仓库)。
git push

  1. 浏览器访问 Gitee 的仓库首页,查看是否已经把代码进行提交。

  1. 使用 Notepad++ 打开index.html文件。按以下修改网页版本,并保存。

  2. 浏览器打开index.html网页查看版本号是否修改成功。

  3. 使用刚才学习的git addgit commitgit push命令来提交这次的修改。可以在 Gitee 仓库首页查看日志,是否提交成功。


实验3:Git 分支和标签管理

【实验名称】

实验3:Git 分支和标签管理

【实验目的】

  • 学会如何管理 Git 的分支,而且能够使用适当的分支进行开发,发布和修复 bug。

【实验背景】

在软件的开发行业,有一种常见的版本号分类方法。这种版本号使用数字标记,用点(dot)符号隔开,每次版本更新数字会递增。例如1.3.6。通常1代表大版本号,代表软件的重大改版更新,架构的大更改。3代表小版本号,一般是新增一些小功能或模块。6代表功能修复,就是我们常说的修bug。

这个实验我们打算模拟发布几个版本,版本号定为1.0.0。那么接下来,我们将发布:

  • (1)v1.0.0 正式版
  • (2)v1.0.1 正式版,包含一个 bug 修复(hotfix)。
  • (3)v1.1.0 Build-20191104 新特性开发版,包含一个新特性

【实验步骤】

  1. 打开Cmder,使用git branch 命令来查看本地仓库的分支。*号代表当前使用的分支。

  2. 使用git log 命令来查看本地仓库的提交历史,发布版本之前,我们需要确认该版本包含了哪些提交内容。

  1. Master 是主干分支,通常我们正式版本都应该从主干分支来发布。发布之前在这个版本位置上标记上版本信息,也就是打标签,通过打标签,以后我们知道发布的版本对应着哪一次提交的内容。我们再 master 分支(主干)上打上 v1.0.0 的标签
git tag -a v1.0.0 -m '正式版v1.0.0'
  1. 我们可以使用以下命令来查看所有的标签。
git tag -l

  1. 新增的标签提交到远程仓库,在远程仓库查看标签是否已经提交。
git push --follow-tags

  1. 可以尝试在远程仓库创建发行版,这样别人就可以直接下载该版本的应用,具体同学们自己探索实现。

  1. 接下来假设我们在正式版v1.0.0发现了一个bug,我们需要紧急修复。这时候应该要在master分支上,基于v1.0.0来修复这个bug,所以我们从标签v1.0.0这里新增一个分支来修复。
git checkout -b hotfix-v1.0.1 v1.0.0

git branch 命令可以看到我们新增了一个hotfix-v1.0.1 分支,而且当前郑处于这个分支之上。

如果这时候你想切换到其他分支,可以使用 git checkout 分支名称 命令来切换到不同的分支。

  1. 我们直接修改index.html,执行以下命令

修改为

使用add,commit和push命令来提交。

git add index.html
git commit -m "修复一个版本号的bug"
git push
  1. hotfix-v1.0.1是一个临时的分支,修改完以后,我们需要把这些修改合并回 master 分支。
#切换到 master 分支
git checkout master
#把hotfix-v1.0.1分支的修改合并到当前的 master 分支
git merge --no-ff hotfix-v1.0.1
#加上标签v1.0.1
git tag -a v1.0.1 -m "正式版v1.0.1"
  1. hotfix-v1.0.1 分支已经合并回 master 分支,为了维护历史方便,通常我们选择删除此分支。
git branch -d hotfix-v1.0.1
  1. push 到远程仓库查看新的 tag 是否存在。
git push --follow-tags

  1. 现在需要开始开发一个新特性版本,版本号暂定为 v1.1.0,但是这个版本可能短期内开发不完,项目经理决定采取快速迭代的开发方式,每日都发布一个开发版,在版本号后面加上 Build的日期。例如第一天开发是2020年4月3日,那么版本号就是v1.1.0 Build-20200403。为了不影响master 分支的正常维护(master 分支可能还要发布修复bug),我们需要在v1.0.1 标签这里再新建一个develop分支。
git checkout -b develop v1.0.1
  1. 我们修改 index.html 内容。并且使用标签标记为v1.1.0-Build-20200403

git add index.html
git commit -m "修改开发版版本号"
git tag -a 'v1.1.0-Build-20200403' -m "每日开发版本标签 20200403"
#这一句是为了设置本地仓库的分支对应远程仓库的分支
git push --set-upstream origin develop
git push --follow-tags
  1. 小结和思考 从实战5当中,我们的版本分支图如下:

思考:

(1)如果开发版v1.1.0 完成,需要正式发布v1.1.0,需要如何操作发布?

(2)如果要新开发一个v1.2.0 版本,要如何操作?


实验4:使用 IDEA 操作 Git

【实验名称】

实验4:使用 IDEA 操作 Git

【实验目的】

  • 学会如何使用 IDEA 来操作 Git 。

【实验背景】

现在主流的集成开发工具都支持Git。IDEA 也集成了 Git 的客户端,这个实验是通过操作来熟悉 IDEA 的 Git 的使用。

【实验步骤】

  1. 打开 IDEA,选择Get From Version Control,从版本管理工具导入项目。

  2. 注意输入仓库的地址和修改项目的目录。

  3. 由于 IDEA 无法识别我们的代码类型,我们选择从现有代码导入项目。

  4. 进入 IDEA 项目主界面,我们把 GitSample.iml 这个项目配置文件提交到远程仓库。

使用右键菜单 Git -> Add

使用右键菜单 Git -> Commit File…

  1. 输入提交的消息,进行提交。

  2. IDEA 左下角的Version Control 选项卡可以查看Git的版本管理信息。

(1)查看本地修改了的文件。

(2)查看 Git 提交的日志。

  1. 尝试修改index.html文件的代码,并提交到 Gitee 仓库。

【常见问题解答FAQ】

问题1:Cmder 提示“Bad owner or permissions on” 提示。

答:这是因为你当前Windows 用户可能不具备.ssh目录的访问权限,导致创建密钥失败。可以尝试以下操作,为.ssh目录重新配置用户访问权限:

  • 1.找到.ssh文件夹。它通常位于C\Users,例如C\Users<你的windows用户名>。
  • 2.右键单击.ssh文件夹,然后单击“属性”。
  • 3.找到并点击“安全”标签。
  • 4.然后单击“高级”。单击“禁用继承”,单击“确定”。将出现警告弹出容口。单击“从象中删除所有继承的权限”。
  • 5.你会注意到所有用户都将被删除。让我们添加所有者。在同一窗口中,单击“编辑”按钮。
  • 6.接下来,单击“添加”以显示“选择用户或组”窗口。
  • 7.单击“高级”,然后单击“立即查找”按钮。应显示用户结果列表。选择您的用户帐户。
  • 8.然后单击“确定”(大约三次)以关闭所有窗口。

问题2:克隆远程仓库显示“Are you sure you want to continue connecting(yes/no)?”

答:输入 yes,继续连接。

问题3:克隆仓库提示“warning: You appear to have cloned an empty repository.”

答:这是一个警告,但是可以忽略。意思是提醒你克隆了一个空的仓库。

问题4:执行 ssh-keygen 命令提示“could not create directory ‘c:\xxx\ssh’:Invalid argument”

答:这可能是2个原因造成。一是你没有c盘的访问权限,尝试查看问题1的解决办法;二是你的 Windows 用户名可能采用了中文等特殊字符,命令参数不支持中文和特殊字符目录导致创建目录失败。你可以切换到一个英文名称的 Windows 用户再尝试。

问题5:弹出CredentialHelperSelector 提示

答:这是因为部分同学从https协议来操作远程的仓库,这时候 Git 会提示你是否使用加密助手来存储你的用户名和密码。你可以选择managerstorewincred三者其中之一,点击select进行保存。

问题6:执行命令提示“error: invalid key” 或者 “invalid argument”

答:注意检查命令各个参数之间是不是缺失了空格,导致参数错误。

问题7:提示fatal:Authentication failed for ‘https://gitee.com/xxxx'

答:这是由于使用HTTPS协议管理远程仓库,使用了错误的gitee用户名和密码,请注意输入正确的注册邮箱和密码。

问题8:提示“warning:LF will be replaced by CRLF in xxxx The file will have its original line endings in your working directory”

答:这是 Git 提交到远程仓库自动把提交文件的 Windows 的分行符转换为 Unix/Linux 系统的分行符。这种警告可以忽略。

问题9:提示“Please tell me who you are.”

Please tell me who you are.
Run
git config --global user.email "youlexample.com"
git config --global user.name "Your Name"

答: 这是由于 Git 的 user.email 和 user.name 没有配置,所以远程仓库认证失败。请按照 git config 那两句命令配置 gitee 认证邮箱和你的用户名。