阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Git来管理源代码

443次阅读
没有评论

共计 5240 个字符,预计需要花费 14 分钟才能阅读完成。

软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码的历史以便于对代码的更改进行追溯,另外一些版本控制工具还提供了冲突合并等高级功能来协调多人对同一代码文件修改。所以版本控制工具可以看做整个编码工作的基础,如果没有版本控制来统一代码库,那么对于复杂且参与人数较多的项目是难以完成的,同时如果没有统一的代码库基础,那么如持续集成、发布等工作将无法开展。

本文将从以下几个方面介绍版本控制工具及 Git 的使用方法:

  • 常用的版本控制工具简介
  • 使用 Git 来管理源代码
    • Git 简介
    • 安装 Git
    • 创建一个本地仓库
  • Git 的常用操作
    • 文件的跟踪、修改、提交
    • 文件的比较
    • 文件状态及历史查看
    • 操作的撤销
    • 标签
    • 别名
  • 将本地仓库提交到远程
  • 小结

常用的版本控制工具简介

CVS:

CVS(Concurrent Versions System)是一个开源的版本控制系统,基于 C / S 模式,CVS 将代码存储在服务器上,通过客户端来获取、提交代码及其它操作。
SVN:
SVN(Subversion)和 CVS 一样是一个 C / S 模式的开源版本控制系统。
TFS/VSTS:
TFS(Team Foundation Server)/VSTS(Visual Studio Team Services)是微软推出的针对团队协作的软件开发工具,版本控制只是其中一个功能,除此之外还提供敏捷开发支持、持续集成等高级功能,TFS 和 VSTS 功能相同,VSTS 可以看作是云版本的 TFS。TFS 按照服务器来授权,VSTS 安装账户来授权,另外 VSTS 提供了免费试用版本(注:VSTS 支持 Git 作为版本控制工具)。
Git:
Git 是一个分布式的版本控制工具,相对于其它版本控制工具来说,它有一些特有的性质如:分布式 / 去中心化(每个客户端保存了完整的代码仓库),强大的分支能力,速度非常快(因为代码库在本地基本是本地操作)。因为本身的特性所以 Git 非常适合开源项目的代码管理,所以使用非常广泛。

使用 Git 来管理源代码

Git 简介

Git 是一个 基于文件快照 的分布式版本控制工具 ,对于文件快照来说它体现在当提交更新时,它会对所有文件制作一个快照,在快照中对于 没变的文件以链接的方式指向之前存储的文件

使用 Git 来管理源代码

图中每一个 Version 都是一个包含所有文件的快照,其中虚线框代表的是未改变的文件,通过链接指向前面的文件。
而分布式可以理解为去中心化,没有特定服务器,每一个节点都拥有所有的内容 ,而每一台安装了 Git 的计算机就可以看作一个节点,所以Git 几乎所有的操作都是在本地执行 的(可以在本地创建仓库、添加 / 修改 / 提交文件等等)。
Git 中对于文件有三个重要的工作区:

  • 数据仓库:保存了所有 Git 提交的状态为 Commited 的文件,相当于集中式版本管理工具中服务器管理的文件数据库,数据仓库文件位于.git 目录下
  • 工作目录:工作目录就是用于开发的区域,工作目录的内容从数据仓库中检出指定版本进行修改,修改完成后可将修改内容提交到暂存区域。
  • 暂存区域:暂存区域保存了工作区域提交的文件,“暂存”的意思就是只是对用户修改后需要提交到数据仓库的文件进行暂存,最后可一次性将暂存的内容提交到数据仓库。

它们的工作流程如下 ( 将它们看作普通的文件目录,它们的操作看成目录间文件的复制操作更容易理解 Git 的工作原理,其中 git 仓库比较特殊会保存每一次复制 (提交) 的内容,而其它两个目录相同内容会被覆盖):

使用 Git 来管理源代码

安装 Git

说到 Git 有人可能会有疑惑,为什么 Git 可以在 Visual Studio 中使用,而 GitHub 也提供了自己的客户端,但是像国内也有码云 (gitee) 这样的托管平台,那么 Git 这个工具到底是怎样的?要如何使用?
Git 它有多种表现形式,其一是 原生的命令行工具 ,另外其它工具如 VS 中的、GitHub 的客户端实际上都是 对命令的封装以简化用户操作的 GUI 工具,换句话说 Git 的工具无论怎么变,它的核心都是原生的命令行工具,同时也说明了只要有命令行工具那么就可以使用如 GitHub、gitee 等不同的基于 Git 的代码托管平台。
在 Windows 下安装 git 命令行工具(注:Windows 下的 Git 项目是一个独立于 Git 的项目,好像由微软维护):
下载地址:https://git-scm.com/download/win
安装 Git:
选择组件:

