Skip to content

Commit 6e914da

Browse files
add git
1 parent 2c3eae1 commit 6e914da

File tree

5 files changed

+120
-12
lines changed

5 files changed

+120
-12
lines changed

note/git教程.md

Lines changed: 112 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,119 @@
1-
# GIT
1+
# Git
22

3+
## Git VS SVN
34

4-
* 参考
5+
1. Git 属于分布式版本控制系统,而 SVN 属于集中式。
56

6-
https://gist.github.com/285571052/72fe4e85290d170b9de4634b6ad8c082
77

8+
2. 集中式版本控制只有中心服务器拥有一份代码,而分布式版本控制每个人的电脑上就有一份完整的代码。
89

9-
https://git-scm.com/book/zh/v2
10+
3. 集中式版本控制有安全性问题,当中心服务器挂了所有人都没办法工作了。
1011

12+
4. 集中式版本控制需要连网才能工作,如果网速过慢,那么提交一个文件的会慢的无法让人忍受。而分布式版本控制不需要连网就能工作。
1113

12-
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
14+
5. 分布式版本控制新建分支、合并分支操作速度非常快,而集中式版本控制新建一个分支相当于复制一份完整代码。
15+
16+
6. 中心服务器用来交换每个用户的修改,没有中心服务器也能工作,但是中心服务器能够 24 小时保持开机状态,这样就能更方便的交换修改。**Github 就是一个中心服务器。**
17+
18+
## Git
19+
20+
Git 里面又三个概念:分别是工作区,暂存区,和版本库。
21+
22+
1. 工作区:就是你在电脑里能看到的目录。
23+
24+
2. 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
25+
26+
3. 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
27+
28+
29+
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
30+
31+
![tu](../pic/git_1.jpg)
32+
33+
---
34+
35+
* 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
36+
37+
* 当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
38+
39+
* 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
40+
41+
* 当执行 "git reset HEAD 或 commit_id " "git reset -- \<file> "命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。(git reset HEAD 命令用于取消已缓存的内容)
42+
43+
* 当执行 "git rm --cached \<file> " 命令时,会直接从暂存区删除文件,工作区则不做出改变。
44+
45+
* 当执行 "git checkout ." 或者 "git checkout -- \<file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
46+
47+
* 当执行 "git checkout HEAD 或 commit_id . " 或者 "git checkout HEAD \<file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
48+
49+
---
50+
51+
52+
比如现在有一个文件 test.txt
53+
```
54+
git add test.txt 把文件的修改添加到暂存区
55+
git commit -m 'add' 把暂存区的修改提交到当前分支,提交之后暂存区就被清空了
56+
git reset -- test.txt 使用当前分支上的修改覆盖暂存区,用来撤销最后一次 git add files
57+
git checkout -- test.txt 使用暂存区的修改覆盖工作目录,用来撤销本地修改
58+
```
59+
60+
![tu](../pic/git_3.jpg)
61+
62+
可以跳过暂存区域直接从分支中取出修改,或者直接提交修改到分支中。
63+
64+
git commit -a 直接把所有文件的修改添加到暂存区然后执行提交。
65+
66+
git checkout HEAD -- files 取出最后一次修改,可以用来进行回滚操作。
67+
68+
69+
```
70+
# 如果不是很清楚,文件的修改是否从工作区 add 到了暂存区,还是已经commit 到了版本库,
71+
# 可以使用 git status 命令
72+
# 如果已经 commit,那么显示:
73+
git status
74+
位于分支 master
75+
无文件要提交,干净的工作区
76+
```
77+
78+
```
79+
# 把版本库里面对应的版本退回到工作区
80+
git reset --hard commit_id
81+
```
82+
83+
## 分支管理
84+
85+
查看分支:
86+
```
87+
git branch
88+
dev
89+
* master
90+
```
91+
92+
创建分支:
93+
```
94+
git branch dev
95+
```
96+
97+
切换分支:
98+
```
99+
git checkout dev
100+
```
101+
102+
创建并且切换分支:
103+
```
104+
git checkout -b dev
105+
```
106+
107+
## .gitignore
108+
109+
## 参考
110+
111+
https://gist.github.com/285571052/72fe4e85290d170b9de4634b6ad8c082
112+
113+
https://git-scm.com/book/zh/v2
114+
115+
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
116+
117+
https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Git.md
118+
119+
http://www.runoob.com/git/git-workspace-index-repo.html

