从 git bash 命令行中窥探人生(二)

简介: 众所周知,现实世界和计算机世界是不同的,但是计算机作为人类对现实世界的抽象模拟,在一定程度上,具备了现实世界的基本特征,本文将以哲学角度对比分析现实世界和计算机世界,试图以浅显易懂的方式感受现实世界和计算机世界的联系。

三更灯火五更鸡: 编辑文件

vim [OPTION] [FILE] : Vi IMproved 的缩写,vi = VIsual = Very Inconvenient 是命令行编辑工具,vimvi 的增强版,编辑文件.

先设定整体目标,做好全局性计划,然后再是根据目标确定详细具体的工作安排。

# 在命令行编辑器中编辑 goal.txt 文件,如果没有会自动创建.
$ vim goal.txt

进入编辑器后的基本命令

  • i : insert 的缩写,翻译为”插入”,即切换到编辑模式.
  • esc : escape 的缩写,翻译为”逃跑”,即切换到命令模式.
  • :wwrite 的缩写,翻译为”保存”,即保存文件内容.
  • :q : quit 的缩写,翻译为”退出”,即退出vim 编辑器.
  • :wq : write and quit 的缩写,翻译为”保存并退出”,即保存并退出 vim 编辑器.
  • :q! : quit force 的缩写,翻译为”强制退出”,即不提示未保存强制退出.
  • gg : 定位到文件开头.
  • G : 定位到文件结尾.
  • yy : 复制整行.
  • dd : 剪切整行.
  • p : 粘贴.
  • u : 撤销.
  • ctrl + f : 下翻整页.
  • ctrl + b : 上翻整页.
  • ctrl + d : 下翻半页.
  • ctrl + u : 上翻半页.
  • /<string> : 查找
    字符串

编辑后的目标,学习 markdown ,学习 git ,学习gitbook ,分享 java 知识等等,目标远大,挽起袖子加油干吧!

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ cat goal.txt
## learning markdown
## learning git
## learning gitbook
## sharing java8

挽起袖子加油干: 查看开头

head [OPTION] [FILE] : head 翻译为”头”,即打印文件前十行内容.

我们立下的目标暂时只有四行,为了掩饰效果,临时录入更多无意义的计划,这部分并不属于我们的目标。

echo "万丈高楼平地起: 创建目录" >> goal.txt
echo "飘洋过海来看你: 切换目录" >> goal.txt
echo "惊鸿一瞥初相见: 打印目录" >> goal.txt
echo "回头四顾心茫然: 列出文件" >> goal.txt
echo "保温杯中泡枸杞: 创建文件" >> goal.txt
echo "枸杞茶中加枸杞: 覆盖输入" >> goal.txt
echo "枸杞茶中倒热水: 追加输入" >> goal.txt
echo "枸杞茶要慢慢品: 查看文件" >> goal.txt

现在 goal.txt 文件不止十行,而是十六行数据,足够我们演示效果。

在泡枸杞茶最后一步中,我们需要品茶以此确定枸杞和热水搭配是否合理,使用 cat 命令帮我们查看文件全部内容,如果我们不需要查看全部,只需要查看前十条的话,就需要另外的命令。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ cat goal.txt
## learning markdown
## learning git
## learning gitbook
## sharing java8
万丈高楼平地起: 创建目录
飘洋过海来看你: 切换目录
惊鸿一瞥初相见: 打印目录
回头四顾心茫然: 列出文件
保温杯中泡枸杞: 创建文件
枸杞茶中加枸杞: 覆盖输入
枸杞茶中倒热水: 追加输入
枸杞茶要慢慢品: 查看文件

查看目标清单中的前十条记录,而不显示全部记录。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ head goal.txt
## learning markdown
## learning git
## learning gitbook
## sharing java8
万丈高楼平地起: 创建目录
飘洋过海来看你: 切换目录

不思进取后十名: 查看结尾

tail [OPTION] [FILE] : tail 翻译为”尾”,即打印文件后十行内容.