使用 Git 来管理源代码

注:如果勾选了 GitBash Here 及 Git GUI Here,那么在 window 的资源管理器中可以通过右键在当前目录打开 GitBash(Git 专用的命令执行工具,类似 cmd/powershell,同时也可以将 git 的 cmd 目录配置到环境变量中用 Windows 的命令行工具执行 git 命令)或新版本中内置的简单 GUI 程序:

使用 Git 来管理源代码

安装运行结果:

使用 Git 来管理源代码

左为 Git Bash 右为 Windows cmd 工具。
注:由于新版本 VS 会安装内置的 Git 工具,如果出现一下信息,可检查是否存在路径如“Microsoft Visual Studio 14.0\Web\External\git”的环境变量,删除即可:

  使用 Git 来管理源代码

创建一个本地仓库

本文使用基于.Net Core 的 My Blog 应用程序代码为例进行演示,My Blog 的目录结构如下:

使用 Git 来管理源代码

src 目录中包含所有代码:

使用 Git 来管理源代码

1. 在 My Blog 的根目录下打开 Git Bash,使用 git init 创建一个本地仓库:

使用 Git 来管理源代码

同时该目录下将生成一个.git 隐藏目录。
2. 为该仓库配置用户信息,在提交代码时将使用该用户信息进行提交:
git config user.name “Selim”
git config user.email “yqszt@qq.com”

使用 Git 来管理源代码

注:此处用户信息仅对当前仓库有效,如果要配置全局用户信息需添加 –global 选项:
git config –global user.name “Selim”
git config –global user.email “yqszt@qq.com”

3. 最后为该仓库添加忽略文件配置(仅管理代码,如编译结果等文件应该进行过滤):

使用 Git 来管理源代码

文件内容来源:https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
注:windows 无法直接创建.gitignore 文件,可以用编辑器另存为改变文件名,另外 gitignore 文件的格式可参考文档:https://git-scm.com/docs/gitignore。

4. 将所有文件添加到暂存区:(git add –a)

使用 Git 来管理源代码

注:LF 是 Unix 下的换行符 CRLF 是 Windows 下的换行符,默认 git 中使用 Unix 换行符,可以通过 git config –global core.autocrlf false 禁用自动转换。
5. 查看状态:(git status)

使用 Git 来管理源代码

可以看到所有必须的文件都已经被添加到了暂存区。
6. 将暂存区代码提交到仓库:(git commit -m “create a repository”)

使用 Git 来管理源代码

7. 查看日志:(git log)

使用 Git 来管理源代码

8. 使用 VS2017 打开该解决方案后,团队资源管理器中将会自动识别这个本地的 git 仓库:

使用 Git 来管理源代码

Git 对仓库的常用操作

前面已经完成了代码仓库的创建,那么 Git 有哪些常用操作呢?

文件的跟踪、修改、提交

将新的文件添加到 git 中管理涉及到的相关操作:

  • 跟踪新文件:(git add 文件名 或 git add -a 后者添加除被忽略以外的所有文件)

使用 Git 来管理源代码

  • 提交文件:(git commit -m “ 提交信息 ”)

使用 Git 来管理源代码

  • 文件修改:(当已经提交的文件再次被修改时,如果要再次提交该文件仍然需要使用 git add 命令,或者使用 git commit - a 来跳过暂存区进行提交。注:git commit - a 只能提交已经被 git 管理的修改文件)

使用 Git 来管理源代码

跳过暂存区提交:

使用 Git 来管理源代码

  • 手动删除工作区文件(即直接删除目录下文件):

  使用 Git 来管理源代码

  • 从 git 中删除文件:(git rm 1.md 或 git rm 1.md -force 强制删除)

使用 Git 来管理源代码

文件的比较

  • 比较修改内容:(git diff)

使用 Git 来管理源代码

  • 比较暂存区的修改内容:(git diff –cached 或 git diff –staged)

使用 Git 来管理源代码

注:需要保证暂存区有内容才会有结果。

  • 使用内置 vimdiff 比较器查看修改内容:(git difftool)