note/linux命令_linux性能分析和优化.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,15 +222,16 @@
222222
![tu](../pic/Linux性能分析4.jpg)
223223
224224
225-
首先,平均负载的案例。我们先用 uptime, 查看了系统的平均负载;而在平均负载升高后,又用 mpstat 和 pidstat ,分别观察了每个 CPU 和每个进程 CPU 的使用情况,进而找出了导致平均负载升高的进程,也就是我们的压测工具 stress。
225+
* 几个例子
226226
227-
第二个,上下文切换的案例。我们先用 vmstat ,查看了系统的上下文切换次数和中断次数;然后通过 pidstat ,观察了进程的自愿上下文切换和非自愿上下文切换情况;最后通过 pidstat ,观察了线程的上下文切换情况,找出了上下文切换次数增多的根源,也就是我们的基准测试工具 sysbench
227+
>首先,平均负载的案例。我们先用 uptime, 查看了系统的平均负载;而在平均负载升高后,又用 mpstat 和 pidstat ,分别观察了每个 CPU 和每个进程 CPU 的使用情况,进而找出了导致平均负载升高的进程,也就是我们的压测工具 stress
228228
229-
第三个,进程 CPU 使用率升高的案例。我们先用 top ,查看了系统和进程的 CPU 使用情况,发现 CPU 使用率升高的进程是 php-fpm;再用 perf top ,观察 php-fpm 的调用链,最终找出 CPU 升高的根源,也就是库函数 sqrt()
229+
>第二个,上下文切换的案例。我们先用 vmstat ,查看了系统的上下文切换次数和中断次数;然后通过 pidstat ,观察了进程的自愿上下文切换和非自愿上下文切换情况;最后通过 pidstat ,观察了线程的上下文切换情况,找出了上下文切换次数增多的根源,也就是我们的基准测试工具 sysbench
230230
231-
第四个,系统的 CPU 使用率升高的案例。我们先用 top 观察到了系统 CPU 升高,但通过 top 和 pidstat ,却找不出高 CPU 使用率的进程。于是,我们重新审视 top 的输出,又从 CPU 使用率不高但处于 Running 状态的进程入手,找出了可疑之处,最终通过 perf record 和 perf report ,发现原来是短时进程在捣鬼。
232-
另外,对于短时进程,我还介绍了一个专门的工具 execsnoop,它可以实时监控进程调用的外部命令。
231+
>第三个,进程 CPU 使用率升高的案例。我们先用 top ,查看了系统和进程的 CPU 使用情况,发现 CPU 使用率升高的进程是 php-fpm;再用 perf top ,观察 php-fpm 的调用链,最终找出 CPU 升高的根源,也就是库函数 sqrt() 。
233232
234-
第五个,不可中断进程和僵尸进程的案例。我们先用 top 观察到了 iowait 升高的问题,并发现了大量的不可中断进程和僵尸进程;接着我们用 dstat 发现是这是由磁盘读导致的,于是又通过 pidstat 找出了相关的进程。但我们用 strace 查看进程系统调用却失败了,最终还是用 perf 分析进程调用链,才发现根源在于磁盘直接 I/O
233+
>第四个,系统的 CPU 使用率升高的案例。我们先用 top 观察到了系统 CPU 升高,但通过 top 和 pidstat ,却找不出高 CPU 使用率的进程。于是,我们重新审视 top 的输出,又从 CPU 使用率不高但处于 Running 状态的进程入手,找出了可疑之处,最终通过 perf record 和 perf report ,发现原来是短时进程在捣鬼。另外,对于短时进程,我还介绍了一个专门的工具 execsnoop,它可以实时监控进程调用的外部命令
235234
236-
最后一个,软中断的案例。我们通过 top 观察到,系统的软中断 CPU 使用率升高;接着查看 /proc/softirqs, 找到了几种变化速率较快的软中断;然后通过 sar 命令,发现是网络小包的问题,最后再用 tcpdump ,找出网络帧的类型和来源,确定是一个 SYN FLOOD 攻击导致的。
235+
>第五个,不可中断进程和僵尸进程的案例。我们先用 top 观察到了 iowait 升高的问题,并发现了大量的不可中断进程和僵尸进程;接着我们用 dstat 发现是这是由磁盘读导致的,于是又通过 pidstat 找出了相关的进程。但我们用 strace 查看进程系统调用却失败了,最终还是用 perf 分析进程调用链,才发现根源在于磁盘直接 I/O 。
236+
237+
>最后一个,软中断的案例。我们通过 top 观察到,系统的软中断 CPU 使用率升高;接着查看 /proc/softirqs, 找到了几种变化速率较快的软中断;然后通过 sar 命令,发现是网络小包的问题,最后再用 tcpdump ,找出网络帧的类型和来源,确定是一个 SYN FLOOD 攻击导致的。

pic/git_1.JPG

34.9 KB
Loading

pic/git_2.JPG

24.8 KB
Loading

pic/git_3.JPG

24.4 KB
Loading

0 commit comments

Comments
 (0)