格式化 markdown 文档

pull/11/head
Zhang Peng 2019-02-25 16:48:48 +08:00
parent 9d24cbf0a4
commit 87a1df9593
32 changed files with 172 additions and 172 deletions

View File

@ -24,7 +24,7 @@
Docker 使用 C/S 体系结构。Docker 守护进程,负责构建、运行和分发 Docker 容器Docker 客户端与 Docker 守护进程通信。Docker 客户端和守护进程可以在同一个系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程使用 REST API并通过 UNIX 套接字或网络接口进行通信。 Docker 使用 C/S 体系结构。Docker 守护进程,负责构建、运行和分发 Docker 容器Docker 客户端与 Docker 守护进程通信。Docker 客户端和守护进程可以在同一个系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程使用 REST API并通过 UNIX 套接字或网络接口进行通信。
![https://docs.docker.com/engine/images/architecture.svg](https://docs.docker.com/engine/images/architecture.svg) <br><div align="center"><img src="https://docs.docker.com/engine/images/architecture.svg"/></div><br>
### Docker 守护进程docker daemon ### Docker 守护进程docker daemon

View File

@ -32,7 +32,7 @@ REST API 指定程序可用于与守护进程进行通信并指示其执行操
命令行客户端。 命令行客户端。
![https://docs.docker.com/engine/images/engine-components-flow.png](https://docs.docker.com/engine/images/engine-components-flow.png) <br><div align="center"><img src="https://docs.docker.com/engine/images/engine-components-flow.png"/></div><br>
CLI 使用 Docker REST API 通过脚本或直接 CLI 命令来控制 Docker 守护进程或与其进行交互。许多其他 Docker 应用程序使用底层的 API 和 CLI。 CLI 使用 Docker REST API 通过脚本或直接 CLI 命令来控制 Docker 守护进程或与其进行交互。许多其他 Docker 应用程序使用底层的 API 和 CLI。
@ -40,7 +40,7 @@ CLI 使用 Docker REST API 通过脚本或直接 CLI 命令来控制 Docker 守
### 传统虚拟机和 Docker ### 传统虚拟机和 Docker
![](http://dunwu.test.upcdn.net/images/os/docker/containers-and-vm.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/docker/containers-and-vm.png"/></div><br>
## 概念 ## 概念

View File

@ -6,7 +6,7 @@
> >
> Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker就不用担心环境问题。 > Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker就不用担心环境问题。
![](http://dunwu.test.upcdn.net/images/os/docker/containers-and-vm.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/docker/containers-and-vm.png"/></div><br>
## [入门篇](docker-quickstart.md) ## [入门篇](docker-quickstart.md)

View File

@ -44,7 +44,7 @@ Kubernetes 包含若干抽象用来表示系统状态,包括:已部署的容
- Volume - Volume
- Namespace - Namespace
![](http://dunwu.test.upcdn.net/images/os/kubernetes/pod.svg) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/kubernetes/pod.svg"/></div><br>
高级对象 高级对象

View File

@ -50,7 +50,7 @@ tags:
linux 目录结构是树形结构,其根目录是 `/` 。一张思维导图说明各个目录的作用: linux 目录结构是树形结构,其根目录是 `/` 。一张思维导图说明各个目录的作用:
![](http://dunwu.test.upcdn.net/images/linux/linux-folders.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/linux/linux-folders.png"/></div><br>
### Linux 文件属性 ### Linux 文件属性
@ -77,7 +77,7 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。 每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180927171909.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920180927171909.png"/></div><br>
从左至右用 0-9 这些数字来表示。 从左至右用 0-9 这些数字来表示。
@ -466,7 +466,7 @@ scp -r test root@192.168.0.1:/opt
ssh-keygen -t rsa ssh-keygen -t rsa
``` ```
2将服务器 A 的 `~/.ssh/id_rsa.pub` 文件内容复制到服务器 B 的 `~/.ssh/authorized_keys` 文件中。 2将服务器 A 的 `\~/.ssh/id_rsa.pub` 文件内容复制到服务器 B 的 `\~/.ssh/authorized_keys` 文件中。
```bash ```bash
# 服务器 A 上执行以下命令 # 服务器 A 上执行以下命令

View File

@ -290,30 +290,30 @@ kill 3268
```sh ```sh
# 1.启动 nfs 服务 # 1.启动 nfs 服务
systemctl start nfs-server.service systemctl start nfs-server.service
# 2.设置开机自启动 # 2.设置开机自启动
systemctl enable nfs-server.service systemctl enable nfs-server.service
# 3.停止开机自启动 # 3.停止开机自启动
systemctl disable nfs-server.service systemctl disable nfs-server.service
# 4.查看服务当前状态 # 4.查看服务当前状态
systemctl status nfs-server.service systemctl status nfs-server.service
# 5.重新启动某服务 # 5.重新启动某服务
systemctl restart nfs-server.service systemctl restart nfs-server.service
# 6.查看所有已启动的服务 # 6.查看所有已启动的服务
systemctl list -units --type=service systemctl list -units --type=service
# 7. 开启防火墙 22 端口 # 7. 开启防火墙 22 端口
iptables -I INPUT -p tcp --dport 22 -j accept iptables -I INPUT -p tcp --dport 22 -j accept
# 8. 彻底关闭防火墙 # 8. 彻底关闭防火墙
sudo systemctl status firewalld.service sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service sudo systemctl disable firewalld.service
``` ```
### service ### service
@ -366,16 +366,16 @@ service network restart
# 每晚的 21:30 重启 smb # 每晚的 21:30 重启 smb
30 21 * * * /etc/init.d/smb restart 30 21 * * * /etc/init.d/smb restart
# 每月 1、10、22 日的 4 : 45 重启 smb # 每月 1、10、22 日的 4 : 45 重启 smb
45 4 1,10,22 * * /etc/init.d/smb restart 45 4 1,10,22 * * /etc/init.d/smb restart
# 每周六、周日的 1:10 重启 smb # 每周六、周日的 1:10 重启 smb
10 1 * * 6,0 /etc/init.d/smb restart 10 1 * * 6,0 /etc/init.d/smb restart
# 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb # 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
0,30 18-23 * * * /etc/init.d/smb restart 0,30 18-23 * * * /etc/init.d/smb restart
# 每星期六的晚上 11:00 pm 重启 smb # 每星期六的晚上 11:00 pm 重启 smb
0 23 * * 6 /etc/init.d/smb restart 0 23 * * 6 /etc/init.d/smb restart
# 每一小时重启 smb # 每一小时重启 smb

View File

@ -190,13 +190,13 @@ lo Link encap:Local Loopback
# 查看当前路由 # 查看当前路由
route route
Kernel IP routing table Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface Destination Gateway Genmask Flags Metric Ref Use Iface
112.124.12.0    *               255.255.252.0   U     0      0        0 eth1 112.124.12.0 * 255.255.252.0 U 0 0 0 eth1
10.160.0.0      *               255.255.240.0   U     0      0        0 eth0 10.160.0.0 * 255.255.240.0 U 0 0 0 eth0
192.168.0.0     10.160.15.247   255.255.0.0     UG    0      0        0 eth0 192.168.0.0 10.160.15.247 255.255.0.0 UG 0 0 0 eth0
172.16.0.0      10.160.15.247   255.240.0.0     UG    0      0        0 eth0 172.16.0.0 10.160.15.247 255.240.0.0 UG 0 0 0 eth0
10.0.0.0        10.160.15.247   255.0.0.0       UG    0      0        0 eth0 10.0.0.0 10.160.15.247 255.0.0.0 UG 0 0 0 eth0
default         112.124.15.247  0.0.0.0         UG    0      0        0 eth1 default 112.124.15.247 0.0.0.0 UG 0 0 0 eth1
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 # 添加网关/设置网关 route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 # 添加网关/设置网关
route add -net 224.0.0.0 netmask 240.0.0.0 reject # 屏蔽一条路由 route add -net 224.0.0.0 netmask 240.0.0.0 reject # 屏蔽一条路由

View File

@ -5,7 +5,7 @@
# 命令行的艺术 # 命令行的艺术
[![Join the chat at https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) <br><div align="center"><img src="https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"/></div><br>
- [前言](#前言) - [前言](#前言)
- [基础](#基础) - [基础](#基础)
@ -20,7 +20,7 @@
- [免责声明](#免责声明) - [免责声明](#免责声明)
![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/cowsay.png) <br><div align="center"><img src="https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/cowsay.png"/></div><br>
熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。 熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。
@ -88,7 +88,7 @@
- 键入 `history` 查看命令行历史记录,再用 `!n``n` 是命令编号)就可以再次执行。其中有许多缩写,最有用的大概就是 `!$` 它用于指代上次键入的参数,而 `!!` 可以指代上次键入的命令了(参考 man 页面中的“HISTORY EXPANSION”。不过这些功能你也可以通过快捷键 **ctrl-r****alt-.** 来实现。 - 键入 `history` 查看命令行历史记录,再用 `!n``n` 是命令编号)就可以再次执行。其中有许多缩写,最有用的大概就是 `!$` 它用于指代上次键入的参数,而 `!!` 可以指代上次键入的命令了(参考 man 页面中的“HISTORY EXPANSION”。不过这些功能你也可以通过快捷键 **ctrl-r****alt-.** 来实现。
- `cd` 命令可以切换工作路径,输入 `cd ~` 可以进入 home 目录。要访问你的 home 目录中的文件,可以使用前缀 `~`(例如 `~/.bashrc`)。在 `sh` 脚本里则用环境变量 `$HOME` 指代 home 目录的路径。 - `cd` 命令可以切换工作路径,输入 `cd \~` 可以进入 home 目录。要访问你的 home 目录中的文件,可以使用前缀 `\~`(例如 `\~/.bashrc`)。在 `sh` 脚本里则用环境变量 `$HOME` 指代 home 目录的路径。
- 回到前一个工作路径:`cd -`。 - 回到前一个工作路径:`cd -`。
@ -117,9 +117,9 @@
- 使用 `alias` 来创建常用命令的快捷形式。例如:`alias ll='ls -latr'` 创建了一个新的命令别名 `ll` - 使用 `alias` 来创建常用命令的快捷形式。例如:`alias ll='ls -latr'` 创建了一个新的命令别名 `ll`
- 可以把别名、shell 选项和常用函数保存在 `~/.bashrc`,具体看下这篇[文章](http://superuser.com/a/183980/7106)。这样做的话你就可以在所有 shell 会话中使用你的设定。 - 可以把别名、shell 选项和常用函数保存在 `\~/.bashrc`,具体看下这篇[文章](http://superuser.com/a/183980/7106)。这样做的话你就可以在所有 shell 会话中使用你的设定。
- 把环境变量的设定以及登陆时要执行的命令保存在 `~/.bash_profile`。而对于从图形界面启动的 shell 和 `cron` 启动的 shell则需要单独配置文件。 - 把环境变量的设定以及登陆时要执行的命令保存在 `\~/.bash_profile`。而对于从图形界面启动的 shell 和 `cron` 启动的 shell则需要单独配置文件。
- 要想在几台电脑中同步你的配置文件(例如 `.bashrc``.bash_profile`),可以借助 Git。 - 要想在几台电脑中同步你的配置文件(例如 `.bashrc``.bash_profile`),可以借助 Git。
@ -164,7 +164,7 @@
- ssh 中,了解如何使用 `-L``-D`(偶尔需要用 `-R`)开启隧道是非常有用的,比如当你需要从一台远程服务器上访问 web 页面。 - ssh 中,了解如何使用 `-L``-D`(偶尔需要用 `-R`)开启隧道是非常有用的,比如当你需要从一台远程服务器上访问 web 页面。
- 对 ssh 设置做一些小优化可能是很有用的,例如这个 `~/.ssh/config` 文件包含了防止特定网络环境下连接断开、压缩数据、多通道等选项: - 对 ssh 设置做一些小优化可能是很有用的,例如这个 `\~/.ssh/config` 文件包含了防止特定网络环境下连接断开、压缩数据、多通道等选项:
``` ```
TCPKeepAlive=yes TCPKeepAlive=yes
ServerAliveInterval=15 ServerAliveInterval=15
@ -315,7 +315,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 用 [`ncdu`](https://dev.yorhel.nl/ncdu) 来查看磁盘使用情况,它比寻常的命令,如 `du -sh *`,更节省时间。 - 用 [`ncdu`](https://dev.yorhel.nl/ncdu) 来查看磁盘使用情况,它比寻常的命令,如 `du -sh *`,更节省时间。
- 查找正在使用带宽的套接字连接或进程,使用 [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs)。 - 查找正在使用带宽的套接字连接或进程,使用 [`iftop`](http://www.ex-parrot.com/\~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs)。
- `ab` 工具Apache 中自带)可以简单粗暴地检查 web 服务器的性能。对于更复杂的负载测试,使用 `siege` - `ab` 工具Apache 中自带)可以简单粗暴地检查 web 服务器的性能。对于更复杂的负载测试,使用 `siege`
@ -514,7 +514,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- [`sar`](http://sebastien.godard.pagesperso-orange.fr/):系统历史数据 - [`sar`](http://sebastien.godard.pagesperso-orange.fr/):系统历史数据
- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs):套接字及进程的网络利用情况 - [`iftop`](http://www.ex-parrot.com/\~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs):套接字及进程的网络利用情况
- `ss`:套接字数据 - `ss`:套接字数据
@ -609,6 +609,6 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
## 授权条款 ## 授权条款
[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) <br><div align="center"><img src="http://creativecommons.org/licenses/by-sa/4.0/"/></div><br>
本文使用授权协议 [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/)。 本文使用授权协议 [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/)。

View File

@ -35,12 +35,12 @@ nameserver 8.8.8.8
```bash ```bash
# 开启防火墙 22 端口 # 开启防火墙 22 端口
iptables -I INPUT -p tcp --dport 22 -j accept iptables -I INPUT -p tcp --dport 22 -j accept
# 彻底关闭防火墙 # 彻底关闭防火墙
sudo systemctl status firewalld.service sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service sudo systemctl disable firewalld.service
``` ```
## 系统维护 ## 系统维护

View File

@ -181,7 +181,7 @@ Windows
访问:`\\<你的ip>\<你的共享路径>` 访问:`\\<你的ip>\<你的共享路径>`
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180928161334.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920180928161334.png"/></div><br>
Mac Mac

View File

@ -18,7 +18,7 @@ Beats 是安装在服务器上的数据中转代理。
Beats 可以将数据直接传输到 Elasticsearch 或传输到 Logstash 。 Beats 可以将数据直接传输到 Elasticsearch 或传输到 Logstash 。
![Beats Platform](https://www.elastic.co/guide/en/beats/libbeat/current/images/beats-platform.png) <br><div align="center"><img src="https://www.elastic.co/guide/en/beats/libbeat/current/images/beats-platform.png"/></div><br>
Beats 有多种类型,可以根据实际应用需要选择合适的类型。 Beats 有多种类型,可以根据实际应用需要选择合适的类型。
@ -47,7 +47,7 @@ Filebeat带有内部模块auditdApacheNginxSystem和MySQL
FileBeat 不会让你的管道超负荷。FileBeat 如果是向 Logstash 传输数据,当 Logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。一旦拥塞得到解决FileBeat 将恢复到原来的速度并继续传播。 FileBeat 不会让你的管道超负荷。FileBeat 如果是向 Logstash 传输数据,当 Logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。一旦拥塞得到解决FileBeat 将恢复到原来的速度并继续传播。
![Beats design](https://www.elastic.co/guide/en/beats/filebeat/current/images/filebeat.png) <br><div align="center"><img src="https://www.elastic.co/guide/en/beats/filebeat/current/images/filebeat.png"/></div><br>
## 安装 ## 安装

View File

@ -4,7 +4,7 @@
单击侧面导航栏中的 `Discover` ,可以显示 `Kibana` 的数据查询功能功能。 单击侧面导航栏中的 `Discover` ,可以显示 `Kibana` 的数据查询功能功能。
![https://www.elastic.co/guide/en/kibana/current/images/tutorial-discover.png](https://www.elastic.co/guide/en/kibana/current/images/tutorial-discover.png) <br><div align="center"><img src="https://www.elastic.co/guide/en/kibana/current/images/tutorial-discover.png"/></div><br>
在搜索栏中您可以输入Elasticsearch查询条件来搜索您的数据。您可以在 `Discover` 页面中浏览结果并在 `Visualize` 页面中创建已保存搜索条件的可视化。 在搜索栏中您可以输入Elasticsearch查询条件来搜索您的数据。您可以在 `Discover` 页面中浏览结果并在 `Visualize` 页面中创建已保存搜索条件的可视化。
@ -14,7 +14,7 @@
默认情况下每个匹配文档都显示所有字段。要选择要显示的文档字段请将鼠标悬停在“可用字段”列表上然后单击要包含的每个字段旁边的添加按钮。例如如果只添加account_number则显示将更改为包含五个帐号的简单列表 默认情况下每个匹配文档都显示所有字段。要选择要显示的文档字段请将鼠标悬停在“可用字段”列表上然后单击要包含的每个字段旁边的添加按钮。例如如果只添加account_number则显示将更改为包含五个帐号的简单列表
![https://www.elastic.co/guide/en/kibana/6.1/images/tutorial-discover-3.png](https://www.elastic.co/guide/en/kibana/6.1/images/tutorial-discover-3.png) <br><div align="center"><img src="https://www.elastic.co/guide/en/kibana/6.1/images/tutorial-discover-3.png"/></div><br>
### 查询语义 ### 查询语义
@ -105,7 +105,7 @@ quick brown forks
但是,由于拼写错误,我们的查询关键字变成如下情况,依然可以查到想要的结果。 但是,由于拼写错误,我们的查询关键字变成如下情况,依然可以查到想要的结果。
``` ```
quikc~ brwn~ foks~ quikc\~ brwn\~ foks\~
``` ```
这种模糊查询使用 Damerau-Levenshtein 距离来查找所有匹配最多两个更改的项。所谓的更改是指单个字符的插入,删除或替换,或者两个相邻字符的换位。 这种模糊查询使用 Damerau-Levenshtein 距离来查找所有匹配最多两个更改的项。所谓的更改是指单个字符的插入,删除或替换,或者两个相邻字符的换位。
@ -113,7 +113,7 @@ quikc~ brwn~ foks~
默认编辑距离为 `2`,但编辑距离为 `1` 应足以捕捉所有人类拼写错误的80。它可以被指定为 默认编辑距离为 `2`,但编辑距离为 `1` 应足以捕捉所有人类拼写错误的80。它可以被指定为
``` ```
quikc~1 quikc\~1
``` ```
#### 近似检索 #### 近似检索
@ -123,7 +123,7 @@ quikc~1
``` ```
"fox quick"~5 "fox quick"\~5
``` ```
字段中的文本越接近查询字符串中指定的原始顺序,该文档就越被认为是相关的。当与上面的示例查询相比时,短语 `"quick fox"` 将被认为比 `"quick brown fox"` 更近似查询条件。 字段中的文本越接近查询字符串中指定的原始顺序,该文档就越被认为是相关的。当与上面的示例查询相比时,短语 `"quick fox"` 将被认为比 `"quick brown fox"` 更近似查询条件。

View File

@ -32,7 +32,7 @@ Logstash 有两个必要元素:`input` 和 `output` ,一个可选元素:`f
这三个元素,分别代表 Logstash 事件处理的三个阶段:输入 > 过滤器 > 输出。 这三个元素,分别代表 Logstash 事件处理的三个阶段:输入 > 过滤器 > 输出。
![logstash 工作原理.png](https://www.elastic.co/guide/en/logstash/current/static/images/basic_logstash_pipeline.png) <br><div align="center"><img src="https://www.elastic.co/guide/en/logstash/current/static/images/basic_logstash_pipeline.png"/></div><br>
- input 负责从数据源采集数据。 - input 负责从数据源采集数据。
- filter 将数据修改为你指定的格式或内容。 - filter 将数据修改为你指定的格式或内容。

View File

@ -32,7 +32,7 @@ ELK 是 elastic 公司旗下三款产品 [ElasticSearch](https://www.elastic.co/
### Elastic 架构 ### Elastic 架构
![static/images/deploy3.png](https://www.elastic.co/guide/en/logstash/current/static/images/deploy3.png) <br><div align="center"><img src="https://www.elastic.co/guide/en/logstash/current/static/images/deploy3.png"/></div><br>
> **说明** > **说明**
> >
@ -274,7 +274,7 @@ output {
大功告成,此后,`io.github.dunwu.spring` 包中的 TRACE 及以上级别的日志信息都会被定向输出到 logstash 服务。 大功告成,此后,`io.github.dunwu.spring` 包中的 TRACE 及以上级别的日志信息都会被定向输出到 logstash 服务。
![image.png](http://upload-images.jianshu.io/upload_images/3101171-cd876d79a14955b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-cd876d79a14955b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div><br>
## 资料 ## 资料

View File

@ -1,3 +1,3 @@
# Gitlab # Gitlab
![](https://docs.gitlab.com/ce/ci/img/cicd_pipeline_infograph.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/ci/img/cicd_pipeline_infograph.png"/></div><br>

View File

@ -25,7 +25,7 @@
进入官方下载地址https://about.gitlab.com/install/ ,如下图,选择合适的版本。 进入官方下载地址https://about.gitlab.com/install/ ,如下图,选择合适的版本。
![](http://dunwu.test.upcdn.net/snap/20190129155838.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/snap/20190129155838.png"/></div><br>
以 CentOS7 为例: 以 CentOS7 为例:
@ -87,7 +87,7 @@ docker run -d \
gitlab/gitlab-ce gitlab/gitlab-ce
``` ```
![](http://dunwu.test.upcdn.net/snap/20190131150515.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/snap/20190131150515.png"/></div><br>
## 安装 gitlab-ci-multi-runner ## 安装 gitlab-ci-multi-runner
@ -138,7 +138,7 @@ sudo gitlab-runner register
URL 和令牌信息在 Gitlab 的 Runner 管理页面获取: URL 和令牌信息在 Gitlab 的 Runner 管理页面获取:
![](http://dunwu.test.upcdn.net/snap/20190129163100.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/snap/20190129163100.png"/></div><br>
``` ```
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )

View File

@ -12,31 +12,31 @@
3. 打开 **Profile settings**. 3. 打开 **Profile settings**.
![Profile settings dropdown](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings.png"/></div><br>
4. 跳转到 **SSH keys** tab 页 4. 跳转到 **SSH keys** tab 页
![SSH Keys](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys.png"/></div><br>
5. 黏贴你的 SSH 公钥内容到 Key 文本框 5. 黏贴你的 SSH 公钥内容到 Key 文本框
![Paste SSH public key](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_paste_pub.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_paste_pub.png"/></div><br>
6. 为了便于识别,你可以为其命名 6. 为了便于识别,你可以为其命名
![SSH key title](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_title.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_title.png"/></div><br>
7. 点击 **Add key** 将 SSH 公钥添加到 GitLab 7. 点击 **Add key** 将 SSH 公钥添加到 GitLab
![SSH key single page](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_single_key.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_single_key.png"/></div><br>
## 创建项目 ## 创建项目
![](http://dunwu.test.upcdn.net/snap/20190131150658.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/snap/20190131150658.png"/></div><br>
输入项目信息,点击 Create project 按钮,在 Gitlab 创建项目。 输入项目信息,点击 Create project 按钮,在 Gitlab 创建项目。
![](http://dunwu.test.upcdn.net/snap/20190131150759.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/snap/20190131150759.png"/></div><br>
## 克隆项目到本地 ## 克隆项目到本地
@ -44,29 +44,29 @@
拷贝项目地址,然后在本地执行 `git clone <url>` 拷贝项目地址,然后在本地执行 `git clone <url>`
![1548919326929](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1548919326929.png) <br><div align="center"><img src="C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1548919326929.png"/></div><br>
## 创建 Issue ## 创建 Issue
依次点击 **Projects Dashboard** > **Issues** > **New Issue** 可以新建 Issue 依次点击 **Projects Dashboard** > **Issues** > **New Issue** 可以新建 Issue
![New issue from the issue list view](https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_tracker_list.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_tracker_list.png"/></div><br>
在项目中直接添加 issue 在项目中直接添加 issue
![New issue from the issues list](https://docs.gitlab.com/ce/user/project/issues/img/new_issue.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/user/project/issues/img/new_issue.png"/></div><br>
在未关闭 issue 中,点击 **New Issue** 添加 issue 在未关闭 issue 中,点击 **New Issue** 添加 issue
![New issue from an open issue](https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_open_issue.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_open_issue.png"/></div><br>
通过项目面板添加 issue 通过项目面板添加 issue
![New issue from a project's dashboard](https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_projects_dashboard.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_projects_dashboard.png"/></div><br>
通过 issue 面板添加 issue 通过 issue 面板添加 issue
![From the issue board](https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_issue_board.png) <br><div align="center"><img src="https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_issue_board.png"/></div><br>
## 引申和引用 ## 引申和引用

View File

@ -22,13 +22,13 @@ a. 进入 [Java 官网下载页面](https://www.oracle.com/technetwork/java/java
b. 选择需要的版本: b. 选择需要的版本:
![](http://oyz7npk35.bkt.clouddn.com/images/20180920181010164121.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920181010164121.png"/></div><br>
c. 选择对应操作系统的安装包: c. 选择对应操作系统的安装包:
Windows 系统选择 exe 安装包Mac 系统选择 dmp 安装包Linux 系统选择 tar.gz 压缩包RedHat 发行版可以安装 rpm 包)。 Windows 系统选择 exe 安装包Mac 系统选择 dmp 安装包Linux 系统选择 tar.gz 压缩包RedHat 发行版可以安装 rpm 包)。
![](http://oyz7npk35.bkt.clouddn.com/images/20180920181010164308.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920181010164308.png"/></div><br>
2运行安装包按提示逐步安装 2运行安装包按提示逐步安装
@ -51,11 +51,11 @@ Windows 系统选择 exe 安装包Mac 系统选择 dmp 安装包Linux 系
a. 安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置" a. 安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置"
![img](https://www.runoob.com/wp-content/uploads/2013/12/win-java1.png) <br><div align="center"><img src="https://www.runoob.com/wp-content/uploads/2013/12/win-java1.png"/></div><br>
b. 选择"高级"选项卡,点击"环境变量" b. 选择"高级"选项卡,点击"环境变量"
![img](https://www.runoob.com/wp-content/uploads/2013/12/java-win2.png) <br><div align="center"><img src="https://www.runoob.com/wp-content/uploads/2013/12/java-win2.png"/></div><br>
然后就会出现如下图所示的画面: 然后就会出现如下图所示的画面:
@ -78,7 +78,7 @@ a. "开始"->"运行",键入"cmd"
b. 键入命令: **java -version**、**java**、**javac** 几个命令,出现以下信息,说明环境变量配置成功; b. 键入命令: **java -version**、**java**、**javac** 几个命令,出现以下信息,说明环境变量配置成功;
![img](https://www.runoob.com/wp-content/uploads/2013/12/java-win9.png) <br><div align="center"><img src="https://www.runoob.com/wp-content/uploads/2013/12/java-win9.png"/></div><br>
## Linux 系统安装方法 ## Linux 系统安装方法

View File

@ -93,7 +93,7 @@ nohup java -jar jenkins.war --httpPort=8080 >> nohup.out 2>&1 &
**现象**:输入密码后,卡在 check 页面 **现象**:输入密码后,卡在 check 页面
![jenkins-checking.png](images/jenkins-checking.png) <br><div align="center"><img src="images/jenkins-checking.png"/></div><br>
**原因**jenkins 在安装插件前总是尝试连接 www.google.com来判断网络是否连通。谷歌的网站在大陆是连不上的所以会出现这个问题。 **原因**jenkins 在安装插件前总是尝试连接 www.google.com来判断网络是否连通。谷歌的网站在大陆是连不上的所以会出现这个问题。

View File

@ -24,7 +24,7 @@
进入[官方下载地址](https://www.sonatype.com/download-oss-sonatype),选择合适版本下载。 进入[官方下载地址](https://www.sonatype.com/download-oss-sonatype),选择合适版本下载。
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180929160614.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920180929160614.png"/></div><br>
本人希望将 Nexus 部署在 Linux 机器,所以选用的是 Unix 版本。 本人希望将 Nexus 部署在 Linux 机器,所以选用的是 Unix 版本。
@ -56,13 +56,13 @@ Usage: ./nexus {start|stop|run|run-redirect|status|restart|force-reload}
启动成功后,在浏览器中访问 `http://<ip>:8081`,欢迎页面如下图所示: 启动成功后,在浏览器中访问 `http://<ip>:8081`,欢迎页面如下图所示:
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180929164140.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920180929164140.png"/></div><br>
点击右上角 Sign in 登录,默认用户名/密码为admin/admin123。 点击右上角 Sign in 登录,默认用户名/密码为admin/admin123。
有必要提一下的是,在 Nexus 的 Repositories 管理页面,展示了可用的 maven 仓库,如下图所示: 有必要提一下的是,在 Nexus 的 Repositories 管理页面,展示了可用的 maven 仓库,如下图所示:
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180929170924.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920180929170924.png"/></div><br>
> 说明: > 说明:
> >

View File

@ -143,7 +143,7 @@ $ vi /etc/sysconfig/svnserve
在新的窗口,输入地址 `svn://<你的 IP>` 即可,不出意外输入用户名和密码就能连接成功了(这里的用户、密码必须在 passwd 配置文件的清单中)。默认端口 3690如果你修改了端口那么要记得加上端口号。如下图所示 在新的窗口,输入地址 `svn://<你的 IP>` 即可,不出意外输入用户名和密码就能连接成功了(这里的用户、密码必须在 passwd 配置文件的清单中)。默认端口 3690如果你修改了端口那么要记得加上端口号。如下图所示
![](http://dunwu.test.upcdn.net/snap/20190129175443.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/snap/20190129175443.png"/></div><br>
## 2. 引申和引用 ## 2. 引申和引用

View File

@ -167,7 +167,7 @@ Python 语言支持以下类型的运算符:
| & | 按位与运算符:参与运算的两个值,如果两个相应位都为 1,则该位的结果为 1,否则为 0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 | | & | 按位与运算符:参与运算的两个值,如果两个相应位都为 1,则该位的结果为 1,否则为 0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| \| | 按位或运算符:只要对应的二个二进位有一个为 1 时,结果位就为 1。 | (a \| b) 输出结果 61 ,二进制解释: 0011 1101 | | \| | 按位或运算符:只要对应的二个二进位有一个为 1 时,结果位就为 1。 | (a \| b) 输出结果 61 ,二进制解释: 0011 1101 |
| ^ | 按位异或运算符:当两对应的二进位相异时,结果为 1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 | | ^ | 按位异或运算符:当两对应的二进位相异时,结果为 1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
| ~ | 按位取反运算符:对数据的每个二进制位取反,即把 1 变为 0,把 0 变为 1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011 在一个有符号二进制数的补码形式。 | | \~ | 按位取反运算符:对数据的每个二进制位取反,即把 1 变为 0,把 0 变为 1 | (\~a ) 输出结果 -61 ,二进制解释: 1100 0011 在一个有符号二进制数的补码形式。 |
| << | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补 0。 | a << 2 240 1111 0000 | | << | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补 0。 | a << 2 240 1111 0000 |
| >> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 | | >> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
@ -198,7 +198,7 @@ Python 语言支持以下类型的运算符:
| 运算符 | 描述 | | 运算符 | 描述 |
| --------------------------- | ------------------------------------------------------ | | --------------------------- | ------------------------------------------------------ |
| \*\* | 指数 (最高优先级) | | \*\* | 指数 (最高优先级) |
| ~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) | | \~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
| \* / % // | 乘,除,取模和取整除 | | \* / % // | 乘,除,取模和取整除 |
| + - | 加法减法 | | + - | 加法减法 |
| >> << | 右移,左移运算符 | | >> << | 右移,左移运算符 |

View File

@ -61,7 +61,7 @@ Git 是一个非常优秀的版本控制工具,但是在实际版本管理中
下面,来介绍一下 git-flow 模型。 下面,来介绍一下 git-flow 模型。
![git-flow.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-flow.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-flow.png"/></div><br>
`Gitflow`工作流仍然用中央仓库作为所有开发者的交互中心。和其它的工作流一样,开发者在本地工作并`push`分支到要中央仓库中。 `Gitflow`工作流仍然用中央仓库作为所有开发者的交互中心。和其它的工作流一样,开发者在本地工作并`push`分支到要中央仓库中。
@ -73,19 +73,19 @@ Git 是一个非常优秀的版本控制工具,但是在实际版本管理中
`develop` 分支作为功能的集成分支。 `develop` 分支作为功能的集成分支。
![img](https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-1historical.png) <br><div align="center"><img src="https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-1historical.png"/></div><br>
### 功能分支 ### 功能分支
每个新功能位于一个自己的分支,这样可以[`push`到中央仓库以备份和协作](https://www.atlassian.com/git/tutorial/remote-repositories#!push)。但功能分支不是从`master`分支上拉出新分支,而是使用`develop`分支作为父分支。当新功能完成时,[合并回`develop`分支](https://www.atlassian.com/git/tutorial/git-branches#!merge)。新功能提交应该从不直接与`master`分支交互。 每个新功能位于一个自己的分支,这样可以[`push`到中央仓库以备份和协作](https://www.atlassian.com/git/tutorial/remote-repositories#!push)。但功能分支不是从`master`分支上拉出新分支,而是使用`develop`分支作为父分支。当新功能完成时,[合并回`develop`分支](https://www.atlassian.com/git/tutorial/git-branches#!merge)。新功能提交应该从不直接与`master`分支交互。
![img](https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-2feature.png) <br><div align="center"><img src="https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-2feature.png"/></div><br>
注意,从各种含义和目的上来看,功能分支加上`develop`分支就是功能分支工作流的用法。但`Gitflow`工作流没有在这里止步。 注意,从各种含义和目的上来看,功能分支加上`develop`分支就是功能分支工作流的用法。但`Gitflow`工作流没有在这里止步。
### 发布分支 ### 发布分支
![img](https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-3release.png) <br><div align="center"><img src="https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-3release.png"/></div><br>
一旦`develop`分支上有了做一次发布(或者说快到了既定的发布日)的足够功能,就从`develop`分支上`fork`一个发布分支。新建的分支用于开始发布循环,所以从这个时间点开始之后新的功能不能再加到这个分支上 —— 这个分支只应该做`Bug`修复、文档生成和其它面向发布任务。一旦对外发布的工作都完成了,发布分支合并到`master`分支并分配一个版本号打好`Tag`。另外,这些从新建发布分支以来的做的修改要合并回`develop`分支。 一旦`develop`分支上有了做一次发布(或者说快到了既定的发布日)的足够功能,就从`develop`分支上`fork`一个发布分支。新建的分支用于开始发布循环,所以从这个时间点开始之后新的功能不能再加到这个分支上 —— 这个分支只应该做`Bug`修复、文档生成和其它面向发布任务。一旦对外发布的工作都完成了,发布分支合并到`master`分支并分配一个版本号打好`Tag`。另外,这些从新建发布分支以来的做的修改要合并回`develop`分支。
@ -98,7 +98,7 @@ Git 是一个非常优秀的版本控制工具,但是在实际版本管理中
### 维护分支 ### 维护分支
![img](https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-4maintenance.png) <br><div align="center"><img src="https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-4maintenance.png"/></div><br>
维护分支或说是热修复(`hotfix`)分支用于生成快速给产品发布版本(`production releases`)打补丁,这是唯一可以直接从`master`分支`fork`出来的分支。修复完成,修改应该马上合并回`master`分支和`develop`分支(当前的发布分支),`master`分支应该用新的版本号打好`Tag`。 维护分支或说是热修复(`hotfix`)分支用于生成快速给产品发布版本(`production releases`)打补丁,这是唯一可以直接从`master`分支`fork`出来的分支。修复完成,修改应该马上合并回`master`分支和`develop`分支(当前的发布分支),`master`分支应该用新的版本号打好`Tag`。
@ -236,19 +236,19 @@ $ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develo
#### 使用 #### 使用
- **初始化:** git flow init - **初始化:** git flow init
- **开始新Feature:** git flow feature start MYFEATURE - **开始新Feature:** git flow feature start MYFEATURE
- **Publish一个Feature(也就是push到远程):** git flow feature publish MYFEATURE - **Publish一个Feature(也就是push到远程):** git flow feature publish MYFEATURE
- **获取Publish的Feature:** git flow feature pull origin MYFEATURE - **获取Publish的Feature:** git flow feature pull origin MYFEATURE
- **完成一个Feature:** git flow feature finish MYFEATURE - **完成一个Feature:** git flow feature finish MYFEATURE
- **开始一个Release:** git flow release start RELEASE [BASE] - **开始一个Release:** git flow release start RELEASE [BASE]
- **Publish一个Release:** git flow release publish RELEASE - **Publish一个Release:** git flow release publish RELEASE
- **发布Release:** git flow release finish RELEASE - **发布Release:** git flow release finish RELEASE
别忘了git push --tags 别忘了git push --tags
- **开始一个Hotfix:** git flow hotfix start VERSION [BASENAME] - **开始一个Hotfix:** git flow hotfix start VERSION [BASENAME]
- **发布一个Hotfix:** git flow hotfix finish VERSION - **发布一个Hotfix:** git flow hotfix finish VERSION
![git-flow-commands.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-flow-commands.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-flow-commands.png"/></div><br>
### Source Tree ### Source Tree

View File

@ -388,7 +388,7 @@ HEAD is now at a13b85e
然后, 正常提交。 然后, 正常提交。
Note: Spike solutions are made to analyze or solve the problem. These solutions are used for estimation and discarded once everyone gets clear visualization of the problem. ~ [Wikipedia](https://en.wikipedia.org/wiki/Extreme_programming_practices). Note: Spike solutions are made to analyze or solve the problem. These solutions are used for estimation and discarded once everyone gets clear visualization of the problem. \~ [Wikipedia](https://en.wikipedia.org/wiki/Extreme_programming_practices).
### 我把几个提交(commit)提交到了同一个分支,而这些提交应该分布在不同的分支里 ### 我把几个提交(commit)提交到了同一个分支,而这些提交应该分布在不同的分支里
@ -608,7 +608,7 @@ Switched to a new branch 'daves'
(my-branch)$ git rebase -i master (my-branch)$ git rebase -i master
``` ```
如果没有相对的其它分支, 你将不得不相对自己的`HEAD` 进行 rebase。 例如:你想组合最近的两次提交(commit), 你将相对于`HEAD~2` 进行rebase 组合最近3次提交(commit), 相对于`HEAD~3`, 等等。 如果没有相对的其它分支, 你将不得不相对自己的`HEAD` 进行 rebase。 例如:你想组合最近的两次提交(commit), 你将相对于`HEAD\~2` 进行rebase 组合最近3次提交(commit), 相对于`HEAD\~3`, 等等。
```sh ```sh
(master)$ git rebase -i HEAD~2 (master)$ git rebase -i HEAD~2
@ -734,7 +734,7 @@ noop
这意味着你rebase的分支和当前分支在同一个提交(commit)上, 或者 *领先(ahead)* 当前分支。 你可以尝试: 这意味着你rebase的分支和当前分支在同一个提交(commit)上, 或者 *领先(ahead)* 当前分支。 你可以尝试:
* 检查确保主(master)分支没有问题 * 检查确保主(master)分支没有问题
* rebase `HEAD~2` 或者更早 * rebase `HEAD\~2` 或者更早
#### 有冲突的情况 #### 有冲突的情况
@ -846,7 +846,7 @@ $ git update-ref refs/tags/<tag_name> <hash>
### 我想给一些Git命令添加别名(alias) ### 我想给一些Git命令添加别名(alias)
在 OS X 和 Linux 下, 你的 Git的配置文件储存在 ```~/.gitconfig```。我在```[alias]``` 部分添加了一些快捷别名(和一些我容易拼写错误的),如下: 在 OS X 和 Linux 下, 你的 Git的配置文件储存在 ```\~/.gitconfig```。我在```[alias]``` 部分添加了一些快捷别名(和一些我容易拼写错误的),如下:
```vim ```vim
[alias] [alias]
@ -893,7 +893,7 @@ $ git config --global credential.helper 'cache --timeout=3600'
```sh ```sh
(master)$ git reflog (master)$ git reflog
0a2e358 HEAD@{0}: reset: moving to HEAD~2 0a2e358 HEAD@{0}: reset: moving to HEAD\~2
0254ea7 HEAD@{1}: checkout: moving from 2.2 to master 0254ea7 HEAD@{1}: checkout: moving from 2.2 to master
c10f740 HEAD@{2}: checkout: moving from master to 2.2 c10f740 HEAD@{2}: checkout: moving from master to 2.2
``` ```

View File

@ -2,19 +2,19 @@
## 配置 Git ## 配置 Git
Git 使用一系列配置文件来保存你自定义的行为。 它首先会查找 `/etc/gitconfig` 文件,该文件含有系统里每位用户及他们所拥有的仓库的配置值。 如果你传递 `--system` 选项给 `git config`,它就会读写该文件。 Git 使用一系列配置文件来保存你自定义的行为。 它首先会查找 `/etc/gitconfig` 文件,该文件含有系统里每位用户及他们所拥有的仓库的配置值。 如果你传递 `--system` 选项给 `git config`,它就会读写该文件。
接下来 Git 会查找每个用户的 `~/.gitconfig` 文件(或者 `~/.config/git/config` 文件)。 你可以传递 `--global` 选项让 Git 读写该文件。 接下来 Git 会查找每个用户的 `\~/.gitconfig` 文件(或者 `\~/.config/git/config` 文件)。 你可以传递 `--global` 选项让 Git 读写该文件。
最后 Git 会查找你正在操作的版本库所对应的 Git 目录下的配置文件(`.git/config`)。 这个文件中的值只对该版本库有效。 最后 Git 会查找你正在操作的版本库所对应的 Git 目录下的配置文件(`.git/config`)。 这个文件中的值只对该版本库有效。
以上三个层次中每层的配置(系统、全局、本地)都会覆盖掉上一层次的配置,所以 `.git/config` 中的值会覆盖掉 `/etc/gitconfig` 中所对应的值。 以上三个层次中每层的配置(系统、全局、本地)都会覆盖掉上一层次的配置,所以 `.git/config` 中的值会覆盖掉 `/etc/gitconfig` 中所对应的值。
## 客户端基本配置 ## 客户端基本配置
### `core.editor` ### `core.editor`
默认情况下Git 会调用环境变量(`$VISUAL` 或 `$EDITOR`)设置的任意文本编辑器,如果没有设置,会调用 `vi` 来创建和编辑你的提交以及标签信息。 你可以使用 `core.editor` 选项来修改默认的编辑器: 默认情况下Git 会调用环境变量(`$VISUAL``$EDITOR`)设置的任意文本编辑器,如果没有设置,会调用 `vi` 来创建和编辑你的提交以及标签信息。 你可以使用 `core.editor` 选项来修改默认的编辑器:
``` ```
$ git config --global core.editor emacs $ git config --global core.editor emacs
@ -24,7 +24,7 @@ $ git config --global core.editor emacs
### `commit.template` ### `commit.template`
如果把此项指定为你的系统上某个文件的路径,当你提交的时候, Git 会使用该文件的内容作为提交的默认信息。 例如:假设你创建了一个叫 `~/.gitmessage.txt` 的模板文件,类似这样: 如果把此项指定为你的系统上某个文件的路径,当你提交的时候, Git 会使用该文件的内容作为提交的默认信息。 例如:假设你创建了一个叫 `\~/.gitmessage.txt` 的模板文件,类似这样:
``` ```
subject line subject line
@ -34,7 +34,7 @@ what happened
[ticket: X] [ticket: X]
``` ```
要想让 Git 把它作为运行 `git commit` 时显示在你的编辑器中的默认信息, 如下设置 `commit.template` 要想让 Git 把它作为运行 `git commit` 时显示在你的编辑器中的默认信息, 如下设置 `commit.template`
``` ```
$ git config --global commit.template ~/.gitmessage.txt $ git config --global commit.template ~/.gitmessage.txt
@ -66,7 +66,7 @@ what happened
### `core.pager` ### `core.pager`
该配置项指定 Git 运行诸如 `log` 和 `diff` 等命令所使用的分页器。 你可以把它设置成用 `more` 或者任何你喜欢的分页器(默认用的是 `less`),当然也可以设置成空字符串,关闭该选项: 该配置项指定 Git 运行诸如 `log``diff` 等命令所使用的分页器。 你可以把它设置成用 `more` 或者任何你喜欢的分页器(默认用的是 `less`),当然也可以设置成空字符串,关闭该选项:
``` ```
$ git config --global core.pager '' $ git config --global core.pager ''
@ -76,13 +76,13 @@ $ git config --global core.pager ''
### `user.signingkey` ### `user.signingkey`
如果你要创建经签署的含附注的标签(正如 [签署工作](https://git-scm.com/book/zh/v2/ch00/r_signing) 所述),那么把你的 GPG 签署密钥设置为配置项会更好。 如下设置你的密钥 ID 如果你要创建经签署的含附注的标签(正如 [签署工作](https://git-scm.com/book/zh/v2/ch00/r_signing) 所述),那么把你的 GPG 签署密钥设置为配置项会更好。 如下设置你的密钥 ID
``` ```
$ git config --global user.signingkey <gpg-key-id> $ git config --global user.signingkey <gpg-key-id>
``` ```
现在,你每次运行 `git tag` 命令时,即可直接签署标签,而无需定义密钥: 现在,你每次运行 `git tag` 命令时,即可直接签署标签,而无需定义密钥:
``` ```
$ git tag -s <tag-name> $ git tag -s <tag-name>
@ -90,18 +90,18 @@ $ git tag -s <tag-name>
### `core.excludesfile` ### `core.excludesfile`
正如 [忽略文件](https://git-scm.com/book/zh/v2/ch00/r_ignoring) 所述,你可以在你的项目的 `.gitignore` 文件里面规定无需纳入 Git 管理的文件的模板,这样它们既不会出现在未跟踪列表,也不会在你运行 `git add` 后被暂存。 正如 [忽略文件](https://git-scm.com/book/zh/v2/ch00/r_ignoring) 所述,你可以在你的项目的 `.gitignore` 文件里面规定无需纳入 Git 管理的文件的模板,这样它们既不会出现在未跟踪列表,也不会在你运行 `git add` 后被暂存。
不过有些时候,你想要在你所有的版本库中忽略掉某一类文件。 如果你的操作系统是 OS X很可能就是指`.DS_Store`。 如果你把 Emacs 或 Vim 作为首选的编辑器,你肯定知道以 `~` 结尾的临时文件。 不过有些时候,你想要在你所有的版本库中忽略掉某一类文件。 如果你的操作系统是 OS X很可能就是指`.DS_Store`。 如果你把 Emacs 或 Vim 作为首选的编辑器,你肯定知道以 `\~` 结尾的临时文件。
这个配置允许你设置类似于全局生效的 `.gitignore` 文件。 如果你按照下面的内容创建一个`~/.gitignore_global` 文件: 这个配置允许你设置类似于全局生效的 `.gitignore` 文件。 如果你按照下面的内容创建一个`\~/.gitignore_global` 文件:
``` ```
*~ *~
.DS_Store .DS_Store
``` ```
……然后运行 `git config --global core.excludesfile ~/.gitignore_global`Git 将把那些文件永远地拒之门外。 ……然后运行 `git config --global core.excludesfile \~/.gitignore_global`Git 将把那些文件永远地拒之门外。
### `help.autocorrect` ### `help.autocorrect`
@ -115,7 +115,7 @@ git'chekcout' 不是一个 git 命令。参见 'git --help'。
checkout checkout
``` ```
Git 会尝试猜测你的意图,但是它不会越俎代庖。 如果你把 `help.autocorrect` 设置成 1那么只要有一个命令被模糊匹配到了Git 会自动运行该命令。 Git 会尝试猜测你的意图,但是它不会越俎代庖。 如果你把 `help.autocorrect` 设置成 1那么只要有一个命令被模糊匹配到了Git 会自动运行该命令。
``` ```
$ git chekcout master $ git chekcout master
@ -124,7 +124,7 @@ $ git chekcout master
在 0.1 秒钟后自动运行... 在 0.1 秒钟后自动运行...
``` ```
注意提示信息中的“0.1 秒”。`help.autocorrect` 接受一个代表十分之一秒的整数。 所以如果你把它设置为 50, Git 将在自动执行命令前给你 5 秒的时间改变主意。 注意提示信息中的“0.1 秒”。`help.autocorrect` 接受一个代表十分之一秒的整数。 所以如果你把它设置为 50, Git 将在自动执行命令前给你 5 秒的时间改变主意。
## 格式化与多余的空白字符 ## 格式化与多余的空白字符
@ -134,13 +134,13 @@ $ git chekcout master
假如你正在 Windows 上写程序,而你的同伴用的是其他系统(或相反),你可能会遇到 CRLF 问题。 这是因为 Windows 使用回车CR和换行LF两个字符来结束一行而 Mac 和 Linux 只使用换行LF一个字符。 虽然这是小问题,但它会极大地扰乱跨平台协作。许多 Windows 上的编辑器会悄悄把行尾的换行字符转换成回车和换行,或在用户按下 Enter 键时,插入回车和换行两个字符。 假如你正在 Windows 上写程序,而你的同伴用的是其他系统(或相反),你可能会遇到 CRLF 问题。 这是因为 Windows 使用回车CR和换行LF两个字符来结束一行而 Mac 和 Linux 只使用换行LF一个字符。 虽然这是小问题,但它会极大地扰乱跨平台协作。许多 Windows 上的编辑器会悄悄把行尾的换行字符转换成回车和换行,或在用户按下 Enter 键时,插入回车和换行两个字符。
Git 可以在你提交时自动地把回车和换行转换成换行,而在检出代码时把换行转换成回车和换行。 你可以用 `core.autocrlf` 来打开此项功能。 如果是在 Windows 系统上,把它设置成 `true`,这样在检出代码时,换行会被转换成回车和换行: Git 可以在你提交时自动地把回车和换行转换成换行,而在检出代码时把换行转换成回车和换行。 你可以用 `core.autocrlf` 来打开此项功能。 如果是在 Windows 系统上,把它设置成 `true`,这样在检出代码时,换行会被转换成回车和换行:
``` ```
$ git config --global core.autocrlf true $ git config --global core.autocrlf true
``` ```
如果使用以换行作为行结束符的 Linux 或 Mac你不需要 Git 在检出文件时进行自动的转换;然而当一个以回车加换行作为行结束符的文件不小心被引入时,你肯定想让 Git 修正。 你可以把 `core.autocrlf` 设置成 input 来告诉 Git 在提交时把回车和换行转换成换行,检出时不转换: 如果使用以换行作为行结束符的 Linux 或 Mac你不需要 Git 在检出文件时进行自动的转换;然而当一个以回车加换行作为行结束符的文件不小心被引入时,你肯定想让 Git 修正。 你可以把 `core.autocrlf` 设置成 input 来告诉 Git 在提交时把回车和换行转换成换行,检出时不转换:
``` ```
$ git config --global core.autocrlf input $ git config --global core.autocrlf input
@ -148,7 +148,7 @@ $ git config --global core.autocrlf input
这样在 Windows 上的检出文件中会保留回车和换行,而在 Mac 和 Linux 上,以及版本库中会保留换行。 这样在 Windows 上的检出文件中会保留回车和换行,而在 Mac 和 Linux 上,以及版本库中会保留换行。
如果你是 Windows 程序员,且正在开发仅运行在 Windows 上的项目,可以设置 `false` 取消此功能,把回车保留在版本库中: 如果你是 Windows 程序员,且正在开发仅运行在 Windows 上的项目,可以设置 `false` 取消此功能,把回车保留在版本库中:
``` ```
$ git config --global core.autocrlf false $ git config --global core.autocrlf false
@ -160,16 +160,16 @@ Git 预先设置了一些选项来探测和修正多余空白字符问题。 它
默认被打开的三个选项是:`blank-at-eol`,查找行尾的空格;`blank-at-eof`,盯住文件底部的空行;`space-before-tab`,警惕行头 tab 前面的空格。 默认被打开的三个选项是:`blank-at-eol`,查找行尾的空格;`blank-at-eof`,盯住文件底部的空行;`space-before-tab`,警惕行头 tab 前面的空格。
默认被关闭的三个选项是:`indent-with-non-tab`,揪出以空格而非 tab 开头的行(你可以用 `tabwidth`选项控制它);`tab-in-indent`,监视在行头表示缩进的 tab`cr-at-eol`,告诉 Git 忽略行尾的回车。 默认被关闭的三个选项是:`indent-with-non-tab`,揪出以空格而非 tab 开头的行(你可以用 `tabwidth`选项控制它);`tab-in-indent`,监视在行头表示缩进的 tab`cr-at-eol`,告诉 Git 忽略行尾的回车。
通过设置 `core.whitespace`,你可以让 Git 按照你的意图来打开或关闭以逗号分割的选项。 要想关闭某个选项,你可以在输入设置选项时不指定它或在它前面加个 `-`。 例如,如果你想要打开除 `cr-at-eol` 之外的所有选项: 通过设置 `core.whitespace`,你可以让 Git 按照你的意图来打开或关闭以逗号分割的选项。 要想关闭某个选项,你可以在输入设置选项时不指定它或在它前面加个 `-`。 例如,如果你想要打开除 `cr-at-eol` 之外的所有选项:
``` ```
$ git config --global core.whitespace \ $ git config --global core.whitespace \
trailing-space,space-before-tab,indent-with-non-tab trailing-space,space-before-tab,indent-with-non-tab
``` ```
当你运行 `git diff` 命令并尝试给输出着色时Git 将探测到这些问题,因此你在提交前就能修复它们。 用`git apply` 打补丁时你也会从中受益。 如果正准备应用的补丁存有特定的空白问题,你可以让 Git 在应用补丁时发出警告: 当你运行 `git diff` 命令并尝试给输出着色时Git 将探测到这些问题,因此你在提交前就能修复它们。 用`git apply` 打补丁时你也会从中受益。 如果正准备应用的补丁存有特定的空白问题,你可以让 Git 在应用补丁时发出警告:
``` ```
$ git apply --whitespace=warn <patch> $ git apply --whitespace=warn <patch>
@ -181,7 +181,7 @@ $ git apply --whitespace=warn <patch>
$ git apply --whitespace=fix <patch> $ git apply --whitespace=fix <patch>
``` ```
这些选项也能运用于 `git rebase`。 如果提交了有空白问题的文件,但还没推送到上游,你可以运行 `git rebase --whitespace=fix` 来让 Git 在重写补丁时自动修正它们。 这些选项也能运用于 `git rebase`。 如果提交了有空白问题的文件,但还没推送到上游,你可以运行 `git rebase --whitespace=fix` 来让 Git 在重写补丁时自动修正它们。
## 服务器端配置 ## 服务器端配置
@ -189,7 +189,7 @@ Git 服务器端的配置项相对来说并不多,但仍有一些饶有生趣
### `receive.fsckObjects` ### `receive.fsckObjects`
Git 能够确认每个对象的有效性以及 SHA-1 检验和是否保持一致。 但 Git 不会在每次推送时都这么做。这个操作很耗时间,很有可能会拖慢提交的过程,特别是当库或推送的文件很大的情况下。 如果想在每次推送时都要求 Git 检查一致性,设置 `receive.fsckObjects` 为 true 来强迫它这么做: Git 能够确认每个对象的有效性以及 SHA-1 检验和是否保持一致。 但 Git 不会在每次推送时都这么做。这个操作很耗时间,很有可能会拖慢提交的过程,特别是当库或推送的文件很大的情况下。 如果想在每次推送时都要求 Git 检查一致性,设置 `receive.fsckObjects` 为 true 来强迫它这么做:
``` ```
$ git config --system receive.fsckObjects true $ git config --system receive.fsckObjects true
@ -199,9 +199,9 @@ $ git config --system receive.fsckObjects true
### `receive.denyNonFastForwards` ### `receive.denyNonFastForwards`
如果你变基已经被推送的提交,继而再推送,又或者推送一个提交到远程分支,而这个远程分支当前指向的提交不在该提交的历史中,这样的推送会被拒绝。 这通常是个很好的策略,但有时在变基的过程中,你确信自己需要更新远程分支,可以在 push 命令后加 `-f` 标志来强制更新force-update 如果你变基已经被推送的提交,继而再推送,又或者推送一个提交到远程分支,而这个远程分支当前指向的提交不在该提交的历史中,这样的推送会被拒绝。 这通常是个很好的策略,但有时在变基的过程中,你确信自己需要更新远程分支,可以在 push 命令后加 `-f` 标志来强制更新force-update
要禁用这样的强制更新推送force-pushes可以设置 `receive.denyNonFastForwards` 要禁用这样的强制更新推送force-pushes可以设置 `receive.denyNonFastForwards`
``` ```
$ git config --system receive.denyNonFastForwards true $ git config --system receive.denyNonFastForwards true
@ -211,10 +211,10 @@ $ git config --system receive.denyNonFastForwards true
### `receive.denyDeletes` ### `receive.denyDeletes`
有一些方法可以绕过 `denyNonFastForwards` 策略。其中一种是先删除某个分支,再连同新的引用一起推送回该分支。 把 `receive.denyDeletes` 设置为 true 可以把这个漏洞补上: 有一些方法可以绕过 `denyNonFastForwards` 策略。其中一种是先删除某个分支,再连同新的引用一起推送回该分支。 把 `receive.denyDeletes` 设置为 true 可以把这个漏洞补上:
``` ```
$ git config --system receive.denyDeletes true $ git config --system receive.denyDeletes true
``` ```
这样会禁止通过推送删除分支和标签 — 没有用户可以这么做。 要删除远程分支,必须从服务器手动删除引用文件。 通过用户访问控制列表ACL也能够在用户级的粒度上实现同样的功能你将在 [使用强制策略的一个例子](https://git-scm.com/book/zh/v2/ch00/r_an_example_git_enforced_policy) 一节学到具体的做法。 这样会禁止通过推送删除分支和标签 — 没有用户可以这么做。 要删除远程分支,必须从服务器手动删除引用文件。 通过用户访问控制列表ACL也能够在用户级的粒度上实现同样的功能你将在 [使用强制策略的一个例子](https://git-scm.com/book/zh/v2/ch00/r_an_example_git_enforced_policy) 一节学到具体的做法。

View File

@ -27,11 +27,11 @@ Git 是一个开源的分布式版本控制系统。
这么做最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录。 这么做最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录。
![img](https://git-scm.com/figures/18333fig0102-tn.png) <br><div align="center"><img src="https://git-scm.com/figures/18333fig0102-tn.png"/></div><br>
**分布式版本控制系统**的客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。 **分布式版本控制系统**的客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
![img](https://git-scm.com/figures/18333fig0103-tn.png) <br><div align="center"><img src="https://git-scm.com/figures/18333fig0103-tn.png"/></div><br>
### 为什么使用 Git ### 为什么使用 Git
@ -79,7 +79,7 @@ Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值
- **已提交committed** - **已提交committed**
已提交表示数据已经安全的保存在本地数据库中。  已提交表示数据已经安全的保存在本地数据库中。
### 工作区域 ### 工作区域
@ -107,7 +107,7 @@ Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值
同理,如果你想同步别人的修改,你需要从远程仓库拉取更新。 同理,如果你想同步别人的修改,你需要从远程仓库拉取更新。
![git-theory.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-theory.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-theory.png"/></div><br>
## 安装 ## 安装
@ -149,15 +149,15 @@ git version 1.7.1
## 配置 ## 配置
Git 自带一个 `git config` 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置: Git 自带一个 `git config` 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
1. `/etc/gitconfig` 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 `--system` 选项的 `git config` 时,它会从此文件读写配置变量。 1. `/etc/gitconfig` 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 `--system` 选项的 `git config` 时,它会从此文件读写配置变量。
2. `~/.gitconfig` 或 `~/.config/git/config` 文件:只针对当前用户。 可以传递 `--global` 选项让 Git 读写此文件。 2. `\~/.gitconfig` 或 `\~/.config/git/config` 文件:只针对当前用户。 可以传递 `--global` 选项让 Git 读写此文件。
3. 当前使用仓库的 Git 目录中的 `config` 文件(就是 `.git/config`):针对该仓库。 3. 当前使用仓库的 Git 目录中的 `config` 文件(就是 `.git/config`):针对该仓库。
每一个级别覆盖上一级别的配置,所以 `.git/config` 的配置变量会覆盖 `/etc/gitconfig` 中的配置变量。 每一个级别覆盖上一级别的配置,所以 `.git/config` 的配置变量会覆盖 `/etc/gitconfig` 中的配置变量。
在 Windows 系统中Git 会查找 `$HOME` 目录下(一般情况下是 `C:\Users\$USER`)的 `.gitconfig` 文件。 Git 同样也会寻找 `/etc/gitconfig` 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。 在 Windows 系统中Git 会查找 `$HOME` 目录下(一般情况下是 `C:\Users\$USER`)的 `.gitconfig` 文件。 Git 同样也会寻找 `/etc/gitconfig` 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。
### 用户信息 ### 用户信息
@ -168,7 +168,7 @@ $ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com $ git config --global user.email johndoe@example.com
``` ```
再次强调,如果使用了 `--global` 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 `--global` 选项的命令来配置。 再次强调,如果使用了 `--global` 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 `--global` 选项的命令来配置。
很多 GUI 工具都会在第一次运行时帮助你配置这些信息。 很多 GUI 工具都会在第一次运行时帮助你配置这些信息。
@ -190,7 +190,7 @@ $ git config --global user.email johndoe@example.com
本节选择性介绍 git 中比较常用的命令行场景。 本节选择性介绍 git 中比较常用的命令行场景。
![git-cheat-sheet.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-cheat-sheet.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-cheat-sheet.png"/></div><br>
### 创建 ### 创建
@ -458,13 +458,13 @@ HTTPS 这种方式要求你每次 push 时都要输入用户名、密码,有
而 SSH 要求你本地生成证书,然后在你的 Github 账户中注册。第一次配置麻烦是麻烦了点,但是以后就免去了每次 push 需要输入用户名、密码的繁琐。 而 SSH 要求你本地生成证书,然后在你的 Github 账户中注册。第一次配置麻烦是麻烦了点,但是以后就免去了每次 push 需要输入用户名、密码的繁琐。
![image.png](http://upload-images.jianshu.io/upload_images/3101171-66f60822aeb2c21c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-66f60822aeb2c21c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div><br>
以下介绍以下,如何生成证书,以及在 Github 中注册。 以下介绍以下,如何生成证书,以及在 Github 中注册。
#### 生成 SSH 公钥 #### 生成 SSH 公钥
如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 `~/.ssh` 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥: 如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 `\~/.ssh` 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥:
``` ```
$ cd ~/.ssh $ cd ~/.ssh
@ -473,7 +473,7 @@ authorized_keys2 id_dsa known_hosts
config id_dsa.pub config id_dsa.pub
``` ```
我们需要寻找一对以 `id_dsa` 或 `id_rsa` 命名的文件,其中一个带有 `.pub` 扩展名。 `.pub` 文件是你的公钥,另一个则是私钥。 如果找不到这样的文件(或者根本没有 `.ssh` 目录),你可以通过运行 `ssh-keygen` 程序来创建它们。在 Linux/Mac 系统中,`ssh-keygen` 随 SSH 软件包提供;在 Windows 上,该程序包含于 MSysGit 软件包中。 我们需要寻找一对以 `id_dsa``id_rsa` 命名的文件,其中一个带有 `.pub` 扩展名。 `.pub` 文件是你的公钥,另一个则是私钥。 如果找不到这样的文件(或者根本没有 `.ssh` 目录),你可以通过运行 `ssh-keygen` 程序来创建它们。在 Linux/Mac 系统中,`ssh-keygen` 随 SSH 软件包提供;在 Windows 上,该程序包含于 MSysGit 软件包中。
``` ```
$ ssh-keygen $ ssh-keygen
@ -488,9 +488,9 @@ The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local
``` ```
首先 `ssh-keygen` 会确认密钥的存储位置(默认是 `.ssh/id_rsa`),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。 首先 `ssh-keygen` 会确认密钥的存储位置(默认是 `.ssh/id_rsa`),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。
现在,进行了上述操作的用户需要将各自的公钥发送给任意一个 Git 服务器管理员(假设服务器正在使用基于公钥的 SSH 验证设置)。 他们所要做的就是复制各自的 `.pub` 文件内容,并将其通过邮件发送。 公钥看起来是这样的: 现在,进行了上述操作的用户需要将各自的公钥发送给任意一个 Git 服务器管理员(假设服务器正在使用基于公钥的 SSH 验证设置)。 他们所要做的就是复制各自的 `.pub` 文件内容,并将其通过邮件发送。 公钥看起来是这样的:
``` ```
$ cat ~/.ssh/id_rsa.pub $ cat ~/.ssh/id_rsa.pub
@ -508,7 +508,7 @@ NrRFi9wrf+M7Q== schacon@mylaptop.local
后面,你在克隆你的 Github 项目时使用 SSH 方式即可。 后面,你在克隆你的 Github 项目时使用 SSH 方式即可。
![The key field](https://help.github.chttps://raw.githubusercontent.com/dunwu/design/master/images/refactor/help/settings/ssh-key-paste.png) <br><div align="center"><img src="https://help.github.chttps://raw.githubusercontent.com/dunwu/design/master/images/refactor/help/settings/ssh-key-paste.png"/></div><br>
如果觉得我的讲解还不够细致可以参考https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/ 如果觉得我的讲解还不够细致可以参考https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
@ -516,7 +516,7 @@ NrRFi9wrf+M7Q== schacon@mylaptop.local
最后,放一张我总结的脑图总结一下以上的知识点。 最后,放一张我总结的脑图总结一下以上的知识点。
![Git.png](http://upload-images.jianshu.io/upload_images/3101171-2044cc669d78eef9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-2044cc669d78eef9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div><br>
## 资料 ## 资料

View File

@ -177,7 +177,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
> >
> \> 如果你认为单词是由 blank 字符分隔符,那么你需要使用大写的 E 和 W。程序语句 > \> 如果你认为单词是由 blank 字符分隔符,那么你需要使用大写的 E 和 W。程序语句
> >
> ![Word moves example](http://upload-images.jianshu.io/upload_images/3101171-46f752c581d79057.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-46f752c581d79057.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div><br>
下面,让我来说说最强的光标移动: 下面,让我来说说最强的光标移动:
@ -226,7 +226,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
> - `t,` → 到逗号前的第一个字符。逗号可以变成其它字符。 > - `t,` → 到逗号前的第一个字符。逗号可以变成其它字符。
> - `3fa` → 在当前行查找第三个出现的 a。 > - `3fa` → 在当前行查找第三个出现的 a。
> - `F``T` → 和 `f``t` 一样,只不过是相反方向。 > - `F``T` → 和 `f``t` 一样,只不过是相反方向。
> ![Line moves](http://upload-images.jianshu.io/upload_images/3101171-00835b8316330c58.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-00835b8316330c58.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div><br>
还有一个很有用的命令是 `dt"` → 删除所有的内容,直到遇到双引号—— `"。` 还有一个很有用的命令是 `dt"` → 删除所有的内容,直到遇到双引号—— `"。`
@ -248,7 +248,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
> - `v2i)` → 会选择 `map (+) ("foo")` > - `v2i)` → 会选择 `map (+) ("foo")`
> - `v2a)` → 会选择 `(map (+) ("foo"))` > - `v2a)` → 会选择 `(map (+) ("foo"))`
![Text objects selection](http://upload-images.jianshu.io/upload_images/3101171-0b109d66a6111c83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-0b109d66a6111c83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div><br>
#### 块操作: `<C-v>` #### 块操作: `<C-v>`
@ -259,7 +259,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
- `<C-d>` → 向下移动 (你也可以使用 hjkl 来移动光标,或是使用%,或是别的) - `<C-d>` → 向下移动 (你也可以使用 hjkl 来移动光标,或是使用%,或是别的)
- `I-- [ESC]` → I 是插入,插入“`--`”,按 ESC 键来为每一行生效。 - `I-- [ESC]` → I 是插入,插入“`--`”,按 ESC 键来为每一行生效。
![Rectangular blocks](http://upload-images.jianshu.io/upload_images/3101171-8b093a0f65707949.gif?imageMogr2/auto-orient/strip) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-8b093a0f65707949.gif?imageMogr2/auto-orient/strip"/></div><br>
在 Windows 下的 vim你需要使用 `<C-q>` 而不是 `<C-v>` `<C-v>` 是拷贝剪贴板。 在 Windows 下的 vim你需要使用 `<C-q>` 而不是 `<C-v>` `<C-v>` 是拷贝剪贴板。
@ -267,7 +267,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
在 Insert 模式下,你可以输入一个词的开头,然后按 `<C-p>或是<C-n>,自动补齐功能就出现了……` 在 Insert 模式下,你可以输入一个词的开头,然后按 `<C-p>或是<C-n>,自动补齐功能就出现了……`
``![Completion](http://upload-images.jianshu.io/upload_images/3101171-e2ae877e67880ff7.gif?imageMogr2/auto-orient/strip) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-e2ae877e67880ff7.gif?imageMogr2/auto-orient/strip"/></div><br>
#### 宏录制: `qa` 操作序列 `q`, `@a`, `@@` #### 宏录制: `qa` 操作序列 `q`, `@a`, `@@`
@ -296,7 +296,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
> >
> - 现在做 `100@@` 会创建新的 100 行,并把数据增加到 103. > - 现在做 `100@@` 会创建新的 100 行,并把数据增加到 103.
![Macros](http://upload-images.jianshu.io/upload_images/3101171-f1889f8bca723964.gif?imageMogr2/auto-orient/strip) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-f1889f8bca723964.gif?imageMogr2/auto-orient/strip"/></div><br>
#### 可视化选择: `v`,`V`,`<C-v>` #### 可视化选择: `v`,`V`,`<C-v>`
@ -306,7 +306,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
- `<``>` → 左右缩进 - `<``>` → 左右缩进
- `=` → 自动给缩进 (注:这个功能相当强大,我太喜欢了) - `=` → 自动给缩进 (注:这个功能相当强大,我太喜欢了)
![Autoindent](http://upload-images.jianshu.io/upload_images/3101171-fe1e19983fca213f.gif?imageMogr2/auto-orient/strip) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-fe1e19983fca213f.gif?imageMogr2/auto-orient/strip"/></div><br>
在所有被选择的行后加上点东西: 在所有被选择的行后加上点东西:
@ -315,7 +315,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
- `$` 到行最后 - `$` 到行最后
- `A`, 输入字符串,按 `ESC。` - `A`, 输入字符串,按 `ESC。`
![Append to many lines](http://upload-images.jianshu.io/upload_images/3101171-b192601247334c4e.gif?imageMogr2/auto-orient/strip) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-b192601247334c4e.gif?imageMogr2/auto-orient/strip"/></div><br>
#### 分屏: `:split``vsplit`. #### 分屏: `:split``vsplit`.
@ -326,7 +326,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
> - `<C-w>_` (或 `<C-w>|`) : 最大化尺寸 (<C-w>| 垂直分屏) > - `<C-w>_` (或 `<C-w>|`) : 最大化尺寸 (<C-w>| 垂直分屏)
> - `<C-w>+` (或 `<C-w>-`) : 增加尺寸 > - `<C-w>+` (或 `<C-w>-`) : 增加尺寸
![Split](http://upload-images.jianshu.io/upload_images/3101171-f329d01e299cb366.gif?imageMogr2/auto-orient/strip) <br><div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-f329d01e299cb366.gif?imageMogr2/auto-orient/strip"/></div><br>
## 3. Vim Cheat Sheet ## 3. Vim Cheat Sheet
@ -338,33 +338,33 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错
此外,[这里](http://blog.ngedit.com/vi-vim-cheat-sheet-sch.gif)还有简体中文版。 此外,[这里](http://blog.ngedit.com/vi-vim-cheat-sheet-sch.gif)还有简体中文版。
![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet.png"/></div><br>
### 3.2. 入门版 ### 3.2. 入门版
基本操作的入门版。[原版出处](https://github.com/ahrencode/Miscellaneous)还有 keynote 版本可供 DIY 以及其他相关有用的 cheatsheet。 基本操作的入门版。[原版出处](https://github.com/ahrencode/Miscellaneous)还有 keynote 版本可供 DIY 以及其他相关有用的 cheatsheet。
![](http://dunwu.test.upcdn.net/images/os/vim/basic-vim-cheat-sheet.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/vim/basic-vim-cheat-sheet.png"/></div><br>
### 3.3. 进阶版 ### 3.3. 进阶版
下图是 300DPI 的超清大图,另外[查看原文](http://michael.peopleofhonoronly.com/vim/)还有更多版本:黑白,低分辨率,色盲等 下图是 300DPI 的超清大图,另外[查看原文](http://michael.peopleofhonoronly.com/vim/)还有更多版本:黑白,低分辨率,色盲等
![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-for-programmers.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-for-programmers.png"/></div><br>
### 3.4. 增强版 ### 3.4. 增强版
下图是一个更新时间较新的现代版,含有的信息也更丰富。[原文链接](http://vimcheatsheet.com/) 下图是一个更新时间较新的现代版,含有的信息也更丰富。[原文链接](http://vimcheatsheet.com/)
![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-02.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-02.png"/></div><br>
### 3.5. 文字版 ### 3.5. 文字版
[原文链接](http://tnerual.eriogerg.free.fr/vimqrc.pdf) [原文链接](http://tnerual.eriogerg.free.fr/vimqrc.pdf)
![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-text-01.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-text-01.png"/></div><br>
![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-text-02.png) <br><div align="center"><img src="http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-text-02.png"/></div><br>
## 4. 资料 ## 4. 资料

View File

@ -29,22 +29,22 @@
> [Everything](http://www.voidtools.com/) 可以立即在 windows 系统中找到制定名称的文件和文件夹。 > [Everything](http://www.voidtools.com/) 可以立即在 windows 系统中找到制定名称的文件和文件夹。
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180930174548.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920180930174548.png"/></div><br>
### 1.3. Wox ### 1.3. Wox
> [Wox](https://github.com/Wox-launcher/Wox) 是一款简单易用的 Windows 启动器。可以把它视为 windows 版的 Alfred。 > [Wox](https://github.com/Wox-launcher/Wox) 是一款简单易用的 Windows 启动器。可以把它视为 windows 版的 Alfred。
![](https://camo.githubusercontent.com/9db33546d3a905a9ad915e0948d3ba3f47f57b64/687474703a2f2f692e696d6775722e636f6d2f4474784e424a692e676966) <br><div align="center"><img src="https://camo.githubusercontent.com/9db33546d3a905a9ad915e0948d3ba3f47f57b64/687474703a2f2f692e696d6775722e636f6d2f4474784e424a692e676966"/></div><br>
### 1.4. Q-dir ### 1.4. Q-dir
> [Q-dir](http://www.softpedia.com/get/File-managers/Q-Dir.shtml) 是轻量的文件管理器,特点鲜明,各种布局视图切换灵活,默认四个小窗口组成一个大窗口,操作快捷。 > [Q-dir](http://www.softpedia.com/get/File-managers/Q-Dir.shtml) 是轻量的文件管理器,特点鲜明,各种布局视图切换灵活,默认四个小窗口组成一个大窗口,操作快捷。
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180930174437.png) <br><div align="center"><img src="http://oyz7npk35.bkt.clouddn.com/images/20180920180930174437.png"/></div><br>
### 1.5. Fences ### 1.5. Fences
> [Fences](https://www.stardock.com/products/fences/) 也被称为栅栏桌面,是著名的 Stardock 公司推出的一款软件,用来分类和组织桌面上的图标一款软件。 > [Fences](https://www.stardock.com/products/fences/) 也被称为栅栏桌面,是著名的 Stardock 公司推出的一款软件,用来分类和组织桌面上的图标一款软件。
![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1538311775699&di=70a9d04f067844d1881031761b6ca67c&imgtype=0&src=http%3A%2F%2Fgss0.baidu.com%2F-vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2F962bd40735fae6cd16fbebdb0eb30f2442a70f38.jpg) <br><div align="center"><img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1538311775699&di=70a9d04f067844d1881031761b6ca67c&imgtype=0&src=http%3A%2F%2Fgss0.baidu.com%2F-vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2F962bd40735fae6cd16fbebdb0eb30f2442a70f38.jpg"/></div><br>