.NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练

写在前面

上篇文章.NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入我带着大家通过分析了一遍ASP.NET Core的源码了解了它的启动过程,然后又带着大家熟悉了一遍配置文件的加载方式,最后引出了依赖注入以及控制反转的概念!如果大家把前面几张都理解了,那么你也就入了ASP.NET Core的大门了。但是我们还需要一个版本控制工具来提高我们的编码效率。因此这篇文章我将带着大家了解下Git这个版本控制工具以及为什么选择它。
下面我们将通过故事的形式从Git的历史谈起,并讲述Git的强大之处。然后通过实战演练教你如何在Github以及码云上托管我们的代码并进行代码的版本控制。
这里还想说一句,这篇文章本来昨天就能发出来的,奈何出现了一点状况,所以今天才来写,为了不浪费大家的时间我会在文章的最后再来讲述原因,这里给大家说声抱歉了。
本篇文章已经收入.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划 有兴趣的朋友可以加入.NET Core项目实战交流群637326624 进行交流。

作者:依乐祝
原本地址:https://www.cnblogs.com/yilezhu/p/10014027.html

Git快速入门

本部分我会先通过故事的形式讲解下Git的诞生,及其强大的分布式版本控制的能力。然后再给大家介绍一下我们在实际的项目开发过程中经常用到的git命令,让大家能够快速入门Git。当然我不会给你介绍八百年也不会用一次的命令,感觉很高级的命令,毕竟实用才是硬道理。还有不要指望通过这篇文章你就能成为Git专家,这篇文章只会让你在实际项目中能够迎刃有余的使用Git

关于Git你不得不知的故事

(没错,这部分参考自廖雪峰大神的文章,因为有必要让大伙了解这些)很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。如今GitHub更是被微软收购,ASP.NET Core的的全套源码以及.NET Core的源码也都是在GitHub上开源。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

Git的优势

看了Git的的故事是不是心潮澎湃呢?但是你又在想了Git到底有什么优势能够让那么多的大名鼎鼎的项目都是用Git进行代码管理呢?别急,这部分就为你解答。

  1. 适合分布式开发,强调个体,可以离线工作。 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

  2. 安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。因此公共服务器压力和数据量都不会太大。

  3. 速度快、灵活。 强大的分支管理能力,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件,想想svn是不是头疼啊。

  4. 暂存区概念,具体的点击这里 查看

这个优缺点Git的优势想的头疼,说太多就感觉枯燥了,只有你真正使用了才能体会到!话不多说,让我们快速入门Git吧。

Git安装

  1. 你可以点击这里 到官网进行下载,可能官网下载比较忙,所以你可以点击这里 到腾讯软件中心进行下载.

  2. Windows系统的安装很简单,软件下载好之后一步一步的安装就行了,至于Linux和MacOS你可以点这里 查看官网的安装教程.

  3. 安装完成之后,需要进行相关的配置,在命令行输入以下命令进行全局的配置:

    $ git config --global user.name "yilezhu"$ git config --global user.email "1015657114@qq.com"

    注:因为Git是分布式版本控制系统,所以,每台机器都必须自报家门:你的名字和Email地址(上面双引号里面的内容)。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

    注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

  4. 点击这里 ,下载并安装TortoiseGit图形化工具,安装后可以通过鼠标进行Git命令的操作。如下所示:

    640?wx_fmt=png

Git结合Github进行实战演练

Git本地仓库与GitHub远程仓库关联并获取最新的代码

这部分我们就进行Git的实战吧,正好前面几篇文章已经为大家演示了几个例子,那么我们就把前面几个例子为例,使用Git把他们托管到GitHub上面吧。

  1. 假设你已经有了GitHub账号,没有的话自己去注册。点击这里 登录GitHub,

  2. 自报家门,配置你是谁(如果你在上面的Git安装)里面已经按照下面进行了配置,这里就无需再配置。首先鼠标右键按照下图所示打开Git Bash 然后按照下图所示进行配置:

    640?wx_fmt=png

    640?wx_fmt=png

  3. 生成ssh key 在git bash上面输入ssh-keygen -t rsa -C "你的邮箱" 它会有三次等待你输入,直接回车即可。下面的图是因为我已经生成了,询问我是否覆盖,我输入y选择了是重新生成了。

    640?wx_fmt=png

  4. 将生成的ssh key拷贝到剪贴板,执行 clip < ~/.ssh/id_rsa.pub (或者到上图提示的路径里去打开文件并复制):

    640?wx_fmt=png

  5. 打开github并按照如下图所示打开Settings

    640?wx_fmt=png

  6. 点击左边的SSH and GPG keys 然后在右边点击 New SSH key

    640?wx_fmt=png

    将ssh key粘贴到右边的Key里面。Title随便命名即可。这时候GitHub会给你发送一封邮件

    640?wx_fmt=png

  7. 执行 ssh -T git@github.com测试结果如下说明GitHub配置成功。

    640?wx_fmt=png

  8. GitHub上创建一个新的项目,项目名称为Czar.Cms,这个仓库将作为我们后面CMS系统的GitHub上的远程仓库

    640?wx_fmt=png

    这里我们有选择以Readme初始化项目。所以生成后的结构如下所示:

    640?wx_fmt=png

  • 首先是在右上角“+”进入创建界面
    640?wx_fmt=png

  • 接着按照如下所示输入项目名称,然后点击Create repository 就创建好了。