如果查看文件是目标文件 goal.txt 还好,目标再小也不应被歧视,如果是成绩文件或者绩效文件,难免会被比较,打上”不思进取”的标签。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ tail goal.txt
## sharing java8
万丈高楼平地起: 创建目录
飘洋过海来看你: 切换目录
惊鸿一瞥初相见: 打印目录
回头四顾心茫然: 列出文件
保温杯中泡枸杞: 创建文件
枸杞茶中加枸杞: 覆盖输入
枸杞茶中倒热水: 追加输入
枸杞茶要慢慢品: 查看文件

优雅的写作体验: markdown

markdown 是一种轻量型的文本标记语言,是无文本 txt 的增强版,是超文本 html 的精简版,是二进制 word 的替代版,带给你全新的写作体验.

刚刚立下的目标文件的第一条就是学习 markdown ,那什么是 mardown 以及我们为什么要学习 markdown 呢?

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
# 前一条记录: -n 1,前五条记录: -n 5
$ head -n 1 goal.txt
## learning markdown

如果你的文章需要手动同步发表到各大网络平台,用书写 word 那种体验虽然直观,但是缺点是需要记住各平台布局按钮摆放位置,想要达到一致的输出效果,每个平台都需要手动调整以确保最终效果一致性。

如果使用 markdown 体验来书写文字则完全不会有这种问题,提前定义好的文件格式并不依赖平台,你可以一处编写,随心所欲到处复制粘贴!

既然 markdown 这么神奇,这种优雅的写作方式到底是什么呢?学起来真的一点都不费事!

markdown 是一种标记语言,常用于书写文章,小巧轻量,不必记住令人眼花缭乱的按钮摆放位置,也不像记事本那种毫无格式,只需记住有限几个特殊字符就能输出漂亮美观的文件效果!

比如当前文章的书写格式就是 markdown 进行编写,整体效果还不错,这样看起来 markdown 是不是很强大呢!

和其他文本文档一样, markdown 文件也有自己的后缀名 .md,比如该文章的文件名 git-bash-command.md.

现在你是不是迫不及待想要学习 markdown 了呢?

别急,学习需要规划,我们再专门新建目录用于存放 markdown 学习笔记。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
# 创建目录: 参考"万丈高楼平地起"章节
$ mkdir markdown
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
# 列出文件: 参考"回头四顾心茫然"章节
$ ls
cup.txt goal.txt markdown/
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
# 切换目录: 参考"飘洋过海来看你"章节
$ cd markdown
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown
# 打印目录: 参考"惊鸿一瞥初相见"章节
$ pwd
/g/workpace/git-bash-demo/markdown

现在让我们先学习下 markdown 中标题和列表如何书写,想要了解更多请参考我专门介绍 makdown 的系列文章。

  • 标题

语法格式: # + 空格 + 文本 ,# 表示一级标题,## 表示二级标题,### 表示三级标题,以此类推,最多支持六级标题.

示例:

# 标题1
## 标题2
  • 有序列表

语法格式:数字 + . + 空格 + 文本

示例:

1. 有序列表1 
2. 有序列表2 
3. 有序列表3
  • 无序列表

语法格式:’- 或 * 或 +‘ + 空格 + 文本

示例:

- 无序列表1 
* 无序列表2 
+ 无序列表3

哇塞,原来 markdown 语言竟然如何简洁,妈妈再也不用担心我记不住复杂的布局按钮了!