使用 Git 来管理源代码

windows 上可以使用 winmerge 来替换默认的比较 / 合并工具:
winmerge 下载地址:http://winmerge.org/
配置方法参考:https://blog.csdn.net/guoxinian/article/details/52297804
https://stackoverflow.com/questions/1881594/use-winmerge-inside-of-git-to-file-diff

文件状态及历史查看

  • 查看状态:(git status)

使用 Git 来管理源代码

  • 查看提交历史:(git log)

使用 Git 来管理源代码

  • 查看状态概要:(git status -s)

使用 Git 来管理源代码

状态由 2 位字符构成,第一位代表暂存区状态有(添加 A、修改 M)第二位代表工作区状态(修改 M),另外?? 代表 git 未跟踪的文件。

操作的撤销

  • 撤销工作区的修改:(git checkout — README.md)

使用 Git 来管理源代码

  • 撤销暂存区的文件:(git reset HEAD README.md)

使用 Git 来管理源代码

  • 提交补充(多次提交合并为一个后续提交信息会覆盖之前的):(git commit –amend)

使用 Git 来管理源代码

上图对文件 READ.md 进行了 2 次修改和提交,但是日志中只会看到最后一次提交的信息:

使用 Git 来管理源代码

标签

  • 打标签:(git tag -a v0.1 -m “version 0.1”)

  使用 Git 来管理源代码

  • 对提交历史打标签:(git tag -a v0.01 -m “created repository”)

使用 Git 来管理源代码

  • 推送标签到远程服务器:(git push origin v0.1 注:需要有远程仓库)

使用 Git 来管理源代码

GitHub 上的标签:

使用 Git 来管理源代码

  • 检出标签代码:(git checkout -b version0 v0.01 注:需要有远程仓库)

使用 Git 来管理源代码

注:该命令创建了一个新的分支 version0,并获取了 v0.01tag 的代码,改代码是版本库最初的版本。

别名

git 中可以设置命令别名,以简化命令:

使用 Git 来管理源代码

上图的别名设置是将 checkout 等命令简化为 co、br、ci、st。

更多命令和使用方法请参考:
https://git-scm.com/docs
https://git-scm.com/book/en/v2

将本地仓库提交到远程

本地的 git 仓库已经实现了代码版本控制功能,但是 本地的仓库无法实现团队的合作 ,而且 代码库都在本地无法发挥分布式的特性。所以可以将本地的代码仓库提交到远程托管平台如 GitHub、Gitee 等等。
在 GitHub 上创建一个新的仓库(注:需要先注册一个 GitHub 账户):

  使用 Git 来管理源代码

创建成功后 GitHub 会给出提示如何使用这个库,比如创建新库的流程、导入已有库的流程以及导入代码的流程:

  使用 Git 来管理源代码

这里我们需要第二种方法:

使用 Git 来管理源代码

注:如果第一次通过 git 将代码 push 到 github,那么会出现以下登陆提示:

使用 Git 来管理源代码

 

 

在 Windows 下仅需要登陆一次,git 就会记住登陆信息,避免后续的重复登陆,记录登陆信息的功能由 git credential manager 提供,详见:https://github.com/Microsoft/Git-Credential-Manager-for-Windows
这样就能够成功将代码提交到 GitHub 上:

使用 Git 来管理源代码

更多使用 GitHub 托管代码的内容后续介绍。

小结

本文主要介绍了常用的代码版本控制工具,版本控制工具可分为集中式的和分布式的,其中集中式的常用的有 SVN 而分布式的有 Git,随着软件开发方式的发展 Git 更加的符合现代的敏捷、远程协作等概念,所以本系列文章选择了 Git 作为代码版本控制工具。
另外本文主要是介绍了 Git 命令行工具的使用方法并使用了 GitHub 作为远程代码托管平台对代码进行了托管,Git 的 GUI 工具非常多,但所有的 GUI 工具的原理都是对 Git 命令封装,然后提供一些便捷的功能,所以理解 Git 命令是非常必要的,理解了 Git 的基础命令再去使用 GUI 工具会更加得心应手。但要注意的是本文介绍的命令并不全面,因为一个命令还有很多参数选项,所以更多内容可参考 Git 的官方文档或书籍:https://git-scm.com/docs  https://git-scm.com/book/en/v2

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5240字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7994184
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...