diff --git a/docs/docker/advanced/docker-design.md b/docs/docker/advanced/docker-design.md index 88cad43..47148d5 100644 --- a/docs/docker/advanced/docker-design.md +++ b/docs/docker/advanced/docker-design.md @@ -24,7 +24,7 @@ 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) +

### Docker 守护进程(docker daemon) diff --git a/docs/docker/appendix/docker-recipe.md b/docs/docker/appendix/docker-recipe.md index 80af699..b5cc8cb 100644 --- a/docs/docker/appendix/docker-recipe.md +++ b/docs/docker/appendix/docker-recipe.md @@ -20,4 +20,4 @@ docker rm $(docker ps -a -q) ``` docker rmi $(docker images -q) -``` \ No newline at end of file +``` diff --git a/docs/docker/basics/docker-helloworld.md b/docs/docker/basics/docker-helloworld.md index 1c034cd..47134f7 100644 --- a/docs/docker/basics/docker-helloworld.md +++ b/docs/docker/basics/docker-helloworld.md @@ -68,4 +68,4 @@ CONTAINER ID IMAGE COMMAND CREATED a661d957c6fa hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago mystifying_swartz 3098f24a1064 docker.io/hello-world "/hello" 6 minutes ago Exited (0) 6 minutes ago sad_yonath 4c98c4f18a39 hello-world "/hello" 8 minutes ago Exited (0) 8 minutes ago admiring_banach -``` \ No newline at end of file +``` diff --git a/docs/docker/basics/docker-services.md b/docs/docker/basics/docker-services.md index 036a0fe..392d326 100644 --- a/docs/docker/basics/docker-services.md +++ b/docs/docker/basics/docker-services.md @@ -33,4 +33,4 @@ services: - webnet networks: webnet: -``` \ No newline at end of file +``` diff --git a/docs/docker/docker-introduction.md b/docs/docker/docker-introduction.md index 0ba12de..aeaf3d5 100644 --- a/docs/docker/docker-introduction.md +++ b/docs/docker/docker-introduction.md @@ -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) +

CLI 使用 Docker REST API 通过脚本或直接 CLI 命令来控制 Docker 守护进程或与其进行交互。许多其他 Docker 应用程序使用底层的 API 和 CLI。 @@ -40,7 +40,7 @@ CLI 使用 Docker REST API 通过脚本或直接 CLI 命令来控制 Docker 守 ### 传统虚拟机和 Docker -![](http://dunwu.test.upcdn.net/images/os/docker/containers-and-vm.png) +

## 概念 diff --git a/docs/docker/docker.md b/docs/docker/docker.md index a115151..6ec7a3b 100644 --- a/docs/docker/docker.md +++ b/docs/docker/docker.md @@ -6,7 +6,7 @@ > > Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。 -![](http://dunwu.test.upcdn.net/images/os/docker/containers-and-vm.png) +

## [入门篇](docker-quickstart.md) diff --git a/docs/kubernetes/kubernetes.md b/docs/kubernetes/kubernetes.md index 283fcb2..d0fddb8 100644 --- a/docs/kubernetes/kubernetes.md +++ b/docs/kubernetes/kubernetes.md @@ -44,7 +44,7 @@ Kubernetes 包含若干抽象用来表示系统状态,包括:已部署的容 - Volume - Namespace -![](http://dunwu.test.upcdn.net/images/os/kubernetes/pod.svg) +

