Simple Git

本文旨在成为最简单的Git入门。贡献归于Pro Git

什么是版本控制?

控制、管理软件开发中程序版本变化的软件。方便团队协同工作。

  • 本地化版本控制
  • 集中式版本控制
  • 分布式版本控制

目前我们主要使用的是分布式版本控制。

什么是Git

Git是Linux社区在2005年开发的一套开源的分布式版权控制软件,具有简单、高效、功能齐全等特性。可应付各种复杂的项目开发需求。

基本的 Git 工作流程

  1. 在工作目录中保存修改某些文件。
  2. 对修改后的文件进行快照,然后保存到暂存区域
  3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。
    以下将解释这一工作过程。

安装 Git

在 Ubuntu 这类 Debian 体系的系统上,可以用 apt-get 安装:

  $ apt-get install git

估计这里要在命令前加sudo。其他系统也相当容易。

初次运行 Git 前的配置

用户信息设置

配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新:

1
2
$ git config --global user.name "Alice Bob"
$ git config --global user.email alice@example.com

也许只有用户信息设置是最致命的,其他的,慢慢学习了之后再配置吧。可用git config --list命令查看配置信息。

##Git 基础
将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令。

### 创建Git仓库
有两种方式:创建与克隆。
####新建
1. 为项目建立目录,进入目录,执行以下命令: $ git init

如果当前目录下有几个文件想要纳入版本控制,需要先用git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
1
2
3
$ git add *.c
$ git add README
$ git commit -m 'initial project version'

2.克隆
所谓克隆,即把某项目的 Git 仓库复制一份出来。比如,要克隆 Gnu PG的 Git 代码仓库 gnupg,可以用下面的命令:
1
$ git clone git://git.gnupg.org/gnupg.git

这会在当前目录下创建一个名为gnupg的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。

### 记录更新
工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。未跟踪文件即不纳入版本管理的文件。已跟踪文件是被纳入版本控制管理的文件,它们的状态初始是未更新,经过修改之后变成已修改,然后被放入暂存区(状态是已暂存),最后提交所有暂存文件到Git仓库,文件状态又变成未更新。如此不断反复:
>未更新—->已修改—->已暂存—->未更新

#### 检查当前文件状态
git status命令可查看出文件当前状态,比如:
1
2
3
$ git status
On branch master
nothing to commit, working directory clean

如果创建一个新文件 README,保存退出后运行git status 会看到该文件出现在未跟踪文件列表中。

#### 跟踪新文件
使用命令 git add 开始跟踪一个新文件。所以,要跟踪 README 文件,运行:
1
$ git add README

暂存已修改文件

要暂存更新过的文件,需要运行git add 命令(功能还挺复杂的)。比如,你修改了一个文件叫something.c,运行git add something.c就可以把这个文件转为暂存状态。然后你还可以继续修改。此时如果你需要再次运行git add something.c命令把文件重新暂存起来。

提交更新

把暂存的文件提交更新,运行命令:

1
$ git commit

在此之前,请一定要确认还有什么修改过的或新建的文件还没有git add过。

只要在提交的时候,给git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add 步骤。(提问:哪为何还要git add命令?)

查看提交历史

想回顾下提交历史,可以使用 git log命令查看。

自此你已经学习了最最基本的Git功能,知道如何创建、克隆文件仓库,知道如何暂存、更新。还有很多复杂的功能需要进一步学习,我不会告诉你我还不懂的,不过,我还是要用以下命令撤销我说的这句话:$ git commit --amend

CMD Markdown Learning

CMD Markdown也是一种Markdown,必然有其特色才能吸引人。归纳一些特色

  • 代码高亮
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    /*
    *  helloword.cc - Canonical "Hello, World!" program
    */
    
    #include <iostream>
    
    using namespace std;
    int main(void)
    {
      cout<<"HelloWorld"<<endl;
      return 0;
    }
    
  • 公式编辑
    $\sigma = (XA^d)^{y+eb} $
    懂得使用LaTex的表示泪流满面~

  • 脚注^jiazhu
    其他版本Markdown也有这个功能的吧?


小结:这么多版本的Markdown,不兼容怎么办?Hexo支持吗?赶紧试一试。