笔记时间到,赶紧将上述知识点整理到 markdown 目录下,创建 markdown.md 文件用于记录刚才的学习笔记。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown
# 编辑文件: 参考"三更灯火五更鸡"章节 
$ vim markdown.md
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown
# 查看文件: 参考"枸杞茶要慢慢品"章节 
$ cat markdown.md
先学习下 `markdown` 中标题和列表如何书写,想要了解更多请参考我专门介绍 `makdown` 的[系列文章](https://snowdreams1006.github.io/markdown/).
...

恪尽职责的网盘: git

经过上述内容引导发现 markdown 语法确实在某些场景下很好用,于是乎下定决心开始踏上学习 markdown 之旅。

工欲善其事必先利其器,本着小白初体验心态,还是先安装一个可视化的编辑器吧!

实际上,markdown 很常用,主流编辑器基本都有相应插件,比如 idea,vs codesublime等.

typora 编辑器,支持多平台,,windows ,maclinux,别具一格的首页。

13.jpg


安装没有特殊的注意事项,正常安装就可以了,安装完毕后可以选择打开已有 markdown 文件。

实时渲染,所见即所得,左侧是文件列表,右侧是内容编辑器,喜欢的话赶紧入手吧!

14.jpg

装备好编辑器后,我们接着继续学习 markdown 的基本知识,介绍下如何显示图片以及超链接。

  • 链接

语法格式:[显示文本] + (链接地址)

示例:

1. [https://snowdreams1006.github.io](https://snowdreams1006.github.io/)

语法格式:! + [图片标题] + (图片地址)

示例:

![雪之梦技术驿站的头像](https://upload.jianshu.io/users/upload_avatars/16648241/57aebe62-b5b5-491a-a9fd-f994d5be7dda.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240)

点滴积累也是进步,记得要把这次的学习笔记保存到我们之前的 markdown.md 文件中哟!

15.png

正所谓”温故而知新可以为师矣”,笔记不仅要写还要经常看,于是在刚刚的笔记上做些修改添加自己的理解。

16.png

果然是一次愉快的学习体验,真的是活学活用啊,孺子可教也!

隔壁小伙伴听说你最近在学 markdown ,想借你老师留下的笔记看看,于是你好心找一下课堂笔记打算发给他.

等一等,对方需要的是课件资料并不包含你自己理解那部分笔记哟,怎么办?

那就以当前笔记为基础再复制一份笔记,然后删掉自己理解的那部分笔记呗!

  • 请给我拷贝课件: 复制文件

cp [OPTION] [-T] SOURCE DEST : copy 的缩写,即复制文件.


17.jpg


既然对方明确要求课件而不是自己的笔记,那把自己的那部分内容手动清除掉呗!

18.png

整理好课件后发给了小伙伴,虽然辛苦点但是帮助别人快乐自己,谁让我们一直接受的教育就是助人为乐呢?

经过一阵子的学习了解到更多 markdown 知识,于是课件加上自己的笔记越来越多,小白已经渐渐远去,大神正在向我们招手…

19.png

  • 省心尽责的网盘: 版本控制系统

上次帮助了隔壁的小伙伴,一传十十传百,又有其他小伙伴求课件了,听说认真好学的你还做了笔记,也有人要笔记,事情有点复杂啊。

有的人需要课件,有的人需要笔记,已领取资料的人还想要后续更新能及时通知到他们?

如果仍然采用复制粘贴修改的方式,可想而知是多么麻烦,源文件复制一份给张三,再复制一份给李四并且还要去掉自己笔记部分,给王二的文件比较老还有再弄一份新的给他…

如果不考虑文件的差异性需求,可以将文件上传到网盘中再分享给需要的小伙伴,明显这种网盘并不能解决目前问题。

因为网盘的文件是源文件的最新备份,不能满足文件差异性的需求也无法管理文件历史状态。

万一哪次整理课件时需要删除笔记部分时,一不小心忘记备份源文件,课堂笔记就这么丢失了很难再找回来了!

所以,如果有这么一种工具能够事无巨细帮我们记录文件状态,还能有网盘管理并分享的功能就能解决我们的痛点了,这样恪尽职责的网盘谁能不喜欢?

事实上,这种工具确实存在而且不仅一种!

专业术语叫做版本控制系统,其中分为集中式版本控制系统和分布式控制系统,区别在于鸡蛋是否在一个篮子中。

如果鸡蛋都在一个篮子中,母鸡无论在何处下蛋,鸡蛋最终都会被收集都一个篮子中,想要吃鸡蛋时再去这个篮子里拿,这就叫做集中式版本控制系统

如果鸡蛋不在同一个篮子中,母鸡下的鸡蛋被收集到附近的篮子中,需要吃鸡蛋时再从最近的篮子中去拿,这种情况就叫做分布式版本控制系统

集中式的特点在于集中管理统一调度,而分布式的特点在于分开管理灵活高效,实际情况中选择哪一个需要具体情况具体分析。

当然,我们现在讲解的只是其中之一,那就是分布式版本控制系统

  • 千呼万唤始出来: git

说到分布式版本控制系统,不得不提的就是 git — 最先进最流行的分布式版本控制系统。

git 是分布式版本控制系统家族的璀璨明星,免费开源,支持 windows ,mac 以及 linux 等平台。

下面以 windows 电脑为例,介绍下 git 的安装和使用。

20.jpg

官网下载地址: https://git-scm.com/download/win

正常的话,按照默认选择安装即可,请确保 Git Bash Here 前面的复选框已勾选,否则无法提供命令行终端。

21.png


接下来一切按照默认选项安装,安装模拟终端类型时请选择第一种 Mintty 以保证环境一致性。

22.png

安装成功后桌面或者右键会出现 Git Bash 图标或选项,打开终端,输入 git --version如果能正常输出版本信息,那就说明安装成功了!

23.png

现在我们又不经意间学习了 git ,这不刚好是我们的第二个目标?

纳尼,你说目标是啥?竟然忘记了最初的目标。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown
$ ls
courseware.md markdown.md
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown
$ cd ../
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ ls
cup.txt goal.txt markdown/
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ head goal.txt
## learning markdown
## learning git
## learning gitbook
## sharing java8
万丈高楼平地起: 创建目录
飘洋过海来看你: 切换目录

关于学习 markdown 的目标已经完成,学以致用不如动手改造下目标文件 goal.txt 重命名 goal.md

  • 改头换面化个妆: 移动文件

mv [OPTION] [-T] SOURCE DEST : move file 的缩写,即移动文件.

正常来说换工作一般会工作地点,当然升职这种换工作但工作地点可能并没有改变,反映到计算机世界中,移动文件本是更改工作目录,如果工作目录没有改变,只是修改个后缀名也未尝不可。

$ ls
cup.txt goal.txt markdown/
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ mv goal.txt goal.md
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ ls
cup.txt goal.md markdown/
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ cat goal.md
## learning markdown
## learning git
## learning gitbook
## sharing java8
万丈高楼平地起: 创建目录
飘洋过海来看你: 切换目录
惊鸿一瞥初相见: 打印目录
回头四顾心茫然: 列出文件
保温杯中泡枸杞: 创建文件
枸杞茶中加枸杞: 覆盖输入
枸杞茶中倒热水: 追加输入
枸杞茶要慢慢品: 查看文件
  • 版本控制我来了: 初始化

git init : 即初始化本地项目.

如何将文件放到网盘管理,正如如何将鸡蛋放到篮子中,首先要有篮子,这里我们将 git-bash-demo 父目录充当我们的篮子。

正式使用 git 打造本地网盘前,我们还需要设置下用户名和邮箱,这一步相当于自报家门,这样 git 才知道现在是谁在用。

还记得我是谁吗? whoami 就是你在计算机中的用户名。这里的 git 用户名可以使自定义的用户名.

$ git config --global user.name "your username"
$ git config --global user.email "example@example.com"

现在运行 git init 命令,开始打造本地网盘,开启版本控制之旅!

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ pwd
/g/workpace/git-bash-demo
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo
$ git init
Initialized empty Git repository in G:/workpace/git-bash-demo/.git/

好记性不如烂笔头,像我们学习 markdown 那样,我们也创建专门的目录用于存放 git 笔记。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master)
$ ls
cup.txt goal.md markdown/
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master)
$ mkdir git
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master)
$ ls
cup.txt git/ goal.md markdown/
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master)
$ cd git
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master)
$ ls
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master)
$ touch git.md
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master)
$ ls
git.md
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master)
$ echo "first step : git init" > git.md
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master)
$ cat git.md
first step : git init
  • 知己知彼看状态: 查看状态

