《Git小书》笔记:1 前言

?
?

在图灵社区买了本《Git小书》,以前也买了一本《GitHub入门与实践》,看完了,觉得挺好,可是现在几乎都忘了,怎么感觉杀鸡用牛刀的赶脚,我完全用不上那些功能啊,可能是没有因为没有经历团伙作案的项目吧,git几乎成了文件备份工具了,自然而然地几乎只用到了推送功能。而那些复杂的命令虽然练了不少,但终究因为缺少累积理解也都忘了。

Git推送代码,因为都是代码练习片段,没有形成库的形式,加上推送的时候总是纠结commit的写法,所以也渐渐不用了。

最近对C语言有了点感觉,感觉如果用git管理看书时写的代码会比较有帮助,二来因为在虚拟机上写代码所以不免出现崩溃的情况也算有个备份,三来不久工作了也会要用到。正好上次看到这本《Git小书》篇幅不大,不喜欢看视频学,所以这个合适。

下面是对本书的前言的笔记:

看的出来作者也对Git学习很纠结啊,有着各种奇怪的想法,自己也有过,不过作者钻研精神比我强多了,没有放弃,而是发现了更多。

  1. 理解实现才能学好Git吗?以前我也觉得如果明白Git的实现原理才能真正学好Git,没想到早有人有这种想法了。因为这种想法,倒是耽误了我不少学习时间,整天想着怎么实现,虽然实现并不是难上天,但是对于一个用都不会用的人,也就是无法理解需求的人,反过来去研究实现,就有点纠结了。所以当时浪费了一些时间在这上面,在网上乱搜,啥都没学到。所以,不建议这么干。
  2. 分支的作用:我觉得分支的最大作用,就是可以做实验,提供了一种不复制当前文件就能做实验的方法,虽然实现起来有些复制,但是值得实验。
  3. "为了管理提交的颗粒度,它引入了暂存区(stage)。"之前也好奇为什么弄个暂存区出来,一直没想明白,这里提到了是为了管理提交颗粒度,我目前理解就是颗粒度就是做事步骤的数量,就好比走路,总是一步一步的,如果你要跨三步的距离,那么必然要经历第二步。
  4. "为了能够分布,它的提交标示符无法采用简单数字,而是采用了一个看起来令人困惑的字符串(SHA1)。"当时也奇怪为什么搞这么奇怪的标识符,没想明白,这里说是为了能够分布,可能是为了避免重复和校验吧。

    为什么修订标识符叫SHA1,因为是Git用SHA1算法生成的。

  5. 感觉命令学起来好复杂啊:

    1. "有些命令引入的功能太多。看看git reset子命令即可了解我的意思。"

      我也是这样觉得的,很大程度上把人搞晕了,但是不要因为这个而放弃。可以把这个看做一种"设计上的缺陷",而不是看做自己的无能,然后想办法解决这个问题;

    2. "概念命名随意。比如暂存区有多个名字,包括Index,Stage,Cache。"当时我也被搞糊涂了,有的资料上也是一会冒个名字出来。所以以后学习其他技术,如果出现了了多个让你迷惑的概念,最好搞清楚是不是同一个概念,不要纠结;
    3. "参数设计随意。例如git branch -b等价于git branch后跟git checkout 。"我一直纠结是用简写还是用全写,真的没必要,想到什么用什么吧;
  6. "充分利用分布特性来减少依赖,使用分支特性随心创造而无后顾之忧。"比如不依赖于特定的虚拟机平台,因为你不保存生成文件嘛,你只保存源文件。

    利用分支特性,其实我们平时有太多的试错要做了,有了分支特性就可以避免因为怕麻烦而裹足不前,现在要做的就是熟练使用分支就可以了。

时间: 2024-10-06 22:44:03

《Git小书》笔记:1 前言的相关文章

《Git小书》笔记:6 分支

还记得在食堂排队吗,假设好多同学喜欢看到认识的同学就喜欢插队,只是他的插队不是直接插入,而站在队外面,然后来了新人看到了,又插到他后面,很快我们就看到食堂窗口那里变成了一颗树了. 好的,我们先来一个人排队: 查看分支: 我们开始插队,创建一个新分支roma: 在新分支上修改文件,然后提交一下,就相当于又插队了一个人: 好的,现在roma分支上我们已经完成了插队,而master分支还只有一个人"init",现在查看一下roma分支上有几个人了: 下面是简化SAH1输出的命令格式,一般情况

《Git小书》笔记:4 暂存区

这节讲了暂存区,我觉得讲的很好啊, 之前一起奇怪暂存区怎么用来的. 还用之前的比喻吧. 暂存区就好比侦探的那个相机嘛,暂存区的本质其实不是用来暂存的,如果说用来暂存的,至少会引起误解,因为我们会说为什么要暂存呢?直接存不就好了,为啥多此一举.的确,如果某种情况你要直接存当然不需要暂存区了. 但是暂存的是什么?暂存的是文件吗?正如那个侦探拍摄到的嫌疑人,他拍摄的是整个人吗?不是,他拍摄的一个行为.同理,暂存区暂存的是什么?暂存的是修改而非文件,我们要用改动的眼光看待文件,一个文件从诞生伊始,空无一

《Git小书》笔记:3 介绍

概念类比说明: 创建嫌疑人名单--git init pot--创建版本仓库 添加嫌疑人--echo line1 > file1--创建文件 第一次拍摄嫌疑人--git add file1--添加跟踪 侦探的相机--暂存区 老板--仓库区 嫌疑人--工作区 提交拍到的嫌疑人给老板--git commit -m "init"--提交修改 嫌疑人第一次作案--echo line2 >> file1--修改文件file1 侦探拍摄嫌疑人作案过程--git add file1-

《Git小书》笔记:2 安装

git --version 登记一下: git config --global user.name "Your Name" git config --global user.email "[email protected]" 做实验的话,用 Line1 Line2 Line3 作为测试文件内容,大写L是为了便于区分吧,也没必要怕写一个大写L,因为重要的大写L这个形式 echo Line1 > file echo go > file 紧跟之后创建内容,不对

易学设计模式看书笔记(7) - 代理模式

代理模式 1.系统日志记录的例子:给系统中的业务逻辑加上日志 (1):最简单直接的做法 public class Test { private Logger logger = Loger.getLogger(this.getClass().getName()); public void doLgic(String name){ logger.log(name + "开始业务逻辑处理..."); //业务逻辑处理相关程序 System.out.println("业务逻辑处理相关

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

GIT & GitHub 学习笔记

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网 速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑 上.既然每个人的电脑都有一个完整的版本库

cocos2d-x 3游戏实例学习笔记 跑酷(前言)

游戏开发环境:coco2d-x 3.0正式版 . C++ .Win7.VS2012 自己的现状: 大二学生一枚,刚刚接触cocos2dx 不久,是看着笨木头的<游戏开发之旅>入门的,并且也只是学习了基本的知识点用法,木头的代码是基于2.X写的,但是我一开始就是使用3.0的引擎,所以也是一边学习一边把之前的代码向3.0转变.也看了许多网上教程,star特530等许多人的博客....而且C++那些也只是学习了皮毛.看到网上许多游戏实例教程,于是自己决定用实例来学习cocos. 学习背景: 网上有许

git 小tips

git 小tips 总结一下最近遇到的一些git问题 1. 将已有代码推送到github,报non-fast-forward的错. 正确的步骤是: cd code git init git remote add origin [email protected]:- git fetch git merge git push origin master 第4,5布可以合并成git pull ,如果不做这步的话会报non-fast-forward 的错. 2 忽略一些文件 某些文件不需要跟踪的可以加入