高级对象 diff --git a/docs/linux/cli/02.Linux文件目录管理.md b/docs/linux/cli/02.Linux文件目录管理.md index 78ad1f6..8a57fcb 100644 --- a/docs/linux/cli/02.Linux文件目录管理.md +++ b/docs/linux/cli/02.Linux文件目录管理.md @@ -50,7 +50,7 @@ tags: linux 目录结构是树形结构,其根目录是 `/` 。一张思维导图说明各个目录的作用: -![](http://dunwu.test.upcdn.net/images/linux/linux-folders.png) +

### Linux 文件属性 @@ -77,7 +77,7 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot 每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。 -![](http://oyz7npk35.bkt.clouddn.com/images/20180920180927171909.png) +

从左至右用 0-9 这些数字来表示。 @@ -466,7 +466,7 @@ scp -r test root@192.168.0.1:/opt 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 # 服务器 A 上执行以下命令 diff --git a/docs/linux/cli/06.Linux系统管理.md b/docs/linux/cli/06.Linux系统管理.md index b1284b4..e995301 100644 --- a/docs/linux/cli/06.Linux系统管理.md +++ b/docs/linux/cli/06.Linux系统管理.md @@ -290,30 +290,30 @@ kill 3268 ```sh # 1.启动 nfs 服务 -systemctl start nfs-server.service +systemctl start nfs-server.service # 2.设置开机自启动 -systemctl enable nfs-server.service +systemctl enable nfs-server.service # 3.停止开机自启动 -systemctl disable nfs-server.service +systemctl disable nfs-server.service # 4.查看服务当前状态 -systemctl status nfs-server.service +systemctl status nfs-server.service # 5.重新启动某服务 -systemctl restart nfs-server.service +systemctl restart nfs-server.service # 6.查看所有已启动的服务 -systemctl list -units --type=service +systemctl list -units --type=service # 7. 开启防火墙 22 端口 -iptables -I INPUT -p tcp --dport 22 -j accept +iptables -I INPUT -p tcp --dport 22 -j accept # 8. 彻底关闭防火墙 -sudo systemctl status firewalld.service -sudo systemctl stop firewalld.service -sudo systemctl disable firewalld.service +sudo systemctl status firewalld.service +sudo systemctl stop firewalld.service +sudo systemctl disable firewalld.service ``` ### service @@ -366,16 +366,16 @@ service network restart # 每晚的 21:30 重启 smb 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 # 每周六、周日的 1:10 重启 smb 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 -# 每星期六的晚上 11:00 pm 重启 smb +# 每星期六的晚上 11:00 pm 重启 smb 0 23 * * 6 /etc/init.d/smb restart # 每一小时重启 smb diff --git a/docs/linux/cli/07.Linux网络管理.md b/docs/linux/cli/07.Linux网络管理.md index fd8f58b..f457e63 100644 --- a/docs/linux/cli/07.Linux网络管理.md +++ b/docs/linux/cli/07.Linux网络管理.md @@ -190,13 +190,13 @@ lo Link encap:Local Loopback # 查看当前路由 route Kernel IP routing table -Destination     Gateway         Genmask         Flags Metric Ref    Use Iface -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 -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 -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 +Destination Gateway Genmask Flags Metric Ref Use Iface +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 +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 +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 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 # 屏蔽一条路由 diff --git a/docs/linux/cli/命令行的艺术.md b/docs/linux/cli/命令行的艺术.md index db85717..0967de3 100644 --- a/docs/linux/cli/命令行的艺术.md +++ b/docs/linux/cli/命令行的艺术.md @@ -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) +

- [前言](#前言) - [基础](#基础) @@ -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) +

熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。 @@ -88,7 +88,7 @@ - 键入 `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 -`。 @@ -117,9 +117,9 @@ - 使用 `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。 @@ -164,7 +164,7 @@ - ssh 中,了解如何使用 `-L` 或 `-D`(偶尔需要用 `-R`)开启隧道是非常有用的,比如当你需要从一台远程服务器上访问 web 页面。 -- 对 ssh 设置做一些小优化可能是很有用的,例如这个 `~/.ssh/config` 文件包含了防止特定网络环境下连接断开、压缩数据、多通道等选项: +- 对 ssh 设置做一些小优化可能是很有用的,例如这个 `\~/.ssh/config` 文件包含了防止特定网络环境下连接断开、压缩数据、多通道等选项: ``` TCPKeepAlive=yes 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 *`,更节省时间。 -- 查找正在使用带宽的套接字连接或进程,使用 [`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`。 @@ -514,7 +514,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - [`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`:套接字数据 @@ -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/) +

本文使用授权协议 [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/)。 diff --git a/docs/linux/ops/linux典型运维应用.md b/docs/linux/ops/linux典型运维应用.md index 9754083..fbd890a 100644 --- a/docs/linux/ops/linux典型运维应用.md +++ b/docs/linux/ops/linux典型运维应用.md @@ -35,12 +35,12 @@ nameserver 8.8.8.8 ```bash # 开启防火墙 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 stop firewalld.service -sudo systemctl disable firewalld.service +sudo systemctl status firewalld.service +sudo systemctl stop firewalld.service +sudo systemctl disable firewalld.service ``` ## 系统维护 diff --git a/docs/linux/ops/samba使用详解.md b/docs/linux/ops/samba使用详解.md index e615301..8240f74 100644 --- a/docs/linux/ops/samba使用详解.md +++ b/docs/linux/ops/samba使用详解.md @@ -181,7 +181,7 @@ Windows: 访问:`\\<你的ip>\<你的共享路径>` : -![](http://oyz7npk35.bkt.clouddn.com/images/20180920180928161334.png) +

Mac: diff --git a/docs/linux/ops/service/elastic/elastic-beats.md b/docs/linux/ops/service/elastic/elastic-beats.md index 43380e9..aa31dc6 100644 --- a/docs/linux/ops/service/elastic/elastic-beats.md +++ b/docs/linux/ops/service/elastic/elastic-beats.md @@ -18,7 +18,7 @@ Beats 是安装在服务器上的数据中转代理。 Beats 可以将数据直接传输到 Elasticsearch 或传输到 Logstash 。 -![Beats Platform](https://www.elastic.co/guide/en/beats/libbeat/current/images/beats-platform.png) +

Beats 有多种类型,可以根据实际应用需要选择合适的类型。 @@ -47,7 +47,7 @@ Filebeat带有内部模块(auditd,Apache,Nginx,System和MySQL),可 FileBeat 不会让你的管道超负荷。FileBeat 如果是向 Logstash 传输数据,当 Logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。一旦拥塞得到解决,FileBeat 将恢复到原来的速度并继续传播。 -![Beats design](https://www.elastic.co/guide/en/beats/filebeat/current/images/filebeat.png) +

## 安装 diff --git a/docs/linux/ops/service/elastic/elastic-kibana.md b/docs/linux/ops/service/elastic/elastic-kibana.md index be50fb4..cd85e16 100644 --- a/docs/linux/ops/service/elastic/elastic-kibana.md +++ b/docs/linux/ops/service/elastic/elastic-kibana.md @@ -4,7 +4,7 @@ 单击侧面导航栏中的 `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) +

在搜索栏中,您可以输入Elasticsearch查询条件来搜索您的数据。您可以在 `Discover` 页面中浏览结果并在 `Visualize` 页面中创建已保存搜索条件的可视化。 @@ -14,7 +14,7 @@ 默认情况下,每个匹配文档都显示所有字段。要选择要显示的文档字段,请将鼠标悬停在“可用字段”列表上,然后单击要包含的每个字段旁边的添加按钮。例如,如果只添加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) +

### 查询语义 @@ -105,7 +105,7 @@ quick brown forks 但是,由于拼写错误,我们的查询关键字变成如下情况,依然可以查到想要的结果。 ``` -quikc~ brwn~ foks~ +quikc\~ brwn\~ foks\~ ``` 这种模糊查询使用 Damerau-Levenshtein 距离来查找所有匹配最多两个更改的项。所谓的更改是指单个字符的插入,删除或替换,或者两个相邻字符的换位。 @@ -113,7 +113,7 @@ quikc~ brwn~ foks~ 默认编辑距离为 `2`,但编辑距离为 `1` 应足以捕捉所有人类拼写错误的80%。它可以被指定为: ``` -quikc~1 +quikc\~1 ``` #### 近似检索 @@ -123,7 +123,7 @@ quikc~1 例 ``` -"fox quick"~5 +"fox quick"\~5 ``` 字段中的文本越接近查询字符串中指定的原始顺序,该文档就越被认为是相关的。当与上面的示例查询相比时,短语 `"quick fox"` 将被认为比 `"quick brown fox"` 更近似查询条件。 diff --git a/docs/linux/ops/service/elastic/elastic-logstash.md b/docs/linux/ops/service/elastic/elastic-logstash.md index 04daf56..aa93fec 100644 --- a/docs/linux/ops/service/elastic/elastic-logstash.md +++ b/docs/linux/ops/service/elastic/elastic-logstash.md @@ -32,7 +32,7 @@ Logstash 有两个必要元素:`input` 和 `output` ,一个可选元素:`f 这三个元素,分别代表 Logstash 事件处理的三个阶段:输入 > 过滤器 > 输出。 -![logstash 工作原理.png](https://www.elastic.co/guide/en/logstash/current/static/images/basic_logstash_pipeline.png) +

- input 负责从数据源采集数据。 - filter 将数据修改为你指定的格式或内容。 diff --git a/docs/linux/ops/service/elastic/elastic-quickstart.md b/docs/linux/ops/service/elastic/elastic-quickstart.md index 0e3f325..6c754ab 100644 --- a/docs/linux/ops/service/elastic/elastic-quickstart.md +++ b/docs/linux/ops/service/elastic/elastic-quickstart.md @@ -32,7 +32,7 @@ ELK 是 elastic 公司旗下三款产品 [ElasticSearch](https://www.elastic.co/ ### Elastic 架构 -![static/images/deploy3.png](https://www.elastic.co/guide/en/logstash/current/static/images/deploy3.png) +

> **说明** > @@ -274,7 +274,7 @@ output { 大功告成,此后,`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) +

## 资料 diff --git a/docs/linux/ops/service/gitlab/gitlab-ci.md b/docs/linux/ops/service/gitlab/gitlab-ci.md index ccc7da2..8fd4643 100644 --- a/docs/linux/ops/service/gitlab/gitlab-ci.md +++ b/docs/linux/ops/service/gitlab/gitlab-ci.md @@ -1,3 +1,3 @@ # Gitlab -![](https://docs.gitlab.com/ce/ci/img/cicd_pipeline_infograph.png) +

diff --git a/docs/linux/ops/service/gitlab/gitlab-install.md b/docs/linux/ops/service/gitlab/gitlab-install.md index 7e42747..98c37af 100644 --- a/docs/linux/ops/service/gitlab/gitlab-install.md +++ b/docs/linux/ops/service/gitlab/gitlab-install.md @@ -25,7 +25,7 @@ 进入官方下载地址:https://about.gitlab.com/install/ ,如下图,选择合适的版本。 -![](http://dunwu.test.upcdn.net/snap/20190129155838.png) +

以 CentOS7 为例: @@ -87,7 +87,7 @@ docker run -d \ gitlab/gitlab-ce ``` -![](http://dunwu.test.upcdn.net/snap/20190131150515.png) +

## 安装 gitlab-ci-multi-runner @@ -138,7 +138,7 @@ sudo gitlab-runner register URL 和令牌信息在 Gitlab 的 Runner 管理页面获取: -![](http://dunwu.test.upcdn.net/snap/20190129163100.png) +

``` Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) diff --git a/docs/linux/ops/service/gitlab/gitlab-quickstart.md b/docs/linux/ops/service/gitlab/gitlab-quickstart.md index 9ce9acb..31145bc 100644 --- a/docs/linux/ops/service/gitlab/gitlab-quickstart.md +++ b/docs/linux/ops/service/gitlab/gitlab-quickstart.md @@ -12,31 +12,31 @@ 3. 打开 **Profile settings**. - ![Profile settings dropdown](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings.png) +

4. 跳转到 **SSH keys** tab 页 - ![SSH Keys](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys.png) +

5. 黏贴你的 SSH 公钥内容到 Key 文本框 - ![Paste SSH public key](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_paste_pub.png) +

6. 为了便于识别,你可以为其命名 - ![SSH key title](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_title.png) +

7. 点击 **Add key** 将 SSH 公钥添加到 GitLab - ![SSH key single page](https://docs.gitlab.com/ce/gitlab-basics/img/profile_settings_ssh_keys_single_key.png) +

## 创建项目 -![](http://dunwu.test.upcdn.net/snap/20190131150658.png) +

输入项目信息,点击 Create project 按钮,在 Gitlab 创建项目。 -![](http://dunwu.test.upcdn.net/snap/20190131150759.png) +

## 克隆项目到本地 @@ -44,29 +44,29 @@ 拷贝项目地址,然后在本地执行 `git clone ` -![1548919326929](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1548919326929.png) +

## 创建 Issue 依次点击 **Project’s 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) +

在项目中直接添加 issue -![New issue from the issues list](https://docs.gitlab.com/ce/user/project/issues/img/new_issue.png) +

在未关闭 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) +

通过项目面板添加 issue -![New issue from a project's dashboard](https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_projects_dashboard.png) +

通过 issue 面板添加 issue -![From the issue board](https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_issue_board.png) +

## 引申和引用 diff --git a/docs/linux/ops/service/jdk.md b/docs/linux/ops/service/jdk.md index 73ff2ae..1e7fd21 100644 --- a/docs/linux/ops/service/jdk.md +++ b/docs/linux/ops/service/jdk.md @@ -22,13 +22,13 @@ a. 进入 [Java 官网下载页面](https://www.oracle.com/technetwork/java/java b. 选择需要的版本: -![](http://oyz7npk35.bkt.clouddn.com/images/20180920181010164121.png) +

c. 选择对应操作系统的安装包: Windows 系统选择 exe 安装包;Mac 系统选择 dmp 安装包;Linux 系统选择 tar.gz 压缩包(RedHat 发行版可以安装 rpm 包)。 -![](http://oyz7npk35.bkt.clouddn.com/images/20180920181010164308.png) +

(2)运行安装包,按提示逐步安装 @@ -51,11 +51,11 @@ Windows 系统选择 exe 安装包;Mac 系统选择 dmp 安装包;Linux 系 a. 安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置"; -![img](https://www.runoob.com/wp-content/uploads/2013/12/win-java1.png) +

b. 选择"高级"选项卡,点击"环境变量"; -![img](https://www.runoob.com/wp-content/uploads/2013/12/java-win2.png) +

然后就会出现如下图所示的画面: @@ -78,7 +78,7 @@ a. "开始"->"运行",键入"cmd"; b. 键入命令: **java -version**、**java**、**javac** 几个命令,出现以下信息,说明环境变量配置成功; -![img](https://www.runoob.com/wp-content/uploads/2013/12/java-win9.png) +

## Linux 系统安装方法 diff --git a/docs/linux/ops/service/jenkins.md b/docs/linux/ops/service/jenkins.md index 83067af..34beca8 100644 --- a/docs/linux/ops/service/jenkins.md +++ b/docs/linux/ops/service/jenkins.md @@ -93,7 +93,7 @@ nohup java -jar jenkins.war --httpPort=8080 >> nohup.out 2>&1 & **现象**:输入密码后,卡在 check 页面 -![jenkins-checking.png](images/jenkins-checking.png) +

**原因**:jenkins 在安装插件前总是尝试连接 www.google.com,来判断网络是否连通。谷歌的网站在大陆是连不上的,所以会出现这个问题。 diff --git a/docs/linux/ops/service/nexus.md b/docs/linux/ops/service/nexus.md index a481534..244bd5f 100644 --- a/docs/linux/ops/service/nexus.md +++ b/docs/linux/ops/service/nexus.md @@ -24,7 +24,7 @@ 进入[官方下载地址](https://www.sonatype.com/download-oss-sonatype),选择合适版本下载。 -![](http://oyz7npk35.bkt.clouddn.com/images/20180920180929160614.png) +

本人希望将 Nexus 部署在 Linux 机器,所以选用的是 Unix 版本。 @@ -56,13 +56,13 @@ Usage: ./nexus {start|stop|run|run-redirect|status|restart|force-reload} 启动成功后,在浏览器中访问 `http://:8081`,欢迎页面如下图所示: -![](http://oyz7npk35.bkt.clouddn.com/images/20180920180929164140.png) +

点击右上角 Sign in 登录,默认用户名/密码为:admin/admin123。 有必要提一下的是,在 Nexus 的 Repositories 管理页面,展示了可用的 maven 仓库,如下图所示: -![](http://oyz7npk35.bkt.clouddn.com/images/20180920180929170924.png) +

> 说明: > diff --git a/docs/linux/ops/service/svn.md b/docs/linux/ops/service/svn.md index cc9562c..6cf1d60 100644 --- a/docs/linux/ops/service/svn.md +++ b/docs/linux/ops/service/svn.md @@ -143,7 +143,7 @@ $ vi /etc/sysconfig/svnserve 在新的窗口,输入地址 `svn://<你的 IP>` 即可,不出意外输入用户名和密码就能连接成功了(这里的用户、密码必须在 passwd 配置文件的清单中)。默认端口 3690,如果你修改了端口,那么要记得加上端口号。如下图所示: -![](http://dunwu.test.upcdn.net/snap/20190129175443.png) +

## 2. 引申和引用 diff --git a/docs/linux/scripts/python.md b/docs/linux/scripts/python.md index fbbf405..5f44bfe 100644 --- a/docs/linux/scripts/python.md +++ b/docs/linux/scripts/python.md @@ -167,7 +167,7 @@ Python 语言支持以下类型的运算符: | & | 按位与运算符:参与运算的两个值,如果两个相应位都为 1,则该位的结果为 1,否则为 0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 | | \| | 按位或运算符:只要对应的二个二进位有一个为 1 时,结果位就为 1。 | (a \| b) 输出结果 61 ,二进制解释: 0011 1101 | | ^ | 按位异或运算符:当两对应的二进位相异时,结果为 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 | | >> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 | @@ -198,7 +198,7 @@ Python 语言支持以下类型的运算符: | 运算符 | 描述 | | --------------------------- | ------------------------------------------------------ | | \*\* | 指数 (最高优先级) | -| ~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) | +| \~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) | | \* / % // | 乘,除,取模和取整除 | | + - | 加法减法 | | >> << | 右移,左移运算符 | diff --git a/docs/linux/tool/git/advanced/git-flow.md b/docs/linux/tool/git/advanced/git-flow.md index 365aa40..1d4fc30 100644 --- a/docs/linux/tool/git/advanced/git-flow.md +++ b/docs/linux/tool/git/advanced/git-flow.md @@ -61,7 +61,7 @@ Git 是一个非常优秀的版本控制工具,但是在实际版本管理中 下面,来介绍一下 git-flow 模型。 -![git-flow.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-flow.png) +

`Gitflow`工作流仍然用中央仓库作为所有开发者的交互中心。和其它的工作流一样,开发者在本地工作并`push`分支到要中央仓库中。 @@ -73,19 +73,19 @@ Git 是一个非常优秀的版本控制工具,但是在实际版本管理中 `develop` 分支作为功能的集成分支。 -![img](https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-1historical.png) +

### 功能分支 每个新功能位于一个自己的分支,这样可以[`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) +

注意,从各种含义和目的上来看,功能分支加上`develop`分支就是功能分支工作流的用法。但`Gitflow`工作流没有在这里止步。 ### 发布分支 -![img](https://raw.githubusercontent.com/quickhack/translations/master/git-workflows-and-tutorials/images/git-workflow-release-cycle-3release.png) +

一旦`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) +

维护分支或说是热修复(`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 -- **开始新Feature:** git flow feature start MYFEATURE -- **Publish一个Feature(也就是push到远程):** git flow feature publish MYFEATURE -- **获取Publish的Feature:** git flow feature pull origin MYFEATURE -- **完成一个Feature:** git flow feature finish MYFEATURE -- **开始一个Release:** git flow release start RELEASE [BASE] -- **Publish一个Release:** git flow release publish RELEASE -- **发布Release:** git flow release finish RELEASE +- **初始化:** git flow init +- **开始新Feature:** git flow feature start MYFEATURE +- **Publish一个Feature(也就是push到远程):** git flow feature publish MYFEATURE +- **获取Publish的Feature:** git flow feature pull origin MYFEATURE +- **完成一个Feature:** git flow feature finish MYFEATURE +- **开始一个Release:** git flow release start RELEASE [BASE] +- **Publish一个Release:** git flow release publish RELEASE +- **发布Release:** git flow release finish RELEASE 别忘了git push --tags -- **开始一个Hotfix:** git flow hotfix start VERSION [BASENAME] -- **发布一个Hotfix:** git flow hotfix finish VERSION +- **开始一个Hotfix:** git flow hotfix start VERSION [BASENAME] +- **发布一个Hotfix:** git flow hotfix finish VERSION -![git-flow-commands.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-flow-commands.png) +

### Source Tree diff --git a/docs/linux/tool/git/appendix/git-faq.md b/docs/linux/tool/git/appendix/git-faq.md index bdec721..c3bf92d 100644 --- a/docs/linux/tool/git/appendix/git-faq.md +++ b/docs/linux/tool/git/appendix/git-faq.md @@ -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)提交到了同一个分支,而这些提交应该分布在不同的分支里 @@ -608,7 +608,7 @@ Switched to a new branch 'daves' (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 (master)$ git rebase -i HEAD~2 @@ -734,7 +734,7 @@ noop 这意味着你rebase的分支和当前分支在同一个提交(commit)上, 或者 *领先(ahead)* 当前分支。 你可以尝试: * 检查确保主(master)分支没有问题 -* rebase `HEAD~2` 或者更早 +* rebase `HEAD\~2` 或者更早 #### 有冲突的情况 @@ -846,7 +846,7 @@ $ git update-ref refs/tags/ ### 我想给一些Git命令添加别名(alias) -在 OS X 和 Linux 下, 你的 Git的配置文件储存在 ```~/.gitconfig```。我在```[alias]``` 部分添加了一些快捷别名(和一些我容易拼写错误的),如下: +在 OS X 和 Linux 下, 你的 Git的配置文件储存在 ```\~/.gitconfig```。我在```[alias]``` 部分添加了一些快捷别名(和一些我容易拼写错误的),如下: ```vim [alias] @@ -893,7 +893,7 @@ $ git config --global credential.helper 'cache --timeout=3600' ```sh (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 c10f740 HEAD@{2}: checkout: moving from master to 2.2 ``` @@ -911,4 +911,4 @@ $ git reset --hard 0254ea7 ## 资源 * https://github.com/k88hudson/git-flight-rules/blob/master/README_zh-CN.md -* https://github.com/521xueweihan/git-tips \ No newline at end of file +* https://github.com/521xueweihan/git-tips diff --git a/docs/linux/tool/git/basics/git-configuration.md b/docs/linux/tool/git/basics/git-configuration.md index 860c47e..2a4a16e 100644 --- a/docs/linux/tool/git/basics/git-configuration.md +++ b/docs/linux/tool/git/basics/git-configuration.md @@ -2,19 +2,19 @@ ## 配置 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/config` 中的值会覆盖掉 `/etc/gitconfig` 中所对应的值。 +以上三个层次中每层的配置(系统、全局、本地)都会覆盖掉上一层次的配置,所以 `.git/config` 中的值会覆盖掉 `/etc/gitconfig` 中所对应的值。 ## 客户端基本配置 ### `core.editor` -默认情况下,Git 会调用环境变量(`$VISUAL` 或 `$EDITOR`)设置的任意文本编辑器,如果没有设置,会调用 `vi` 来创建和编辑你的提交以及标签信息。 你可以使用 `core.editor` 选项来修改默认的编辑器: +默认情况下,Git 会调用环境变量(`$VISUAL` 或 `$EDITOR`)设置的任意文本编辑器,如果没有设置,会调用 `vi` 来创建和编辑你的提交以及标签信息。 你可以使用 `core.editor` 选项来修改默认的编辑器: ``` $ git config --global core.editor emacs @@ -24,7 +24,7 @@ $ git config --global core.editor emacs ### `commit.template` -如果把此项指定为你的系统上某个文件的路径,当你提交的时候, Git 会使用该文件的内容作为提交的默认信息。 例如:假设你创建了一个叫 `~/.gitmessage.txt` 的模板文件,类似这样: +如果把此项指定为你的系统上某个文件的路径,当你提交的时候, Git 会使用该文件的内容作为提交的默认信息。 例如:假设你创建了一个叫 `\~/.gitmessage.txt` 的模板文件,类似这样: ``` subject line @@ -34,7 +34,7 @@ what happened [ticket: X] ``` -要想让 Git 把它作为运行 `git commit` 时显示在你的编辑器中的默认信息, 如下设置 `commit.template`: +要想让 Git 把它作为运行 `git commit` 时显示在你的编辑器中的默认信息, 如下设置 `commit.template`: ``` $ git config --global commit.template ~/.gitmessage.txt @@ -66,7 +66,7 @@ what happened ### `core.pager` -该配置项指定 Git 运行诸如 `log` 和 `diff` 等命令所使用的分页器。 你可以把它设置成用 `more` 或者任何你喜欢的分页器(默认用的是 `less`),当然也可以设置成空字符串,关闭该选项: +该配置项指定 Git 运行诸如 `log` 和 `diff` 等命令所使用的分页器。 你可以把它设置成用 `more` 或者任何你喜欢的分页器(默认用的是 `less`),当然也可以设置成空字符串,关闭该选项: ``` $ git config --global core.pager '' @@ -76,13 +76,13 @@ $ git config --global core.pager '' ### `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 ``` -现在,你每次运行 `git tag` 命令时,即可直接签署标签,而无需定义密钥: +现在,你每次运行 `git tag` 命令时,即可直接签署标签,而无需定义密钥: ``` $ git tag -s @@ -90,18 +90,18 @@ $ git tag -s ### `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 ``` -……然后运行 `git config --global core.excludesfile ~/.gitignore_global`,Git 将把那些文件永远地拒之门外。 +……然后运行 `git config --global core.excludesfile \~/.gitignore_global`,Git 将把那些文件永远地拒之门外。 ### `help.autocorrect` @@ -115,7 +115,7 @@ git:'chekcout' 不是一个 git 命令。参见 'git --help'。 checkout ``` -Git 会尝试猜测你的意图,但是它不会越俎代庖。 如果你把 `help.autocorrect` 设置成 1,那么只要有一个命令被模糊匹配到了,Git 会自动运行该命令。 +Git 会尝试猜测你的意图,但是它不会越俎代庖。 如果你把 `help.autocorrect` 设置成 1,那么只要有一个命令被模糊匹配到了,Git 会自动运行该命令。 ``` $ git chekcout master @@ -124,7 +124,7 @@ $ git chekcout master 在 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 键时,插入回车和换行两个字符。 -Git 可以在你提交时自动地把回车和换行转换成换行,而在检出代码时把换行转换成回车和换行。 你可以用 `core.autocrlf` 来打开此项功能。 如果是在 Windows 系统上,把它设置成 `true`,这样在检出代码时,换行会被转换成回车和换行: +Git 可以在你提交时自动地把回车和换行转换成换行,而在检出代码时把换行转换成回车和换行。 你可以用 `core.autocrlf` 来打开此项功能。 如果是在 Windows 系统上,把它设置成 `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 @@ -148,7 +148,7 @@ $ git config --global core.autocrlf input 这样在 Windows 上的检出文件中会保留回车和换行,而在 Mac 和 Linux 上,以及版本库中会保留换行。 -如果你是 Windows 程序员,且正在开发仅运行在 Windows 上的项目,可以设置 `false` 取消此功能,把回车保留在版本库中: +如果你是 Windows 程序员,且正在开发仅运行在 Windows 上的项目,可以设置 `false` 取消此功能,把回车保留在版本库中: ``` $ git config --global core.autocrlf false @@ -160,16 +160,16 @@ Git 预先设置了一些选项来探测和修正多余空白字符问题。 它 默认被打开的三个选项是:`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 \ 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 @@ -181,7 +181,7 @@ $ git apply --whitespace=warn $ git apply --whitespace=fix ``` -这些选项也能运用于 `git rebase`。 如果提交了有空白问题的文件,但还没推送到上游,你可以运行 `git rebase --whitespace=fix` 来让 Git 在重写补丁时自动修正它们。 +这些选项也能运用于 `git rebase`。 如果提交了有空白问题的文件,但还没推送到上游,你可以运行 `git rebase --whitespace=fix` 来让 Git 在重写补丁时自动修正它们。 ## 服务器端配置 @@ -189,7 +189,7 @@ Git 服务器端的配置项相对来说并不多,但仍有一些饶有生趣 ### `receive.fsckObjects` -Git 能够确认每个对象的有效性以及 SHA-1 检验和是否保持一致。 但 Git 不会在每次推送时都这么做。这个操作很耗时间,很有可能会拖慢提交的过程,特别是当库或推送的文件很大的情况下。 如果想在每次推送时都要求 Git 检查一致性,设置 `receive.fsckObjects` 为 true 来强迫它这么做: +Git 能够确认每个对象的有效性以及 SHA-1 检验和是否保持一致。 但 Git 不会在每次推送时都这么做。这个操作很耗时间,很有可能会拖慢提交的过程,特别是当库或推送的文件很大的情况下。 如果想在每次推送时都要求 Git 检查一致性,设置 `receive.fsckObjects` 为 true 来强迫它这么做: ``` $ git config --system receive.fsckObjects true @@ -199,9 +199,9 @@ $ git config --system receive.fsckObjects true ### `receive.denyNonFastForwards` -如果你变基已经被推送的提交,继而再推送,又或者推送一个提交到远程分支,而这个远程分支当前指向的提交不在该提交的历史中,这样的推送会被拒绝。 这通常是个很好的策略,但有时在变基的过程中,你确信自己需要更新远程分支,可以在 push 命令后加 `-f` 标志来强制更新(force-update)。 +如果你变基已经被推送的提交,继而再推送,又或者推送一个提交到远程分支,而这个远程分支当前指向的提交不在该提交的历史中,这样的推送会被拒绝。 这通常是个很好的策略,但有时在变基的过程中,你确信自己需要更新远程分支,可以在 push 命令后加 `-f` 标志来强制更新(force-update)。 -要禁用这样的强制更新推送(force-pushes),可以设置 `receive.denyNonFastForwards`: +要禁用这样的强制更新推送(force-pushes),可以设置 `receive.denyNonFastForwards`: ``` $ git config --system receive.denyNonFastForwards true @@ -211,10 +211,10 @@ $ git config --system receive.denyNonFastForwards true ### `receive.denyDeletes` -有一些方法可以绕过 `denyNonFastForwards` 策略。其中一种是先删除某个分支,再连同新的引用一起推送回该分支。 把 `receive.denyDeletes` 设置为 true 可以把这个漏洞补上: +有一些方法可以绕过 `denyNonFastForwards` 策略。其中一种是先删除某个分支,再连同新的引用一起推送回该分支。 把 `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) 一节学到具体的做法。 diff --git a/docs/linux/tool/git/basics/git-installation.md b/docs/linux/tool/git/basics/git-installation.md index d57f25e..a7112ab 100644 --- a/docs/linux/tool/git/basics/git-installation.md +++ b/docs/linux/tool/git/basics/git-installation.md @@ -18,4 +18,4 @@ ## 资料 -* [https://git-scm.com/downloads](https://git-scm.com/downloads) \ No newline at end of file +* [https://git-scm.com/downloads](https://git-scm.com/downloads) diff --git a/docs/linux/tool/git/git-quickstart.md b/docs/linux/tool/git/git-quickstart.md index 9724676..ee66a17 100644 --- a/docs/linux/tool/git/git-quickstart.md +++ b/docs/linux/tool/git/git-quickstart.md @@ -27,11 +27,11 @@ Git 是一个开源的分布式版本控制系统。 这么做最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录。 -![img](https://git-scm.com/figures/18333fig0102-tn.png) +

**分布式版本控制系统**的客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。 -![img](https://git-scm.com/figures/18333fig0103-tn.png) +

### 为什么使用 Git? @@ -79,7 +79,7 @@ Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值 - **已提交(committed)** - 已提交表示数据已经安全的保存在本地数据库中。  + 已提交表示数据已经安全的保存在本地数据库中。 ### 工作区域 @@ -107,7 +107,7 @@ Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值 同理,如果你想同步别人的修改,你需要从远程仓库拉取更新。 -![git-theory.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-theory.png) +

## 安装 @@ -149,15 +149,15 @@ git version 1.7.1 ## 配置 -Git 自带一个 `git config` 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置: +Git 自带一个 `git config` 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置: -1. `/etc/gitconfig` 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 `--system` 选项的 `git config` 时,它会从此文件读写配置变量。 -2. `~/.gitconfig` 或 `~/.config/git/config` 文件:只针对当前用户。 可以传递 `--global` 选项让 Git 读写此文件。 -3. 当前使用仓库的 Git 目录中的 `config` 文件(就是 `.git/config`):针对该仓库。 +1. `/etc/gitconfig` 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 `--system` 选项的 `git config` 时,它会从此文件读写配置变量。 +2. `\~/.gitconfig` 或 `\~/.config/git/config` 文件:只针对当前用户。 可以传递 `--global` 选项让 Git 读写此文件。 +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 ``` -再次强调,如果使用了 `--global` 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 `--global` 选项的命令来配置。 +再次强调,如果使用了 `--global` 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 `--global` 选项的命令来配置。 很多 GUI 工具都会在第一次运行时帮助你配置这些信息。 @@ -190,7 +190,7 @@ $ git config --global user.email johndoe@example.com 本节选择性介绍 git 中比较常用的命令行场景。 -![git-cheat-sheet.png](http://oyz7npk35.bkt.clouddn.com//image/linux/git/git-cheat-sheet.png) +

### 创建 @@ -458,13 +458,13 @@ HTTPS 这种方式要求你每次 push 时都要输入用户名、密码,有 而 SSH 要求你本地生成证书,然后在你的 Github 账户中注册。第一次配置麻烦是麻烦了点,但是以后就免去了每次 push 需要输入用户名、密码的繁琐。 -![image.png](http://upload-images.jianshu.io/upload_images/3101171-66f60822aeb2c21c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) +

以下介绍以下,如何生成证书,以及在 Github 中注册。 #### 生成 SSH 公钥 -如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 `~/.ssh` 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥: +如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 `\~/.ssh` 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥: ``` $ cd ~/.ssh @@ -473,7 +473,7 @@ authorized_keys2 id_dsa known_hosts 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 @@ -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 ``` -首先 `ssh-keygen` 会确认密钥的存储位置(默认是 `.ssh/id_rsa`),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。 +首先 `ssh-keygen` 会确认密钥的存储位置(默认是 `.ssh/id_rsa`),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。 -现在,进行了上述操作的用户需要将各自的公钥发送给任意一个 Git 服务器管理员(假设服务器正在使用基于公钥的 SSH 验证设置)。 他们所要做的就是复制各自的 `.pub` 文件内容,并将其通过邮件发送。 公钥看起来是这样的: +现在,进行了上述操作的用户需要将各自的公钥发送给任意一个 Git 服务器管理员(假设服务器正在使用基于公钥的 SSH 验证设置)。 他们所要做的就是复制各自的 `.pub` 文件内容,并将其通过邮件发送。 公钥看起来是这样的: ``` $ cat ~/.ssh/id_rsa.pub @@ -508,7 +508,7 @@ NrRFi9wrf+M7Q== schacon@mylaptop.local 后面,你在克隆你的 Github 项目时使用 SSH 方式即可。 -![The key field](https://help.github.chttps://raw.githubusercontent.com/dunwu/design/master/images/refactor/help/settings/ssh-key-paste.png) +

如果觉得我的讲解还不够细致,可以参考: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) +

## 资料 diff --git a/docs/linux/tool/vim.md b/docs/linux/tool/vim.md index a4413f5..17406b8 100644 --- a/docs/linux/tool/vim.md +++ b/docs/linux/tool/vim.md @@ -177,7 +177,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 > > \> 如果你认为单词是由 blank 字符分隔符,那么你需要使用大写的 E 和 W。(注:程序语句) > - > ![Word moves example](http://upload-images.jianshu.io/upload_images/3101171-46f752c581d79057.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) +

下面,让我来说说最强的光标移动: @@ -226,7 +226,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 > - `t,` → 到逗号前的第一个字符。逗号可以变成其它字符。 > - `3fa` → 在当前行查找第三个出现的 a。 > - `F` 和 `T` → 和 `f` 和 `t` 一样,只不过是相反方向。 -> ![Line moves](http://upload-images.jianshu.io/upload_images/3101171-00835b8316330c58.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) +

还有一个很有用的命令是 `dt"` → 删除所有的内容,直到遇到双引号—— `"。` @@ -248,7 +248,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 > - `v2i)` → 会选择 `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) +

#### 块操作: `` @@ -259,7 +259,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 - `` → 向下移动 (你也可以使用 hjkl 来移动光标,或是使用%,或是别的) - `I-- [ESC]` → I 是插入,插入“`--`”,按 ESC 键来为每一行生效。 -![Rectangular blocks](http://upload-images.jianshu.io/upload_images/3101171-8b093a0f65707949.gif?imageMogr2/auto-orient/strip) +

在 Windows 下的 vim,你需要使用 `` 而不是 `` ,`` 是拷贝剪贴板。 @@ -267,7 +267,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 在 Insert 模式下,你可以输入一个词的开头,然后按 `或是,自动补齐功能就出现了……` -``![Completion](http://upload-images.jianshu.io/upload_images/3101171-e2ae877e67880ff7.gif?imageMogr2/auto-orient/strip) +

#### 宏录制: `qa` 操作序列 `q`, `@a`, `@@` @@ -296,7 +296,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 > > - 现在做 `100@@` 会创建新的 100 行,并把数据增加到 103. -![Macros](http://upload-images.jianshu.io/upload_images/3101171-f1889f8bca723964.gif?imageMogr2/auto-orient/strip) +

#### 可视化选择: `v`,`V`,`` @@ -306,7 +306,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 - `<` 或 `>` → 左右缩进 - `=` → 自动给缩进 (注:这个功能相当强大,我太喜欢了) -![Autoindent](http://upload-images.jianshu.io/upload_images/3101171-fe1e19983fca213f.gif?imageMogr2/auto-orient/strip) +

在所有被选择的行后加上点东西: @@ -315,7 +315,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 - `$` 到行最后 - `A`, 输入字符串,按 `ESC。` -![Append to many lines](http://upload-images.jianshu.io/upload_images/3101171-b192601247334c4e.gif?imageMogr2/auto-orient/strip) +

#### 分屏: `:split` 和 `vsplit`. @@ -326,7 +326,7 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 > - `_` (或 `|`) : 最大化尺寸 (| 垂直分屏) > - `+` (或 `-`) : 增加尺寸 -![Split](http://upload-images.jianshu.io/upload_images/3101171-f329d01e299cb366.gif?imageMogr2/auto-orient/strip) +

## 3. Vim Cheat Sheet @@ -338,33 +338,33 @@ Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错 此外,[这里](http://blog.ngedit.com/vi-vim-cheat-sheet-sch.gif)还有简体中文版。 -![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet.png) +

### 3.2. 入门版 基本操作的入门版。[原版出处](https://github.com/ahrencode/Miscellaneous)还有 keynote 版本可供 DIY 以及其他相关有用的 cheatsheet。 -![](http://dunwu.test.upcdn.net/images/os/vim/basic-vim-cheat-sheet.png) +

### 3.3. 进阶版 下图是 300DPI 的超清大图,另外[查看原文](http://michael.peopleofhonoronly.com/vim/)还有更多版本:黑白,低分辨率,色盲等 -![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-for-programmers.png) +

### 3.4. 增强版 下图是一个更新时间较新的现代版,含有的信息也更丰富。[原文链接](http://vimcheatsheet.com/) -![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-02.png) +

### 3.5. 文字版 [原文链接](http://tnerual.eriogerg.free.fr/vimqrc.pdf) -![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-text-01.png) +

-![](http://dunwu.test.upcdn.net/images/os/vim/vim-cheat-sheet-text-02.png) +

## 4. 资料 diff --git a/docs/windows/Windows工具.md b/docs/windows/Windows工具.md index 5d8d0e0..4551ae2 100644 --- a/docs/windows/Windows工具.md +++ b/docs/windows/Windows工具.md @@ -29,22 +29,22 @@ > [Everything](http://www.voidtools.com/) 可以立即在 windows 系统中找到制定名称的文件和文件夹。 -![](http://oyz7npk35.bkt.clouddn.com/images/20180920180930174548.png) +

### 1.3. Wox > [Wox](https://github.com/Wox-launcher/Wox) 是一款简单易用的 Windows 启动器。可以把它视为 windows 版的 Alfred。 -![](https://camo.githubusercontent.com/9db33546d3a905a9ad915e0948d3ba3f47f57b64/687474703a2f2f692e696d6775722e636f6d2f4474784e424a692e676966) +

### 1.4. Q-dir > [Q-dir](http://www.softpedia.com/get/File-managers/Q-Dir.shtml) 是轻量的文件管理器,特点鲜明,各种布局视图切换灵活,默认四个小窗口组成一个大窗口,操作快捷。 -![](http://oyz7npk35.bkt.clouddn.com/images/20180920180930174437.png) +

### 1.5. Fences > [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) +