git status : 即查看文件状态

正所谓”知己知彼方能百战不殆”,随时了解文件状态才能做到心中有数。从而更好地进行版本管理、

所谓”版本”,可以理解为现实世界中的不同时空那一刻的”状态”,文件的版本则是记录了文件的历史状态。

git status 命令告诉我们文件状态以及能够智能猜预测我们下一步操作,好比身边的小秘书一样。

snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master)
$ git status
# 在 `master` 分支上,暂时不用理解分支概念,默认处于该分支
On branch master
# 目前还没有提交,`commit` 翻译"提交",即"版本",表示文件的不同历史时刻下的当时的状态
No commits yet
# 未被追踪的文件: 好比文件上传到网盘一样,`git init` 创建本地网盘,但还没添加文件到网盘中.
Untracked files:
# (使用 `git add <file>` 来包含将要被添加的文件: 智能预测提示我们下一步应该添加下述文件)
(use "git add <file>..." to include in what will be committed)
../.swp
../cup.txt
./
../goal.md
../markdown/
# 没有已添加文件需要提交,但是目前有未被追踪文件(使用 `git add` 去追踪文件变化): 再次提示我们运行 `git add` 命令追踪文件.
nothing added to commit but untracked files present (use "git add" to track)
  • 整装待命入队列: 添加文件