下面我们就在本地初始化一个仓库,然后与GitHub的远程仓库关联起来吧。

我们在我们的工作文件夹中,打开Git Bash,然后输入如下命令git init来初始化一个本地仓库。

640?wx_fmt=png

然后输入git remote 查看下远程仓库,正常的话应该有0个,现在就让我们添加下我们刚才建立的GitHub上的远程仓库吧.然后再看下远程仓库列表,发现已经有一个了,名字为github
640?wx_fmt=png

git remote add github github远程仓库的地址

然后输入git pull github master 就会从刚才我们配置的远程仓库拉取master分支的代码。如下所示:

640?wx_fmt=jpeg

获取之后然后看下我么的项目文件夹,如下所示:已经从GitHub上获取到了最新的代码:

640?wx_fmt=png

把上篇文章的源码上传到GitHub的Sample02分支上

  1. 在我们的本地仓库文件夹打开git bash 然后输入git checkout -b Sample02 命令创建并切换到Sample02 这个分支,然后把我们上篇文章的代码拷贝到这个文件夹,如下图所示

    640?wx_fmt=png

    640?wx_fmt=png

  2. 输入git status 查看当前仓库有哪些文件做了修改,如下图所示,红色部分表示已经发生了修改

    640?wx_fmt=jpeg

  3. 输入git add Sample02/ 把Sample02文件夹下面所有的已经发生了修改的文件都放进'暂存区' 然后输入git status 查看一下当前的状态,都变成了绿色,说明Sample02文件夹下面的修改内容都加入了暂存区

    640?wx_fmt=jpeg

  4. 接着输入git commit -m '注释内容'命令把我们暂存区的代码提交到我们的本地仓库

    640?wx_fmt=jpeg

  5. 然后输入git status 查看一下,发现所有的修改都已经提交成功了。

    640?wx_fmt=png

  6. 输入如下命令git push github Sample02把我们的本地代码提交到远程仓库的'Sample02分支'吧

    640?wx_fmt=jpeg

    注意,这里时提交到Github上的Sample02分支上,而我们的GitHub上没有这个分支,所以会自动帮我们创建这个分支。

  7. 这里第三篇的事例代码就上传到Github上了。大家可以去查看下,顺便给个Star哦,因为后面的CMS的代码我也会放到这个仓库,只不过是不同的分支而已。

  8. 下面就让我们切换回master分支,并结束这个部分吧。输入git checkout master

GitHub源码地址

这个时候可以上GitHub的地址了,后面所有的事例代码都会放到这个分支上,所以大伙可以先去看一下上一篇的事例代码
https://github.com/yilezhu/Czar.Cms

迟更的原因

非常抱歉,本来这篇文章应该昨天写的,奈何昨天中午我老婆给我打电话带着哭腔的说她的爷爷奶奶生病了,问我这个周末加不加班,如果不加班陪她回家看下。我说,你先别着急,我马上请假陪你回去。然后中午的时候就请假,然后开了四个多小时的车带着我老婆以及我女儿(大名:依乐,小名:可乐)回我老婆的老家了。然后第二天,也就是今天早上就带着我的爷爷奶奶去县城里面的人民医院做检查,还好检查结果没什么大的问题。这是万幸了!最后回到家都四五点钟了。然后才开始写“昨天的文章”,这一写就写到了现在。再次给大家说声抱歉。以后我尽量两天一更,最少也得一星期三更。再次感谢大家的支持。

总结

