-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
847 lines (582 loc) · 34.3 KB
/
index.html
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
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>ahern88的技术小站</title>
<meta name="description" content="ahern88的技术小站">
<meta name="keywords" content="JAVA,架构,微服务,分布式,足球,C罗">
<meta property="og:type" content="website"/>
<meta property="og:title" content=""/>
<meta property="og:description" content=""/>
<meta property="og:locale" content="cn" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://ahern88.github.io/index.html" />
<meta property="og:site_name" content="ahern88" />
<meta property="article:publisher" content="" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "",
"description": "",
"publisher": {
"@type": "Organization",
"name": "ahern88"
},
}
</script>
<meta property="algolia:search" data-application-id="J3Z27P68M3" data-api-key="4eaf4c93378e153e99394f6d0baecf21" data-index-name="post_index">
<link rel="icon" href="./images/favicon.ico">
<link rel="stylesheet" href="/dist/build.css?v=1650731893283.css">
<link rel="stylesheet" href="/dist/custom.css?v=1650731893283.css">
<script>
window.isPost = false
window.aomori = {
}
window.aomori_logo_typed_animated = true
window.aomori_search_algolia = true
</script>
<meta name="generator" content="Hexo 6.1.0"></head>
<body>
<div class="container">
<header class="header">
<div class="header-type">
<div class="header-type-inner">
<div id="typed-strings" style="display:none">
<p>ahern88的技术小站</p>
</div>
<a class="header-type-title" id="typed" href="/"></a>
</div>
</div>
<div class="header-menu">
<div class="header-menu-inner">
<a href="/">首页</a>
<a href="/archives">文章</a>
<a href="/aboutme">关于我</a>
</div>
<div class="header-menu-social">
<a class="social" target="_blank" href="https://www.github.com/ahern88">
<box-icon type='logo' name='github'></box-icon>
</a>
<a class="social" target="_blank" href="https://twitter.com/ailinxi2015">
<box-icon type='logo' name='twitter'></box-icon>
</a>
</div>
</div>
<div class="header-menu-mobile">
<div class="header-menu-mobile-inner" id="mobile-menu-open">
<i class="icon icon-menu"></i>
</div>
</div>
</header>
<div class="header-menu-mobile-menu">
<div class="header-menu-mobile-menu-bg"></div>
<div class="header-menu-mobile-menu-wrap">
<div class="header-menu-mobile-menu-inner">
<div class="header-menu-mobile-menu-close" id="mobile-menu-close">
<i class="icon icon-cross"></i>
</div>
<div class="header-menu-mobile-menu-list">
<a href="/">首页</a>
<a href="/archives">文章</a>
<a href="/aboutme">关于我</a>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="main">
<section class="inner">
<section class="inner-main">
<div class="index">
<article
id="post-git-restore-worktree-by-packfile"
class="article article-type-post"
>
<div class="article-inner">
<div class="article-body">
<header class="article-title">
<a href="/2022/04/23/git-restore-worktree-by-packfile/">使用pack文件恢复Git工作区</a>
</header>
<div class="article-entry post-inner-html">
<h2 id="0-本文介绍"><a href="#0-本文介绍" class="headerlink" title="0. 本文介绍"></a>0. 本文介绍</h2><p>了解过Git原理的同学应该都知道,Git底层是一个kv的文件数据库,Git管理的所有的文件都存在objects文件夹中,而当我们从远端仓库clone数据到本地的过程中主要传递两种数据:</p>
<ul>
<li><p>branch和tag对应的commit id数据列表</p>
</li>
<li><p>服务器仓库生成的pack文件(包含所有Git历史提交的数据版本)</p>
</li>
</ul>
<p>那么本文就介绍如何通过pack文件和一个commit id恢复本地工作区,从而去加深了解Git的底层原理。</p>
<hr>
<h2 id="1-新建仓库并加入已有的pack文件"><a href="#1-新建仓库并加入已有的pack文件" class="headerlink" title="1. 新建仓库并加入已有的pack文件"></a>1. 新建仓库并加入已有的pack文件</h2><p>假设我们拿到服务器仓库中的pack文件 pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack 在/tmp目录下</p>
<pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">cd</span> study_git
<span class="token function">git</span> init demo01 <span class="token comment"># 创建demo01的git目录</span>
<span class="token builtin class-name">cd</span> demo01
<span class="token function">cp</span> /tmp/pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack <span class="token builtin class-name">.</span>
</code></pre>
<hr>
<h2 id="2-基于pack文件生成pack的idx索引文件"><a href="#2-基于pack文件生成pack的idx索引文件" class="headerlink" title="2. 基于pack文件生成pack的idx索引文件"></a>2. 基于pack文件生成pack的idx索引文件</h2><p>pack中包含了所有的object数据,但它时一个压缩文件,需要有对应idx索引文件才能完成object数据的查找,现在我们有了pack文件,那么我们可以基于<code>index-pack</code>命令去生成对应的idx文件,idx文件包含是object对应的hash值和对应的存储位置,可以快速定位。</p>
<pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">cd</span> demo01
<span class="token function">git</span> index-pack -o pack-598b51485951bbfd3cd893ef230beb0e96ea172c.idx pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack
598b51485951bbfd3cd893ef230beb0e96ea172c
<span class="token function">ls</span> -l
pack-598b51485951bbfd3cd893ef230beb0e96ea172c.idx
pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack</code></pre>
</div>
</div>
<div class="article-badge">
</div>
</div>
<footer class="article-footer">
<div class="article-more-info">
<div class="article-date">
<time datetime="2022-04-23T13:55:17.000Z" itemprop="datePublished">2022-04-23</time>
</div>
<div class="article-category">
<a class="article-category-link" href="/categories/Git/">Git</a>
</div>
<div class="article-tag">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Git/" rel="tag">Git</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E5%B7%A5%E5%85%B7/" rel="tag">工具</a></li></ul>
</div>
</div>
</footer>
</article>
<article
id="post-git-commands"
class="article article-type-post"
>
<div class="article-inner">
<div class="article-body">
<header class="article-title">
<a href="/2022/04/18/git-commands/">Git命令集合</a>
</header>
<div class="article-entry post-inner-html">
<p>作为普通的git操作者,git常用的只是上层命令,这些命令只能完成基本的操作。</p>
<p>而要了解git底层原理,必须要了解底层的命令才行。</p>
<h2 id="1-Git主要的上层命令"><a href="#1-Git主要的上层命令" class="headerlink" title="1. Git主要的上层命令"></a>1. Git主要的上层命令</h2><pre class="language-bash" data-language="bash"><code class="language-bash">主要的上层命令
<span class="token function">add</span> 添加文件内容至索引
am 应用邮箱格式的系列补丁
archive 基于一个指定的树创建文件存档
bisect 通过二分查找定位引入 bug 的提交
branch 列出、创建或删除分支
bundle 通过归档移动对象和引用
checkout 切换分支或恢复工作区文件
cherry-pick 应用一些现存提交引入的修改
citool git-commit 的图形替代界面
clean 从工作区中删除未跟踪文件
clone 克隆仓库到一个新目录
commit 记录变更到仓库
describe 基于一个现存的引用为一个对象起一个可读的名称
<span class="token function">diff</span> 显示提交之间、提交和工作区之间等的差异
fetch 从另外一个仓库下载对象和引用
format-patch 准备电子邮件提交的补丁
gc 清除不必要的文件和优化本地仓库
gitk Git 仓库浏览器
<span class="token function">grep</span> 输出和模式匹配的行
gui 一个便携的 Git 图形客户端
init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库
log 显示提交日志
maintenance 运行任务以优化仓库数据
merge 合并两个或更多开发历史
<span class="token function">mv</span> 移动或重命名一个文件、目录或符号链接
notes 添加或检查对象注释
pull 获取并整合另外的仓库或一个本地分支
push 更新远程引用和相关的对象
range-diff 比较两个提交范围(如一个分支的两个版本)
rebase 在另一个分支上重新应用提交
reset 重置当前 HEAD 到指定状态
restore 恢复工作区文件
revert 回退一些现存提交
<span class="token function">rm</span> 从工作区和索引中删除文件
shortlog <span class="token string">'git log'</span> 输出摘要
show 显示各种类型的对象
sparse-checkout Reduce your working tree to a subset of tracked files
stash 贮藏脏工作区中的修改
status 显示工作区状态
submodule 初始化、更新或检查子模组
switch 切换分支
tag 创建、列出、删除或校验一个 GPG 签名的标签对象
worktree 管理多个工作区</code></pre>
<h2 id="2-Git辅助命令"><a href="#2-Git辅助命令" class="headerlink" title="2. Git辅助命令"></a>2. Git辅助命令</h2><pre class="language-bash" data-language="bash"><code class="language-bash">辅助命令/操作者
config 获取和设置仓库或者全局选项
fast-export Git 数据导出器
fast-import Git 快速数据导入器后端
filter-branch 重写分支
mergetool 运行合并冲突解决工具以解决合并冲突
pack-refs 打包头和标签以实现高效的仓库访问
prune 删除对象库中所有不可达对象
reflog 管理 reflog 信息
remote 管理已跟踪仓库
repack 打包仓库中未打包对象
replace 创建、列出、删除对象替换引用
辅助命令/询问者
annotate 使用提交信息注释文件行
blame 显示文件每一行最后修改的版本和修改者
bugreport 收集信息以供用户提交错误报告
count-objects 计算未打包对象的数量和磁盘空间占用
difftool 使用常见的差异工具显示更改
<span class="token function">fsck</span> 验证仓库中对象的连通性和有效性
gitweb Git web 界面(Git 仓库的 web 前端)
<span class="token builtin class-name">help</span> 显示 Git 的帮助信息
instaweb 在 gitweb 中即时浏览您的工作仓库
merge-tree 在不动索引的情况下显示三路合并
rerere 重用冲突合并的解决方案记录
show-branch 显示分支和提交
verify-commit 检查 GPG 提交签名
verify-tag 检查标签的 GPG 签名
whatchanged 显示每一个提交引入的差异日志</code></pre>
<h2 id="3-Git低级命令(底层命令)"><a href="#3-Git低级命令(底层命令)" class="headerlink" title="3. Git低级命令(底层命令)"></a>3. Git低级命令(底层命令)</h2><pre class="language-bash" data-language="bash"><code class="language-bash">低级命令/操作者
apply 应用一个补丁到文件和/或索引区
checkout-index 从索引拷贝文件到工作区
commit-graph 写入和校验 Git 提交图文件
commit-tree 创建一个新的提交对象
hash-object 从一个文件计算对象 ID,并可以创建 blob 数据对象
index-pack 从一个现存的包存档文件创建包索引
merge-file 运行一个三路文件合并
merge-index 对于需要合并的文件执行合并
mktag 创建一个有额外验证的标签对象
mktree 基于 ls-tree 的格式化文本创建一个树对象
multi-pack-index 写入和校验多包索引
pack-objects 创建对象的存档包
prune-packed 删除已经在包文件中的多余对象
read-tree 将树信息读取到索引
symbolic-ref 读取、修改和删除符号引用
unpack-objects 从打包文件中解压缩对象
update-index 将工作区的文件内容注册到索引
update-ref 安全地更新存储于引用中的对象名称
write-tree 从当前索引创建一个树对象
低级命令/询问者
cat-file 提供仓库对象的内容、类型或大小
cherry 查找尚未应用到上游的提交
diff-files 比较工作区和索引区中的文件
diff-index 将一个树和工作区或索引做比较
diff-tree 比较两个树对象的文件内容和模式
for-each-ref 对每一个引用输出信息
for-each-repo 在一个仓库列表上运行 Git 命令
get-tar-commit-id 从 git-archive 创建的归档文件中提取提交 ID
ls-files 显示索引和工作区中文件的信息
ls-remote 显示一个远程仓库的引用
ls-tree 显示一个树对象的内容
merge-base 为了合并查找尽可能好的公共祖先提交
name-rev 查找给定版本的符号名称
pack-redundant 查找冗余的包文件
rev-list 按时间顺序列出提交对象
rev-parse 选出并处理参数
show-index 显示打包归档索引
show-ref 显示本地仓库中的引用
unpack-file 用 blob 数据对象的内容创建一个临时文件
var 显示一个Git逻辑变量
verify-pack 校验打包的Git存仓文件
低级命令/同步仓库
daemon 一个非常简单的 Git 仓库服务器
fetch-pack 从另一个仓库获取缺失的对象
http-backend Git HTTP 协议的服务端实现
send-pack 使用 Git 协议推送对象到另一个仓库
update-server-info 更新辅助信息文件以帮助哑协议服务
低级命令/内部助手
check-attr 显示 gitattributes 信息
check-ignore 调试 gitignore / exclude 文件
check-mailmap 显示联系人的规范名称和电子邮件
check-ref-format 确保引用名称格式正确
<span class="token function">column</span> 以列的方式显示数据
credential 检索和存储用户密码
credential-cache 在内存中临时存储密码的助手
credential-store 在磁盘存储密码的助手
fmt-merge-msg 生成一个合并提交信息
hook Run <span class="token function">git</span> hooks
interpret-trailers 添加或解析提交说明中的结构化信息
mailinfo 从单个电子邮件中提取补丁和作者身份
mailsplit 简单的 UNIX mbox 邮箱切分程序
merge-one-file 与 git-merge-index 一起使用的标准向导程序
patch-id 计算一个补丁的唯一 ID
sh-i18n 为 shell 脚本准备的 Git 国际化设置代码
sh-setup 常用的 Git shell 脚本设置代码
stripspace 删除不必要的空白字符</code></pre>
<h2 id="4-Git其他命令"><a href="#4-Git其他命令" class="headerlink" title="4. Git其他命令"></a>4. Git其他命令</h2><pre class="language-bash" data-language="bash"><code class="language-bash">与其它系统交互
archimport 将一个 GNU Arch 仓库导入到 Git
cvsexportcommit 将一个提交导出到 CVS 检出中
cvsimport 从另外一个人们爱恨的配置管理系统中拯救您的数据
cvsserver Git 的一个 CVS 服务模拟器
imap-send 从标准输入将一组补丁发送到IMAP文件夹
p4 导入和提交到 Perforce 仓库中
quiltimport 将一个 quilt 补丁集应用到当前分支。
request-pull 生成待定更改的摘要
send-email 通过电子邮件发送一组补丁
svn Subersion 仓库和 Git 之间的双向操作
外部命令
cli</code></pre>
</div>
</div>
<div class="article-badge">
</div>
</div>
<footer class="article-footer">
<div class="article-more-info">
<div class="article-date">
<time datetime="2022-04-17T16:33:23.000Z" itemprop="datePublished">2022-04-18</time>
</div>
<div class="article-category">
<a class="article-category-link" href="/categories/Git/">Git</a>
</div>
<div class="article-tag">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Git/" rel="tag">Git</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E5%B7%A5%E5%85%B7/" rel="tag">工具</a></li></ul>
</div>
</div>
</footer>
</article>
<article
id="post-tidb-architecture-philosophy"
class="article article-type-post"
>
<div class="article-inner">
<div class="article-body">
<header class="article-title">
<a href="/2022/04/10/tidb-architecture-philosophy/">TiDB的架构哲学与思考</a>
</header>
<div class="article-entry post-inner-html">
<p>TiDB是PingCAP公司研发的一款新一代的分布式数据库,能应对OLTP与OLAP等混合场景的应用,在各大公司应用的非常广泛,让我们可以抛弃传统的分库分表等方案,分享来自PingCAP的首席架构师兼CTO</p>
<h2 id="分享内容"><a href="#分享内容" class="headerlink" title="分享内容"></a>分享内容</h2><h3 id="可插拔的存储"><a href="#可插拔的存储" class="headerlink" title="可插拔的存储"></a>可插拔的存储</h3><p>TODO</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p>本文完全来自b站上开放的meetup视频,因为分享的很好,所以把内容提炼成文字。</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV19q4y1n7D2">【Meetup 分享】TiDB的架构哲学与场景思考</a></li>
<li><a target="_blank" rel="noopener" href="https://www.youtube.com/watch?v=xAiuLJtCZOg">NewSQL大神黄东旭:从0到1,如何设计一个分布式数据库</a></li>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1gz411i7jw/">【TiDB DevCon 2020】TiDB 下一步技术 Roadmap 展望-黄东旭</a></li>
</ul>
</div>
</div>
<div class="article-badge">
</div>
</div>
<footer class="article-footer">
<div class="article-more-info">
<div class="article-date">
<time datetime="2022-04-10T08:52:49.000Z" itemprop="datePublished">2022-04-10</time>
</div>
<div class="article-category">
<a class="article-category-link" href="/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/">数据库</a>
</div>
<div class="article-tag">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/TIDB/" rel="tag">TIDB</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/" rel="tag">数据库</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E6%9E%B6%E6%9E%84/" rel="tag">架构</a></li></ul>
</div>
</div>
</footer>
</article>
<article
id="post-run-gdb-on-macos"
class="article article-type-post"
>
<div class="article-inner">
<div class="article-body">
<header class="article-title">
<a href="/2022/04/09/run-gdb-on-macos/">在MacOS上使用GDB调试C程序</a>
</header>
<div class="article-entry post-inner-html">
<h2 id="1-编写C程序"><a href="#1-编写C程序" class="headerlink" title="1. 编写C程序"></a>1. 编写C程序</h2><p>编写一段简单的C程序 main.c ,并做好验证</p>
<pre class="language-c" data-language="c"><code class="language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdio.h></span></span>
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"hello world\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
i <span class="token operator">=</span> i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>
<span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
<p>编译(保证机器上有装gcc,若没有装可以采用 brew install gcc 完成安装),并执行</p>
<pre class="language-bash" data-language="bash"><code class="language-bash">$ gcc -g main.c -o main.o
$ ./main.o
hello world
<span class="token number">1</span></code></pre>
</div>
</div>
<div class="article-badge">
</div>
</div>
<footer class="article-footer">
<div class="article-more-info">
<div class="article-date">
<time datetime="2022-04-09T01:47:03.000Z" itemprop="datePublished">2022-04-09</time>
</div>
<div class="article-category">
<a class="article-category-link" href="/categories/C%E8%AF%AD%E8%A8%80/">C语言</a>
</div>
<div class="article-tag">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/C%E8%AF%AD%E8%A8%80/" rel="tag">C语言</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/GDB/" rel="tag">GDB</a></li></ul>
</div>
</div>
</footer>
</article>
<article
id="post-git-in-depth-study"
class="article article-type-post"
>
<div class="article-inner">
<div class="article-body">
<header class="article-title">
<a href="/2022/04/05/git-in-depth-study/">一文深入浅出学习Git工具</a>
</header>
<div class="article-entry post-inner-html">
<blockquote>
<p>Git也许在很多人看来只是一款版本控制软件,其实不然,Linus在设计Git时给它的定位并不是版本控制,而是一个包含版本控制能力的文件系统,为什么说它是一款文件系统?在了解Git的实现原理的时候你就会明白为啥它的定位是文件系统。</p>
</blockquote>
<h2 id="0-Git安装"><a href="#0-Git安装" class="headerlink" title="0. Git安装"></a>0. Git安装</h2><p>git分客户端和服务端,一般用户都为客户端安装,服务器主要用来管理远端仓库,一般用git web或gitlab安装。</p>
<p>mac安装git</p>
<pre class="language-bash" data-language="bash"><code class="language-bash">$ brew <span class="token function">install</span> <span class="token function">git</span></code></pre>
<p>检查git是否安装完成</p>
<pre class="language-bash" data-language="bash"><code class="language-bash">$ <span class="token function">git</span> --version
<span class="token function">git</span> version <span class="token number">2.32</span>.0 <span class="token punctuation">(</span>Apple Git-132<span class="token punctuation">)</span></code></pre>
</div>
</div>
<div class="article-badge">
</div>
</div>
<footer class="article-footer">
<div class="article-more-info">
<div class="article-date">
<time datetime="2022-04-05T09:05:20.000Z" itemprop="datePublished">2022-04-05</time>
</div>
<div class="article-category">
<a class="article-category-link" href="/categories/Git/">Git</a>
</div>
<div class="article-tag">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Git/" rel="tag">Git</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E5%B7%A5%E5%85%B7/" rel="tag">工具</a></li></ul>
</div>
</div>
</footer>
</article>
<article
id="post-index"
class="article article-type-post"
>
<div class="article-inner">
<div class="article-body">
<header class="article-title">
<a href="/2022/03/31/index/">从零开始使用GitHub+Hexo搭建个人博客</a>
</header>
<div class="article-entry post-inner-html">
<p>通过本文你能完成自己的个人博客搭建(无需个人主机、个人域名,免费),你的博客将拥有如下功能</p>
<ul>
<li>分类功能</li>
<li>标签功能</li>
<li>搜索功能</li>
<li>评论功能</li>
<li>数据分析</li>
<li>博文发布</li>
</ul>
<hr>
<h2 id="0-安装Hexo"><a href="#0-安装Hexo" class="headerlink" title="0. 安装Hexo"></a>0. 安装Hexo</h2><p>提前先安装node,node中包含npm工具,具体安装node这里不做描述</p>
<pre class="language-bash" data-language="bash"><code class="language-bash">$ <span class="token function">npm</span> <span class="token function">install</span> hexo-cli -g</code></pre>
<p>安装完hexo-cli工具后,就可以开始创建博客了</p>
<pre class="language-bash" data-language="bash"><code class="language-bash">$ hexo init ahern88_github_io
$ <span class="token builtin class-name">cd</span> ahern88_github_io
$ <span class="token function">npm</span> <span class="token function">install</span></code></pre>
<p>到这里博客已经初始化好,可以启动查看demo页面了,先要在本地启动hexo的server</p>
<pre class="language-bash" data-language="bash"><code class="language-bash">$ hexo server
INFO Validating config
INFO Start processing
INFO Hexo is running at http://localhost:4000/ <span class="token builtin class-name">.</span> Press Ctrl+C to stop.</code></pre>
<p>在浏览器中打开 <a target="_blank" rel="noopener" href="http://localhost:4000/">http://localhost:4000/</a> 就能看到默认页面了,不过可能你也发现了默认页面的主题样式并不是你喜欢的,下面我们看如何更换和安装主题。</p>
</div>
</div>
<div class="article-badge">
</div>
</div>
<footer class="article-footer">
<div class="article-more-info">
<div class="article-date">
<time datetime="2022-03-31T15:59:09.000Z" itemprop="datePublished">2022-03-31</time>
</div>
<div class="article-category">
<a class="article-category-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a>
</div>
<div class="article-tag">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Hexo/" rel="tag">Hexo</a></li></ul>
</div>
</div>
</footer>
</article>
</div>
</section>
</section>
<aside class="sidebar sidebar-search-fix">
<div class="search">
<div class="has-icon-right">
<input type="text" class="form-input" id="search" placeholder="SEARCH" autocomplete="off">
<div class="form-icon">
<box-icon name='search' color="#3c4859"></box-icon>
</div>
</div>
<div class="search-result" id="search-ps"></div>
</div>
<div class="widget" id="widget">
<div class="widget-wrap widget-cate">
<div class="widget-title"><span>Categories</span></div>
<div class="widget-inner">
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/C%E8%AF%AD%E8%A8%80/">C语言</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Git/">Git</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/">数据库</a></li></ul>
</div>
</div>
<div class="widget-wrap widget-tags">
<div class="widget-title"><span>Tags</span></div>
<div class="widget-inner">
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/C%E8%AF%AD%E8%A8%80/" rel="tag">C语言</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/GDB/" rel="tag">GDB</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Git/" rel="tag">Git</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Hexo/" rel="tag">Hexo</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/TIDB/" rel="tag">TIDB</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E5%B7%A5%E5%85%B7/" rel="tag">工具</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/" rel="tag">数据库</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E6%9E%B6%E6%9E%84/" rel="tag">架构</a></li></ul>
</div>
</div>
<div class="widget-wrap widget-recent-posts">
<div class="widget-title"><span>Recent Posts</span></div>
<div class="widget-inner">
<ul>
<li>
<a href="/2022/04/23/git-restore-worktree-by-packfile/">使用pack文件恢复Git工作区</a>
</li>
<li>
<a href="/2022/04/18/git-commands/">Git命令集合</a>
</li>
<li>
<a href="/2022/04/10/tidb-architecture-philosophy/">TiDB的架构哲学与思考</a>
</li>
<li>
<a href="/2022/04/09/run-gdb-on-macos/">在MacOS上使用GDB调试C程序</a>
</li>
<li>
<a href="/2022/04/05/git-in-depth-study/">一文深入浅出学习Git工具</a>
</li>
</ul>
</div>
</div>
<div class="widget-wrap widget-archive">
<div class="widget-title"><span>Archive</span></div>
<div class="widget-inner">
<ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2022/">2022</a></li></ul>
</div>
</div>
</div>
<div id="backtop"><i class="icon icon-arrow-up"></i></div>
</aside>
</div>
</div>
<footer class="footer">
<div class="footer-wave">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320"><path fill="#3c4859" fill-opacity="1" d="M0,160L60,181.3C120,203,240,245,360,240C480,235,600,181,720,186.7C840,192,960,256,1080,261.3C1200,267,1320,213,1380,186.7L1440,160L1440,320L1380,320C1320,320,1200,320,1080,320C960,320,840,320,720,320C600,320,480,320,360,320C240,320,120,320,60,320L0,320Z"></path></svg>
</div>
<!-- Please do not remove this -->
<!-- 开源不易,请勿删除 -->
<div class="footer-wrap">
<div class="footer-inner">
ahern88的技术小站 © 2022<br>
Powered By Hexo · Theme By <a href="https://linhong.me/" target="_blank">Aomori</a> · <a href="https://github.com/lh1me/hexo-theme-aomori" target="_blank">Github</a>
</div>
</div>
</footer>
<script src="/dist/build.js?1650731893283.js"></script>
<script src="/dist/custom.js?1650731893283.js"></script>
<!-- Baidu Analytics-->
<script type="text/javascript">
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?f6e09ac3389fb861bbfa7bbceb2a5698";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>