Markdown learning


本文源自这个链接,记录是为了方便自己学习记忆,原创性归原作者所有。


What is Markdown?

Markdown 要实现一种纯文本格式的,且易读易写的网络书写语言。

特殊字符自动转换

其实我没怎么看懂原作者想要表达什么。

段落和换行

一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行。比方说,若某一行只包含空格和制表符,则该行也会被视为空行)。普通段落不该用空格或制表符来缩进。

标题

Markdown 支持两种标题的语法,类 Setext 和类 atx 形式。
Setext 形式是用底线的形式,利用 = (最高阶标题)和- (第二阶标题),例如:

这是最高阶标题
=============

这是第二阶标题
------------

类 Atx 形式则是在行首插入 1 到 6 个 # ,对应到标题 1 到 6 阶,例如:

# 这是 H1

## 这是 H2

###### 这是 H6

区块引用blockquotes

使用类似 email 中用 >的引用方式。比如以下命令:

>>>这是一次块区引用,得到的格式如下

这是一次块区引用,得到的格式如下。

区块引用可以嵌套(例如:引用内的引用),只要根据层次加上不同数量的 > 。

引用的区块内也可以使用其他的 Markdown 语法,包括标题、列表、代码区块等。

列表

Markdown支持的列表格式包括:

  • 有序列表

  • 无序列表。

无序列表使用星号、加号或是减号作为列表标记:

1
2
3
* Red
* Green
* Blue

等同于:

1
2
3
+ Red
+ Green
+ Blue

有序列表则使用数字接着一个英文句点,比如以下命令,请注意序号是乱的,但是显示是有序的:

1
2
3
2.  Bird
3.  McHale
1.  Parish
  1. Bird
  2. McHale
  3. Parish

代码区块

和程序相关的写作或是标签语言原始码通常会有已经排版好的代码区块,通常这些区块我们并不希望它以一般段落文件的方式去排版,而是照原来的样子显示,Markdown 会用 <pre><code> 标签来把代码区块包起来。

要在 Markdown 中建立代码区块很简单,只要简单地缩进 4 个空格或是 1 个制表符就可以,例如,下面的输入:

这是一个代码区块,我只是简单地缩进了四个空格
当然,这还是代码
这也是。。。

我现在不是代码了,因为我没有缩进!

代码区块中,一般的 Markdown 语法不会被转换,像是星号便只是星号,这表示你可以很容易地以 Markdown 语法撰写 Markdown 语法相关的文件。

分隔线

你可以在一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。你也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:

***********(产生了以下分割线)

链接

两种方式:

  • 行内式
  • 参考式
    行内式,即链接文字都是用 [方括号] 来标记,在方块括号后面紧接着圆括号并插入网址链接即可。

参考式,在链接文字的括号后面再接上另一个方括号,而在第二个方括号里面要填入用以辨识链接的标记,接着,在文件的任意处,你可以把这个标记的链接内容定义出来。

强调

Markdown 使用星号和底线作为标记强调字词的符号,被包围的字词会被转成用<em> 标签包围,用两个*_ 包起来的话,则会被转成 <strong>。你看到强调了吗?

代码

如果要标记一小段行内代码,你可以用反引号把它包起来(`).

比如,我想说,编译一个程序的命令应该是g++ helloword.cc -o helloword。我就用了这种方法。

图片

Markdown 使用一种和链接很相似的语法来标记图片,同样也允许两种样式: 行内式和参考式。

行内式的图片语法看起来像是:

![Alt text](/path/to/img.jpg)
![Alt text](/path/to/img.jpg "Optional title")

自动链接

Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用方括号包起来, Markdown 就会自动把它转成链接。

反斜杠

Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,例如:如果你想要用星号加在文字旁边的方式来做出强调效果(但不用<em>标签),你可以在星号的前面加上反斜杠。

Markdown 免费编辑器

我的第一个帖子

大家好,欢迎浏览我的网页,这是我第一次使用Markdown,我在练习。Title下的其他标签怎么会出错呢?奇怪…

用Markdown写博客

这是一次测试,练习使用Markdown,你认真就赢了。

练习:这是二级目录

测试:这是二级目录

三级目录

竟然可以用Latex,太棒了!