本文从Git的诞生开始说起,然后给大家讲了Git的优势。接着我们通过一个GitHub的实战,手把手的在GitHub上新建了一个远程仓库并跟我本地的代码进行管理,并且把我的上篇文章的事例代码给上传到了GitHub上。希望对大家使用Git有所帮助。下面再次罗列常用的Git命令

  • git init :初始化本地仓库

  • git remote :查看关联的远程仓库连接

  • git remote add github github远程仓库地址 :创建一个远程仓库连接

  • git pull github master :从github命名的远程仓库拉取master分支内容

  • git checkout -b Sample02 :创建并切换到Sample02这个分支上

  • git branch :查看当前的所有分支

  • git add Sample02/ :把Sample02文件夹下面的所有修改文件添加到暂存区

  • git commit -m "注释" :把暂存区所有修改提交到本地仓库,并给本体提交写一个注释方便查看日志

  • git log --graph :查看修改日志

  • git push github Sample02 :把当前仓库中得当前分支的内容推送到github这个远程仓库的Sample02分支上,如果分支不存在则自动创建

  • git merge --no-ff -m "注释" Sample02 :在当前分支合并Sample02这个分支的修改到当前分支,并给这次合并添加注释

好了,今天就给大家介绍到这,主要是给大家介绍平时实际项目中常用的命令,对于不常用的命令没有介绍,因为毕竟是实战,所以以实用为主。下篇文章我会给大家介绍一下Dapper的使用(玩数据库了)来为后面我们的CMS系列课程打下基础,毕竟要照顾一些新手朋友。如果大家有什么问题的话可以加.NET Core项目实战交流群637326624跟大家交流。

相关文章:

  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

  • .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

  • .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

原文地址:https://www.cnblogs.com/yilezhu/p/10014027.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高精度:麦森数*(洛谷P1045)

P1045 [NOIP2003 普及组] 麦森数 解析 看似只是正常的一个高精 然而 暗藏杀机 一开始随手那么一写 。。。 (即使用了快速幂)时间复杂度过于感人 后来我们发现&#xff1a; 第一问位数的计算不必真的算出来&#xff0c;只需把2的p次幂转化为10的k次幂即可&#xff08;具体请…

彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践

“描述一个事物&#xff0c;唯有一个名词定义它的概念&#xff0c;唯有一个动词揭露它的行为&#xff0c;唯有一个形容词表现它的特征。要做的&#xff0c;就是用心去寻找那个名词、那个动词、那个形容词……”—— 福楼拜 (Gustave Flaubert)我想讲个故事。很久很久以前&#…

贪心: Array Splitting(数列分段)(洛谷CF1175D)

解析 这题可以转化一下&#xff1a; &#xff08;《神笔马良》。。。。&#xff09; 计算这些长方形对应下标的总加和 我们可以一层一层往上垒,假设第i层起始点为xi&#xff0c;总和为sumi&#xff0c;再设从1到i的前缀和为si 显然第一层x11&#xff0c;sum1sn 对于第二层x2&…

Docker最全教程——从理论到实战(一)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右&#xff0c;只是为了大家更好地了解、理解和消化这个技术&#xff0c;能够搭上这波车。你可以关注我们的公众号“magiccode…

二分:路标设置(洛谷)

传送门. 解析 只需二分枚举空旷指数即可 对于单次判断的check函数&#xff0c;可以相当于n个路标把路面分成n1个间隔&#xff0c;而对于每个间隔[l,r]和空旷指数x&#xff08;边界已有路标&#xff09;&#xff0c;所需路标应为&#xff1a; (r-l-1)/x&#xff08;比如[2,5…

二分:[BJWC2008]秦腾与教学评估

洛谷传送门 解析 因为至多有一个单数 假设其位置为k&#xff0c;1-i的累加和为s[i] 则s[1]-s[k-1]全是偶数 s[k]-s[max]全是奇数 答案呈单调性&#xff0c;可以用二分算法 check函数&#xff08;计算前缀和&#xff09;也很容易用O&#xff08;n&#xff09;写出&#xff1a…

微软Azure予力Green Dot客服成就不凡

点击蓝字关注我碧点公司&#xff08;Green Dot&#xff09;是仔细聆听消费者心声&#xff0c;以消费者为导向的金融科技创新公司&#xff0c;致力于为大众带来高效、便捷与体验舒适的个人银行业务。Green Dot创造了预付借记卡产业&#xff0c;也是美国最大的可增值预付借记卡和…

倍增:st表(模板)(洛谷P3865)

