shadowsocks用户自定义代理规则

自定义代理规则的设置语法与GFWlist相同,即adblockplus过滤规则:

  1. 通配符支持,如 .example.com/ 实际书写时可省略 如.example.com/ 意即.example.com/*
  2. 正则表达式支持,以\开始和结束, 如 [\w]+:\/\/example.com\
  3. 例外规则 @@,如 @@.example.com/ 满足@@后规则的地址不使用代理
  4. 匹配地址开始和结尾 |,如 |http://example.com、example.com|分别表示以http://example.com开始和以example.com结束的地址
  5. || 标记,如 ||example.com 则http://example.com、https://example.com、ftp://example.com等地址均满足条件
  6. 注释 ! 如 ! Comment

例如你要添加www.ip138.com、ip.cn两个网站到自定义代理规则,编辑user-rule.txt文件,在文件最后加入:

1
2
3
!测试user-rule生效
||ip138.com
||ip.cn

然后更新本地的PAC,更新后user-rule.txt中的自定义规则会添加到PAC.txt文件内。(备注:每次编辑完user-rule.txt后,均需执行“从GFWList更新本地PAC”,使本次规则也生效。)

环境

1
2
3
4
5
6
7
8
ulimit -a
open files (-n) 2560
2000多的fd数是很小的, osx只能开10000,Linux可以开6W多
ulimit -n 10000
在用 ulimit -a 检查一下
open files (-n) 10000
看使用率最高
top -n1

webbench

webbench是一枚强大得可以的压力测试工具,它最多可以模拟3万个并发连接去测试网站的负载能力
webbench -c 并发数 -t 运行测试时间 URL
webbench -c 5000 -t 120 http://xxxx

ab

ab是Apache自带的压力测试工具,非常小巧,可惜的是在mac下面表现不佳,跳动太大,而且还会出现 apr_socket_recv: Connection reset by peer (54)
ab -c 并发数 -n 请求数 URL
ab -c 1000 -n 10000 http://xxx

siege

siege -c 并发数 -t 运行测试时间 URL
siege -c 1000 -t 5s URL
这里要注意的是-t后面的时间要带单位,s表示秒,如果不带,就是分钟,分钟的单位,还是挺长的,所以要注意一下。

Tsung

ubuntu下安装:
  sudo apt-get install erlang erlang-src //不是必须要装
  sudo apt-get install perl5
  sudo apt-get install libtemplate-perl //必须安装模板,否则无法生成report.html,报Can’t locate Template.pm
  sudo apt-get install gnuplot-x11 //gnuplot有好几种,都差不多,我这边装的是gnuplot-x11.
  http://tsung.erlang-projects.org/ 下载–>解压–>./configure–>make–>sudo make install
sudo apt-get install tsung,不过我直接下的官网的,没试过用apt-get安装
安装完,tsung放在/usr/bin/tsung,可以直接用 , 下面讲如何生成report.html
  mkdir ~/.tsung
  cp /usr/share/doc/tsung/examples/http_simple.xml ~/.tsung/tsung.xml //中挑一两个例子拷贝到 ~/.tsung/tsung.xml 作为配置文件

  配置 tsung.xml //不详细讲了,见备注给出的两篇博文.
  tsung start //开启测试,会在~/.tsung 下生成log文件

  cd ~/.tsung/log/20131108-16** //进入对应的log中

sudo /usr/lib/tsung/bin/tsung_stats.pl                                                             //自动分析生成 report.html

拷贝report.html到 正常目录下,用浏览器打开,即可看到对应数据.

参考文献

http://www.blogjava.net/duanzhimin528/archive/2010/09/01/330582.html //tsung的
http://tiandiou.blog.163.com/blog/static/2355668220115392725727/ //tsung的
http://blog.csdn.net/wudongxu/article/details/6326381 //tsung的
http://cqfish.blog.51cto.com/622299/138726 (比较详细) //ab的
http://www.vpser.net/opt/webserver-test.html // 综合比较几个压力测试工具的
http://hi.baidu.com/software_one/item/26a50ef1a67c2511ce9f32e0
http://www.cnblogs.com/zhongyuan/p/3038141.html

7z是已知最大压缩比的工具,它的使用比较复杂, 以下我记下的一些技巧
压缩命令(结合tar命令): tar cf - /home/test | 7z a -si test.tar.7z
上面命令将 /home/test 文件夹压缩为 test.tar.7z 文件
解压命令(结合tar命令) : 7z x -so test.tar.7z | tar xf - /home/alex
这个命令将test.tar.7z 的内容解压到 /home/alex目录下

根据不同需要,还可以设置不同压缩比 ,这个命令特别适合做RAMDISK时候使用
-m (设置压缩算法) 选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
x=[0 | 5 | 9 ] 5 设置压缩等级。 
m={MethodID} Deflate 设置压缩算法:Copy、Deflate、Deflate64、BZip2。
fb={NumFastBytes} 32 设置 Deflate 编码器的单词大小。
pass={NumPasses} 1 设置 Deflate 编码器的传送大小。
x=[0 | 5 | 9 ]
设置压缩等级
压缩等级 说明
0 不压缩。
5 默认的压缩等级。
9 最大压缩等级。压缩后的文件会更小。但是在压缩的时候会比较慢而且需要较多的物理内存。
fb={NumFastBytes}
设 置 Deflate 编码器的单词大小。您可以在 3255 范围之内更改。在 Deflate 算法下,它的默认值是 32;在 Deflate 64 算法下,它的默认值是 64。如果要压缩的多个文件中,有很多排列相同的字节,比如说内容及格式极为相同的两个纯文本文档,那么在压缩的时候如果有较大的单词大小,将会在一定程 度上提高压缩比。所以,通常情况下,其数量越大,压缩后的文件就会越小。但是在压缩和解压缩的时候会比较慢而且需要较多的物理内存。
pass={NumPasses}
设置 Deflate 编码器的传送大小。您可以在 14 范围之内更改。在 Deflate 算法下,它的默认值是 1;在 Deflate 64 算法下,它的默认值是 3。此项可略微提升压缩比,但并不明显。

GZip

除了 GZip 不支持“储存”压缩算法之外,GZip 和 Zip 一样使用着相同的参数。

7z

参数 默认 说明

x=[0 | 1 | 5 | 7 | 9 ] 5 设置压缩等级。

s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g] on 设置固实模式。

f=[off | on] on 开启或关闭可执行文件压缩过滤器。

hc=[off | on] on 开启或关闭档案文件头压缩。

hcf=[off | on] on 开启或关闭档案文件头完全压缩。

he=[off | on] off 开启或关闭档案文件头加密。

b{C1}[s{S1}]:{C2}[s{S2}] 设置编码器之间绑定。

{N}={MethodID}[:param1][:param2][..] LZMA 设置压缩算法:LZMA、PPMd、BZip2、Deflate、BCJ、BCJ2、Copy。

mt=[off | on] off 设置多线程模式。

x=[0 | 1 | 5 | 7 | 9 ]

设置压缩等级

压缩等级 说明

0 不压缩.

1 快速压缩:LZMA 快速算法、32KB 字典大小、HC3 Match finder、BCJ 过滤器。

5 正常压缩:LZMA 标准算法、2 MB 字典大小、BT4 Match finder、单词大小为 32、BCJ 过滤器。

7 最大压缩:LZMA 最大算法、8 MB 字典大小、BT4 Match finder、单词大小为 64、BCJ 过滤器。

9 极限压缩:LZMA 最大算法、32 MB 字典大小、BT4b Match finder、单词大小为 64、BCJ2 过滤器。

s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g)]

开启或关闭固实模式。此选项的默认值是 s=on。开启或关闭固实压缩档案模式。在创建固实压缩档案模式中,它把压缩档案中的所有文件都当成一个连续数据流来看待。通常情况下,固实压缩可增加压 缩比,特别是在添加大量小文件的时候。

e 为每一种文件扩展名使用单独的固实数据流

{N}f 设置在一个固实数据流种文件的个数

{N}b | {N}k | {N}m | {N}g 设置固实数据流的大小(字节)

不同的压缩等级对固实数据流大小的限制:

压缩等级 大小

储存 0 B

快速 16 MB

正常 256 MB

最大 1 GB

极限 4 GB

对固实数据流大小的限制虽然能应响到压缩比,但是它还是有相当多的优势:

万一压缩档案损坏,并不会丢失所有数据。

减少了文件的释放时间。

在当前的版本中,您只能更新在压缩时未选择“创建固实压缩档案”的压缩档案。也就是说当前版本不支持固实压缩档案的更新。

示例:

-s=100f10m

设置固实模式使每个固实数据流种最多 100 文件,并且最大 10 MB 。

f=[off | on]

开启或关闭可执行文件压缩过滤器:dll、exe、ocx、sfx、sys。它用于 BCJ2 过滤器(使用极限压缩)及 BCJ 过滤器中。此选项的默认值是 f=on.

hc=[off | on]

开启或关闭档案文件头压缩。此选项的默认值是 hc=on。如果开启档案文件头压缩,一部分档案的文件头将使用 LZMA 算法进行压缩。

hcf=[off | on]

开启或关闭档案文件头完全压缩。此选项的默认值是 hcf=on。如果开启档案文件头完全压缩,那么此压缩档案只有 7-Zip 2.30 beta 25 及更高的版本才能支持。

he=[off | on]

开启或关闭档案文件头加密。此选项的默认值是 he=off。

{N}

设置算法的顺序。它也可以用算法关联参数。最小值为 0。含有从号的算法将被首先使用。

b{C1}[s{S1}]:{C2}[s{S2}]

将输出流 S1 及编码器 C2 中的输入流 S2 与编码器 C1 绑定。如果未指定流的大小,那么大小将为 0

通常情况下,编码器有一个输入流及一个输出流。而在 7z 中,一些编码器有多个输入及输出流。

举个例子,BCJ2 编码器有有关输入流及四个输出流。

mt=[off | on]

开 启或关闭多线程压缩模式。在多线程支持模式中,7-Zip 将使用两个线程来进行压缩。这样的话,对于多处理器系统,那么压缩速度将提升 70-80%。对于 Pentium 4 超线程处理器,压缩速度将提升 25% 左右。但解压缩时只使用单独线程。注意!此选项仅对 LZMA 压缩算法有效。

{N}={MethodID}[:param1][:param2] ... [:paramN]

设置压缩算法。在 7z 格式中,您可以使用许多压缩算法。此选项的默认算法是 LZMA。

此参数必须是下列格式中的任意一种:

{ParamName}={ParamValue}。

{ParamName}{ParamValue},{ParamValue} 是一个数值,并且 {ParamName} 中不包含数字。

支持的压缩算法:

MethodID 说明

LZMA 基于 LZ 之上的压缩算法。

PPMd 基于 Dmitry Shkarin 之上的算法 PPMdH 并加以优化。通常能对纯文本提供高压缩比及较快的解压缩速度。

BZip2 基于 BWT 的标准压缩算法。通常能对纯文本提供较高压缩比及相当不错的解压缩速度。

Deflate ZIP 及 GZip 格式的标准压缩算法。没有很高的压缩比。但是它拥有十分快的压缩及解压缩速度。Deflate 压缩算法只支持 32 KB 字典大小。

BCJ (CALL、JUMP)32 位 x86 可执行文件转换器。

BCJ2 (CALL、JUMP、JCC)32 位 x86 可执行文件转换器(第二版)。

Copy 不压缩。

LZMA
LZMA 是基于 Lempel-Ziv(由以色列数学家 A.Lempel 和 J.Ziv 共同开发的压缩算法)之上的压缩算法。它能提供相当快的解压缩速度(约比压缩快 1020 倍)。对内存的需求也不尽相同(详细信息请参见 d={Size}[b|k|m] 选项)。
参数 默认值 说明
a=[0|1|2] 1 设置压缩等级
d={Size}[b|k|m] 20 设置字典大小
mf={MF_ID} bt4 设置匹配器
fb={N} 32 设置紧缩字节数量
lc={N} 3 设置 Literal Context 块数 - [0, 8]
lp={N} 0 设置 Literal Pos 块数 - [0, 4]
pb={N} 2 设置 Pos 块数 - [0, 4]
a=[0|1|2]
设置压缩等级:0=快速、1=正常、2=最大压缩。默认值为 1
d={Size}[b|k|m]
设 置 LZMA 压缩算法的字典大小。您可以使用字节、KB 或 MB 来指定此项。字典大小的最大值为 256 MB=2^28 字节。正常模式下,LZMA 的字典大小默认值为 21(2 MB) ;最大模式(-mx=7)下为 23(8 MB);极限模式(-mx=9)下为 25(32 MB)。如果您未指定 [b|k|m] 项,字典大小将自动根据压缩等级来选择相应的单位。对于 LZMA 算法的文件解压缩,若压缩文件的字典大小为 64 MB,则解压缩时就需要 64 兆可用的物理内存。

mf={MF_ID}

设 置 LZMA 压缩算法的匹配器。默认算法为 bt4。bt* 类的算法所需的内存比 pat* 类所需的内存少。通常情况下 bt4 的工作速度比 pat* 快得多,然而部分文件格式在 pat* 算法中可以工作得很快。hc* 类算法并没有很好得压缩比,但是它与快速模式(a=0)结合使用通常会工作得相当快。所需内存依字典大小而定(参见下表)。

MF_ID 所需内存 说明

bt2 d×9.5 + 1 MB 二进制树;2 散列字节。

bt3 d×9.5 + 65 MB 二进制树;2-3(完整) 散列字节。

bt4 d×9.5 + 6 MB 二进制树;2-3-4 散列字节。

bt4b d×9.5 + 34 MB 二进制树;2-3-4(大) 散列字节。

pat2r d×26 + 1 MB Patricia 树;2-位节点;可移动。

pat2 d×38 + 1 MB Patricia 树;2-位节点。

pat2h d×38 + 77 MB Patricia 树;2-位节点;2-3 散列字节。

pat3h d×62 + 85 MB Patricia 树;3-位节点;2-3 散列字节。

pat4h d×110 + 101 MB Patricia 树;4-位节点;2-3 散列字节。

hc3 d×5.5 + 1 MB Hash Chain;-3 散列字节。

hc4 d×5.5 + 6 MB Hash Chain;2-3-4 散列字节。

注意:操作系统同样需要一部分物理内存来维持系统得正常运行。所以至少要剩余 32 可用物理内存。

fb={N}

设置 LZMA 压缩算法的紧缩字节。有效范围从 5255。正常模式下默认值为 32;最大模式下为 64 。通常情况下,较大的数值能略微提高压缩比。但同时也会降低压缩速度。

lc={N}

设置 Literal Context 位数。有效范围从 08。默认值为 3。有时压缩档案中含有大文件会自动使用 lc=4

lp={N}

设置 Literal Pos 位数。有效范围从 04。默认值为 0

pb={N}

设置 Pos 位数。有效范围从 04。默认值为 2

PPMd

PPMd 是 PPM-based 压缩算法的简写。它基于 Dmitry Shkarin 的算法 PPMdH 并对其源代码加以优化。PPMd 通常能对纯文本提供高压缩比及较快的解压缩速度。压缩和解压缩的速度完全相同,所需的内存大小也一样。

参数 默认值 说明

mem={Size}[b|k|m] 24 设置 PPMd 算法使用内存。

o={Size} 6 设置 PPMd 算法压缩命令。

mem={Size}[b|k|m]

设 置 PPMd 算法使用的内存多少。您可以使用字节、KB 或 MB 来指定此项。最大值为 2 GB=2^31 字节;默认值为 24(16MB)。如果您未指定 [b|k|m] 项,字典大小将自动根据压缩等级来选择相应的单位。PPMd 在压缩和解压缩时所需的内存大小是相同的。

o={Size}

设置 PPMd 算法压缩命令。其大小必须在 [2,32] 范围内。默认值为 6

BCJ2

BCJ2 是 32 位 x86 可执行文件转换器(第二版)。它通过转换分支指令来对文件进行进一步压缩。

BCJ2 编码器有一个输入流和四个输出流:

s0:干流。提供进一步的压缩。

s1:CALL 值转换流。提供进一步的压缩。

s2:JUMP 值转换流。提供进一步的压缩。

s3:服务流。它已经备压缩过。

如果使用 LZMA 压缩算法,s1 及 s2 流的字典大小将会比 s0 流的小(512 KB)。

示例

1
2
3
4
7z a -tzip archive.zip *.jpg -m0 #不压缩而直接将 *.jpg 文件添加到 archive.zip 档案。
7z a -t7z archive.7z *.exe *.dll -m0=BCJ -m1=LZMA:d=21 -ms -mmt #添加 *.exe 及 *.dll 文件到固实压缩档案 archive.7z。使用 LZMA 压缩算法、2 MB 字典大小及 BCJ 转换器。压缩将开启多线程优化(如果可用)。
7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 #添加 *.exe 及 *.dll 文件到压缩档案 archive.7z。使用 LZMA 压缩算法、BCJ2 转换器、为主输出流(s0)使用 8 MB 字典大小、LZMA 算法为 BCJ2 转换器的 s1 及 s2 输出流使用 512 KB 字典大小。
7z a -t7z archive.7z *.txt -m0=PPMd #添加 *.txt 文件到压缩档案 archive.7z。 使用 PPMd 压缩算法。

UEFI

硬盘安装Ubuntu Dektop

  1. 使用easyBCD 生成引导项,redhat、CentOS等使用Linux/BSD选项
    或者编辑menu.lst
    1
    2
    3
    4
    5
    title Install Ubuntu
    root (hd0,1)
    kernel vmlinuz boot=casper iso-scan/filename=/ubuntu-xxxx-desktop-i386.iso locale=en_US.UTF-8
    initrd initrd.lz
    boot

*注意(hd0,5)表示第5个分区
title install Ubuntu
sudo umount -l /isodevice

  1. 安装windows 7的时候 ,如果选择建立新的分区,那么在C盘前面还会产生一个隐藏分区, 磁盘管理工具给这个隐藏分区分配一个盘符。
    下载Grub4dos 0.4.4。解压出来后,把grldr、grldr.mbr、grub.exe(注意一定要有grldr.mbr,XP就不用了,如果是vista、win7就一定要有grldr.mbr,切记!)丢到隐藏分区
    最新版是grldr.uefi了

boot.ini 文件

1
2
3
4
5
6
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
c:\grldr.mbr="grub"

grldr.mbr,而不是grldr,这与XP是不同的。
而蓝字部分完全可以不写。
这个boot.ini同样丢进隐藏分区去。

  1. 把隐藏分区的盘符收回!

  2. 复制镜像文件中casper目录下的initrd.gz和vmlinuz到C盘根目录

重启即可进行硬盘安装了。如果安装停留在grub里面, 那是因为写错了, 在grub中手动输入
root (hd0,1)
kernel vmlinuz boot=casper iso-scan/filename=/ubuntu-xxxx-desktop-i386.iso
boot
进行启动

  1. 安装完重启后会发现无法进入Windows 7,需要
    编辑/boot/grub/menu.lst
    加入如下代码:
    title Microsoft Windows 7
    root (hd0,0)
    makeactive
    chainloader +1

没隐藏分区就把以上原本放进隐藏分区的东西(grldr、grldr.mbr、grub.exe、menu.lst boot.ini)统统丢进C盘即可。

以下为转载, 未经测试:

WIN7中删除多余的启动引导项

多次安装双系统,有时候会存在多个启动引导项目,这些引导项目没有用处,如果删除如下:
使用Windows7的内置命令就可以删除你指定的启动引导项,这个命令就是BCDEdit。
打开CMD窗口,在命令输入bcdedit并回车,可查看当前所有启动项。
每个启动项都有自己的ID,如:{bootmgr}、{ntldr}、{current},
删除某个启动引导项的命令是: bcdedit/delete{ID}/f 注意:ID需要使用上面启动项的大括号中的序号代替。 current的引导不要删除,使用中的linux引导不要删除。

WIN7 修复MBR

当安装双系统后,主引导安装到linux系统情况下,如果直接格式化linux所在的盘,则造成windows无法引导,此时需要window MBR进行修复。xp可以使用winPE进行修复,而Win7系统盘不再带有PE功能,不过可以使用其他方法,如下:
1、在光驱插入win7安装盘或者用USB启动(win7支持USB直接启动安装,不过USB方法我没有测试过);
2、选择完语言选项后,进入下一步,选择底下的系统修复而不是继续安装;
3、自动搜索完已经安装的系统后,进入下一步;
4、不要让Windows自动修复,没用的,进入命令提示符模式;
5、先输入命令bootrec /fixmbr 回车,再输入命令bootrec /fixboot 回车;
6、重启系统即可重新恢复Win7启动模式。

win7修复mbr仍有grub界面
解决方法:
1、win7的安装盘里有这个文件,bootsect.exe。
2、把它复制到系统盘。然后在win7命令行运行bootsect /nt60 /mbr
3、成功后mbr的grub就被nt60覆盖了。
4、重启后将不会再有grub引导。

UEFI Win7/8/Ubuntu
https://forum.ubuntu.org.cn/viewtopic.php?f=139&t=460579
https://www.zhihu.com/question/22502670
http://teliute.org/linux/Ubsetup/jichu1/jichu1.html

uefi:
https://www.zhihu.com/question/22502670
http://www.insanelymac.com/forum/topic/305730-help-clover-boot-windows-and-ubuntu/
http://www.nc1234.com/html/changjianguzhangjijiejue/2013/0711/90.html

http://www.partition-tool.com/personal.htm
https://forum.ubuntu.org.cn/viewtopic.php?f=139&t=460579

也可以选择不安装grub4dos,采用下面的方式 系统安装好以后,使用安装界面中的终端, 输入下面的命令生成ubuntu.boot:

#使用df命令查看分区情况
sudo dd if=/dev/sda/[boot 分区] of=[输出目录,比如 ./ubuntu.boot] bs=512 count=1
http://www.mepis.org/docs/en/index.php?title=GRUB_from_command_line

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
git remote add [shortname] [url]  要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用
git fetch [shortname] #[new branch] master -> pb/master
git checkout --track origin/br-2.1.2.1 :
git fetch,可以将远程分支信息获取到本地,再运行 git checkout -b local-branchname origin/remote_branchname 就可以将远程分支映射到本地命名为local-branchname 的一分支。
git branch -a
git branch -d br-2.1.2.1 删掉刚才track的分支
git checkout -b br-2.1.1.1 origin/br-2.1.2.1


git pull == git fetch + git merge
git merge branch1 将branch1合并到master
下面使用meld手工解决冲突:
git mergetool -t meld
Merging the files: xxx

Normal merge conflict for 'main.c':
{local}: modified
{remote}: modified
Hit return to start merge resolution tool (meld):
这时会弹出meld的三向比较窗口,解决了冲突后提交,git会自动添加上备注,描述分支合并情况。

git remote rename pb paul ,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了paul/master。
git remote rm xx 移除对应的远端仓库

git remote show origin

从远程分支 checkout 出来的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程分支有直接联系的本地分支。在跟踪分支里输入git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在这些分支里运行git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
http://www.open-open.com/lib/view/open1328069889514.html
http://blog.csdn.net/arkblue/article/details/9790129

在克隆仓库时,Git 通常会自动创建一个名为 master 的分支来跟踪 origin/master。这正是git push 和 git pull 一开始就能正常工作的原因。

从远程仓库抓取数据
正如之前所看到的,可以用下面的命令从远程仓库抓取数据到本地:

$ git fetch [remote-name]
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。(我们会在第三章详细讨论关于分支的概念和操作。)

如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。(说明:事先需要创建好远程的仓库,然后执行:git remote add [仓库名] [仓库url],git fetch [远程仓库名],即可抓取到远程仓库数据到本地,再用git merge remotes/[仓库名]/master就可以将远程仓库merge到本地当前branch。这种分支方式比较适合独立-整合开发,即各自开发测试好后再整合在一起。比如,Android的Framework和AP开发。

可以使用–bare 选项运行git init 来设定一个空仓库,这会初始化一个不包含工作目录的仓库。

$ cd /opt/git

$ mkdir project.git

$ cd project.git

$ git –bare init

这时,Join,Josie 或者Jessica 就可以把它加为远程仓库,推送一个分支,从而把第一个版本的工程上传到仓库里了。)

如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。

推送数据到远程仓库
项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库。实现这个任务的命令很简单: git push [remote-name] [branch-name]。如果要把本地的 master 分支推送到 origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令:

$ git push origin master
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送。有关推送数据到远程仓库的详细内容见第三章。

查看远程仓库信息
我们可以通过命令 git remote show [remote-name] 查看某个远程仓库的详细信息,比如要看所克隆的origin 仓库,可以运行:

$ git remote show origin

  • remote origin
    URL: git://github.com/schacon/ticgit.git
    Remote branch merged with ‘git pull’ while on branch master
    master
    Tracked remote branches
    master
    ticgit
    除了对应的克隆地址外,它还给出了许多额外的信息。它友善地告诉你如果是在 master 分支,就可以用git pull 命令抓取数据合并到本地。另外还列出了所有处于跟踪状态中的远端分支。

实际使用过程中,git remote show 给出的信息可能会像这样:

$

  • remote origin
    URL: git@github.com:defunkt/github.git
    Remote branch merged with ‘git pull’ while on branch issues
    issues
    Remote branch merged with ‘git pull’ while on branch master
    master
    New remote branches (next fetch will store in remotes/origin)
    caching
    Stale tracking branches (use ‘git remote prune’)
    libwalker
    walker2
    Tracked remote branches
    acl
    apiv2
    dashboard2
    issues
    master
    postgres
    Local branch pushed with ‘git push’
    master:master
    它告诉我们,运行 git push 时缺省推送的分支是什么(译注:最后两行)。它还显示了有哪些远端分支还没有同步到本地(译注:第六行的 caching 分支),哪些已同步到本地的远端分支在远端服务器上已被删除(译注:Stale tracking branches 下面的两个分支),以及运行 git pull 时将自动合并哪些分支(译注:前四行中列出的 issues 和 master 分支)。(此命令也可以查看到本地分支和远程仓库分支的对应关系。)

列出所有分支
tiger@tiger-laptop ~/t/gittest> git branch
branch1

  • master

切换分支
tiger@tiger-laptop ~/t/gittest> git checkout branch1
Switched to branch “branch1”
tiger@tiger-laptop ~/t/gittest> git branch

  • branch1
    master

合并分支

现假设我们在master分支中,需要将branch1合并到master
tiger@tiger-laptop ~/t/gittest>
Auto-merged main.c
CONFLICT (content): Merge conflict in main.c
Automatic merge failed; fix conflicts and then commit the result.
这时main.c中会显示冲突。