git add <file> : 即添加文件,表示跟踪文件变化,即将加入版本控制系统.

如果将文件上传到网盘中,首先需要确定好需要上传的文件列表,然后才是上传文件的具体操作。

git add <file> 做的就是挑选出需要上传文件的清单列表,追踪到这些文件的变化以便下一步一次性全部上传!

$ git add ../cup.txt ./ ../goal.md ../markdown/
warning: LF will be replaced by CRLF in cup.txt.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in git/git.md.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in goal.md.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in markdown/courseware.md.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in markdown/markdown.md.
The file will have its original line endings in your working directory
相关文章
|
6月前
|
前端开发 算法 开发工具
Git分支批量清理利器:自定义命令行插件实战
Git分支批量清理利器:自定义命令行插件实战
121 0
|
移动开发 小程序 Linux
【Linux】Linux和Window下\r与\n的区别、git命令行的使用
目录 1. 回车换行符在Window下和在Linux下的区别: 1.1回车换行符: 1. 2.行缓冲区打印: 1.3进度条小程序 :
239 0
|
3月前
|
开发工具 git
成功解决:fatal: detected dubious ownership in repository at ‘E:/workspace/CSMarket‘。如何使用git工具通过命令行的形式
这篇文章分享了作者在使用Git工具初始化本地仓库时遇到的权限问题,提供了通过命令行解决Git仓库权限问题的方案,并介绍了如何使用Git命令行初始化项目、添加文件、提交以及关联远程仓库的步骤。
成功解决:fatal: detected dubious ownership in repository at ‘E:/workspace/CSMarket‘。如何使用git工具通过命令行的形式
|
3月前
|
Shell 网络安全
bash 和 zsh 命令行终端中的快捷键
bash 和 zsh 命令行终端中的快捷键
|
5月前
|
开发工具 git
MAC如何使用Git命令行上传本地项目及理解,failed to push some refs to ‘https://gitee.com/brother-barking/spxx.git
MAC如何使用Git命令行上传本地项目及理解,failed to push some refs to ‘https://gitee.com/brother-barking/spxx.git
|
5月前
|
缓存 开发工具 数据安全/隐私保护
mac git命令行操作 git push pull 逻辑
mac git命令行操作 git push pull 逻辑
81 1
|
6月前
|
Shell Linux
【Linux】Bash支持各种指令选项的原理:命令行参数
【Linux】Bash支持各种指令选项的原理:命令行参数
|
6月前
|
Shell 开发工具 git
【Github】git bash将本地工程上传至github
【Github】git bash将本地工程上传至github
|
6月前
|
开发工具 git
git简易的命令行入门教程
git简易的命令行入门教程
33 0
|
6月前
|
开发工具 git
git简易的命令行入门教程
git简易的命令行入门教程
56 0