[传送门](https://www.luogu.com.cn/problem/P38 解析 板子题最棒了 用mx[i][j]存储以i为起点&#xff0c;长度为2^j次方的区间内的max 分成前后两段&#xff0c;则可以得到递推式&#xff1a; mx[i][k]max(mx[i][k-1],mx[imi[k-1]][k-1]);而关于初始化&#xff0c;显然&…

首届大湾区 DevOps/微服务秋季分享会圆满落幕!

在科技迅速发展的时代&#xff0c;传统行业积极开展数字化转型以在激烈竞争中脱颖而出&#xff0c;新兴行业不停歇地验证业务模式以找准市场定位&#xff1b;软件与行业变得密不可分&#xff0c;各行各业如何快速响应软件需求&#xff0c;已经成为直接关系到企业核心利益的关键…

.NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

写在前面上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制&#xff0c;当然介绍的都是比较常用的功能。今天我再带着大家一起熟悉下一个ORM框架Dapper&#xff0c;实例代码的演示编写完成后我会通过Git命令上传到GitHub上&#xff0c;正好大家可以再次熟悉下G…

倍增:喷泉 深度解析(洛谷P7167)

洛谷传送门 解析 什么破题 数据范围来看很明显最多到nlogn 首先&#xff0c;对于样例进行一下分析&#xff1a; 我们可以把它转化为一棵树&#xff1a; 每一个根都有对应的权&#xff0c;给你一个结点和加权和&#xff0c;问能爬到哪里 既然是树&#xff0c;自然要找爸爸…

P5163-WD与地图【tarjan,整体二分,线段树合并】

正题 题目链接:https://www.luogu.com.cn/problem/P5163 题目大意 给出nnn个点mmm条有向边&#xff0c;点有权值&#xff0c;要求支持操作 删除一条边修改一个点的权值求一个点所在强连通分量中前kkk大权值和 1≤n≤105,1≤m,q≤21051\leq n\leq 10^5,1\leq m,q\leq 2\times…

分布式系统(微服务架构)的一致性和幂等性问题相关概念解析

前言什么是分布式系统?关于这点其实并没有明确且统一的定义。在我看来,只要一个系统满足以下几点就可以称之为分布式系统系统由物理上不同分布的多个机器节点组成系统的多个节点通过网络进行通信,协调彼此之间的工作。系统作为整体统一对外提供服务,其分布式细节对客户端透明。…

hash:奶牛看地图(洛谷P3405 [USACO16DEC]Cities and States S)

洛谷传送门 解析 其实就是每组2个长度为2的字符串统计交叉相等的个数 每个序列可以用一个26进制的数来表示&#xff0c;总要加个标签&#xff0c;勉强算hash。。&#xff08;想叫《水题》 &#xff09; 最大值为26*26&#xff08;ZZ&#xff09; 所以可以开一个二维数组来进…

bfs:01迷宫(洛谷P1141)

洛谷传送门 解析 乍一看&#xff1a;bfs板子题 冰法师最棒了 然鹅 看了一眼数据范围 心中已有画面 《面 堂 发 黑》 怎么办嘞&#xff1f; 我们想到&#xff1a; 因为该题来与去的可逆性 我们搜一次后&#xff0c;这些点以后都不会再用到 而且每次覆盖到的所有点答案都是…

有关C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明

早在本月12日&#xff0c;微软官方的.NET Blog发布了一篇名为《Building C# 8.0》的文章&#xff0c;介绍了很多C# 8.0的新特性。不过本文主要讨论的并不是C# 8.0的新特性&#xff0c;而是存在于这篇文章中的一段文字&#xff1a;Most of the C# 8.0 language features will ru…

2021牛客暑期多校训练营1 J-Journey among Railway Stations(线段树+思维转化)

J-Journey among Railway Stations 注意区间合并时是否可行信息的合并。 假设线段树当前左节点lll维护的区间是[L,mid][L,\text{mid}][L,mid]&#xff0c;右节点维护的区间为[mid1,R][\text{mid1},R][mid1,R] 如果它们分别可行&#xff0c;意味着可以从L→midL\to \text{mid}…

领域驱动设计,让程序员心中有码

“ 领域驱动设计的背后&#xff0c;需要开发者不能只专注于眼前功能的实现&#xff0c;而应该能够从全局去了解业务&#xff0c;并充分的将业务吃透&#xff0c;以可传承的知识的形式融入到开发过程中&#xff0c;只有这样才能促进产品更好的开发。”01—传统项目管理模式&…

Docker最全教程——从理论到实战(二)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右&#xff0c;只是为了大家更好地了解、理解和消化这个技术&#xff0c;能够搭上这波车。你可以关注我们的公众号“magiccode…

图论模板详解:存图

图论千万条&#xff0c;存图第一条 1.邻接矩阵 用一个矩阵x[i][j]表示i到j的路径 优点&#xff1a;代码方便&#xff0c;易于去重 缺点&#xff1a;空间复杂度爆炸 优化&#xff1a;二维vector&#xff08;但是会变慢&#xff09; 2.链式前向星 &#xff08;抄资料毫不掩饰&a…