-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
1087 lines (830 loc) · 103 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
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="zh_hans">
<head>
<meta charset="utf-8" />
<meta name="description" content="技术学习博客,记录语言和算法的学习,持续保持提升" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<title> MikhayEeer's Blog</title>
<meta name="generator" content="hexo-theme-ayer">
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" href="/mikhayeeer.github.io/dist/main.css">
<link rel="stylesheet" href="/mikhayeeer.github.io/css/fonts/remixicon.css">
<link rel="stylesheet" href="/mikhayeeer.github.io/css/custom.css">
<script src="https://cdn.staticfile.org/pace/1.2.4/pace.min.js"></script>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@sweetalert2/[email protected]/bulma.min.css"
/>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.js"></script>
<!-- mermaid -->
<style>
.swal2-styled.swal2-confirm {
font-size: 1.6rem;
}
</style>
<link rel="alternate" href="/mikhayeeer.github.io/atom.xml" title="MikhayEeer's Blog" type="application/atom+xml">
</head>
</html>
</html>
<body>
<div id="app">
<main class="content on">
<section class="cover">
<a class="forkMe" href="https://github.com/Shen-Yu/hexo-theme-ayer"
target="_blank"><img width="149" height="149" src="/mikhayeeer.github.io/images/forkme.png"
class="attachment-full size-full" alt="Fork me on GitHub" data-recalc-dims="1"></a>
<div class="cover-frame">
<div class="bg-box">
<img src="/images/cover8.png" alt="image frame" />
</div>
<div class="cover-inner text-center text-white">
<h1><a href="/mikhayeeer.github.io/">MikhayEeer's Blog</a></h1>
<div id="subtitle-box">
<span id="subtitle"></span>
</div>
<div>
</div>
</div>
</div>
<div class="cover-learn-more">
<a href="javascript:void(0)" class="anchor"><i class="ri-arrow-down-line"></i></a>
</div>
</section>
<script src="https://cdn.staticfile.org/typed.js/2.0.12/typed.min.js"></script>
<!-- Subtitle -->
<script>
try {
var typed = new Typed("#subtitle", {
strings: ['小舟从此逝,江海寄余生', '前尘似海,古屋不再', '长乐未央,长毋相忘'],
startDelay: 500,
typeSpeed: 200,
loop: true,
backSpeed: 100,
showCursor: true
});
} catch (err) {
console.log(err)
}
</script>
<div id="main">
<section class="outer">
<div class="notice" style="margin-top:50px">
<i class="ri-heart-fill"></i>
<div class="notice-content" id="broad"></div>
</div>
<script type="text/javascript">
fetch('https://v1.hitokoto.cn')
.then(response => response.json())
.then(data => {
document.getElementById("broad").innerHTML = data.hitokoto;
})
.catch(console.error)
</script>
<style>
.notice {
padding: 20px;
border: 1px dashed #e6e6e6;
color: #969696;
position: relative;
display: inline-block;
width: 100%;
background: #fbfbfb50;
border-radius: 10px;
}
.notice i {
float: left;
color: #999;
font-size: 16px;
padding-right: 10px;
vertical-align: middle;
margin-top: -2px;
}
.notice-content {
display: initial;
vertical-align: middle;
}
</style>
<article class="articles">
<article
id="post-命令行参数【Python】"
class="article article-type-post"
itemscope
itemprop="blogPost"
data-scroll-reveal
>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/mikhayeeer.github.io/2024/10/09/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E3%80%90Python%E3%80%91/"
>Windows Command</a>
</h2>
</header>
<div class="article-meta">
<a href="/mikhayeeer.github.io/2024/10/09/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E3%80%90Python%E3%80%91/" class="article-date">
<time datetime="2024-10-08T16:00:00.000Z" itemprop="datePublished">2024-10-09</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/mikhayeeer.github.io/categories/Programming-Language/">Programming Language</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<p>学习使用python的命令行参数相关库,<br>命令行参数可以用于脚本的参数输入,比如</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">lupdate xxx.cpp -ts xxx.ts</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">qt的lupdate将文件生成一个可翻译的ts文件</span></span><br></pre></td></tr></table></figure>
<p>在深度学习中,命令行参数也是必须学会的一项,在开始学习之前,我自己知道的有一个自带的sys和一个常用的argparse</p>
<h1 id="0-前言"><a href="#0-前言" class="headerlink" title="0. 前言"></a>0. 前言</h1><p>命令行参数多用于程序的执行,和一些脚本<br>一般格式是</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python script.py -s ./src --mode auto -v</span><br></pre></td></tr></table></figure>
<p>其中的<code>script.py</code>是脚本名,<code>-s --mode -v</code>都是命令行选项,剩下的<code>./src auto</code>就是命令行参数</p>
<h1 id="1-sys-argv"><a href="#1-sys-argv" class="headerlink" title="1. sys.argv"></a>1. sys.argv</h1><blockquote>
<p>该模块是python内置的模块,sys.argv可以访问所有的命令行参数,返回值是包含所有命令行参数的列表;</p>
</blockquote>
<h2 id="1-1-sys-argv"><a href="#1-1-sys-argv" class="headerlink" title="1.1 sys.argv"></a>1.1 sys.argv</h2><p>程序执行时,python从命令行获取到的所有值都存储在sys.argv列表中:<br>第一个元素是sys.argv[0],存储的脚本的完整路径;<br>第二个元素才是命令输入的第一个参数,即<code>sys.argv[1]</code></p>
<p>使用该模块,首先导入sys</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> sys</span><br></pre></td></tr></table></figure>
<p>假如现在有一个脚本,代码是:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> sys</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(<span class="string">f"script name: <span class="subst">{sys.argv[<span class="number">0</span>]}</span>"</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">"number of parameters: {}"</span>.<span class="built_in">format</span>( <span class="built_in">len</span>(sys.argv) ))</span><br><span class="line"><span class="built_in">print</span>(<span class="string">f"parameter: <span class="subst">{ <span class="built_in">str</span>(sys.argv) }</span>"</span>)</span><br></pre></td></tr></table></figure>
<p>我们通过命令行输入</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python test.py ./src --mode auto -o ./output/ans.png</span><br></pre></td></tr></table></figure>
<p>那么我们的参数个数会被认为是5个,因为命令行选项<code>--mode -o</code>也会被当作命令行参数。<br>于是使用<code>getopt</code>模块识别这些命令行选项</p>
<h2 id="1-2-getopt"><a href="#1-2-getopt" class="headerlink" title="1.2 getopt"></a>1.2 getopt</h2><h3 id="1-2-1-getopt-getopt"><a href="#1-2-1-getopt-getopt" class="headerlink" title="1.2.1 getopt.getopt"></a>1.2.1 getopt.getopt</h3><p>语法格式如下</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">getopt.getopt(args, option, [ , long_option])</span><br><span class="line"><span class="comment"># args:是需要解析的命令行参数列表,一般填写 sys.argv[1:],也就是抛弃脚本名sys.argv[0]</span></span><br><span class="line"><span class="comment"># options:以字符串格式定义</span></span><br></pre></td></tr></table></figure>
<h3 id="1-2-2-参数异常"><a href="#1-2-2-参数异常" class="headerlink" title="1.2.2 参数异常"></a>1.2.2 参数异常</h3><h1 id="2-argparse"><a href="#2-argparse" class="headerlink" title="2. argparse"></a>2. argparse</h1><p>目前实用下来,感觉argparse更加常用,功能也更强大,可读性更强<br>导入库</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> argparse</span><br></pre></td></tr></table></figure>
<p>具体用法:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> argparse</span><br><span class="line"></span><br><span class="line">parse = argparse.ArgumentParser()</span><br><span class="line">parse.add_argument(<span class="string">"-s"</span>,<span class="string">"--sourceFolder"</span>, <span class="built_in">help</span>=<span class="string">"..."</span>, default=<span class="string">"./out"</span>, <span class="built_in">type</span>=<span class="built_in">str</span>)</span><br><span class="line"></span><br><span class="line">args = parser.parse_args()</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(args.sourceFolder)</span><br></pre></td></tr></table></figure>
<p>代码解释:</p>
<blockquote>
<p>-h –help参数是内置的帮助参数<br><code>add_argument</code>函数是添加参数的函数,内置的参数有: 参数名/简写 参数的描述,参数的帮助文本,参数的default值,参数的类型</p>
</blockquote>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">parse.add_argument(<span class="string">'-i'</span>,<span class="string">'--info'</span>,description = <span class="string">'this is infomation'</span>,<span class="built_in">help</span>=<span class="string">'please enter item\'s info'</span>,default=<span class="string">'none'</span>,<span class="built_in">type</span>=<span class="built_in">str</span>,)</span><br></pre></td></tr></table></figure>
<h2 id="2-2-更多的参数解析"><a href="#2-2-更多的参数解析" class="headerlink" title="2.2 更多的参数解析"></a>2.2 更多的参数解析</h2><ul>
<li>name or flags :选项字符串的名字或者列表,例如 foo 或者 -f, –foo。</li>
<li>action: 命令行遇到参数时的动作,默认值是 store。</li>
<li>store_const:表示赋值为const;</li>
<li>append:将遇到的值存储成列表,也就是如果参数重复则会保存多个值;</li>
<li>append_const:将参数规范中定义的一个值保存到一个列表;</li>
<li>count:存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;</li>
<li>nargs :应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default—对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。</li>
<li>const-action 和 nargs 所需要的常量值。</li>
<li>default: 不指定参数时的默认值。</li>
<li>type: 命令行参数应该被转换成的类型。</li>
<li>choices:参数可允许的值的一个容器。</li>
<li>required:可选参数是否可以省略 (仅针对可选参数)。</li>
<li>help:参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.</li>
<li>metavar:在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.</li>
<li>dest: 解析后的参数名称,默认情况,对于可选参数选取最长的名称,中划线转换为下划线.</li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">parser = argparse.ArgumentParser(description=<span class="string">'Process some integers.'</span>)</span><br><span class="line">parser.add_argument(<span class="string">'-p'</span>,<span class="string">'--path'</span>, <span class="built_in">type</span>=<span class="built_in">str</span>, default=<span class="string">r"F:\MdAI\mdai-src"</span>, </span><br><span class="line"> <span class="built_in">help</span>=<span class="string">'The path of the repository'</span>)</span><br><span class="line">parser.add_argument(<span class="string">'-x'</span>,<span class="string">'--extract'</span>, action=<span class="string">'store_true'</span>, </span><br><span class="line"> <span class="built_in">help</span>=<span class="string">'Extract strings from Py files'</span>)</span><br><span class="line">parser.add_argument(<span class="string">'-r'</span>,<span class="string">'--replace'</span>, action=<span class="string">'store_true'</span>, </span><br><span class="line"> <span class="built_in">help</span>=<span class="string">'Replace strings in Py files based on translation file'</span>)</span><br><span class="line">parser.add_argument(<span class="string">'-m'</span>,<span class="string">'--mode'</span>, <span class="built_in">type</span>=<span class="built_in">str</span>, default=<span class="string">'en2zh'</span>, </span><br><span class="line"> <span class="built_in">help</span>=<span class="string">'Choose the mode: en2zh or zh2en'</span>,</span><br><span class="line"> choices=[<span class="string">'en2zh'</span>, <span class="string">'zh2en'</span>])</span><br><span class="line">args = parser.parse_args()</span><br></pre></td></tr></table></figure>
<!-- reward -->
</div>
<!-- copyright -->
<footer class="article-footer">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/mikhayeeer.github.io/tags/Python/" rel="tag">Python</a></li></ul>
</footer>
</div>
</article>
<article
id="post-Git常用整合宝典"
class="article article-type-post"
itemscope
itemprop="blogPost"
data-scroll-reveal
>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/mikhayeeer.github.io/2024/10/08/Git%E5%B8%B8%E7%94%A8%E6%95%B4%E5%90%88%E5%AE%9D%E5%85%B8/"
>Git常用整合宝典</a>
</h2>
</header>
<div class="article-meta">
<a href="/mikhayeeer.github.io/2024/10/08/Git%E5%B8%B8%E7%94%A8%E6%95%B4%E5%90%88%E5%AE%9D%E5%85%B8/" class="article-date">
<time datetime="2024-10-07T16:00:00.000Z" itemprop="datePublished">2024-10-08</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/mikhayeeer.github.io/categories/Developers-Tool/">Developers'Tool</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<p>@[TOC]</p>
<h1 id="0-简单认识Git"><a href="#0-简单认识Git" class="headerlink" title="0. 简单认识Git"></a>0. 简单认识Git</h1><h2 id="0-1-起源"><a href="#0-1-起源" class="headerlink" title="0.1 起源"></a>0.1 起源</h2><p> 最初是由linux开发者linus用两周时间用c语言编写而成。github就是使用git系统对网站进行管理,github只支持git分布式系统,故名为github。</p>
<h2 id="0-2-分布式"><a href="#0-2-分布式" class="headerlink" title="0.2 分布式"></a>0.2 分布式</h2><p> svn和cvs也是版本控制系统,是集中式的,集中式的在每次写代码时都需要从服务器上拉取一份,如果服务器丢失,那么所有的都丢失,本机客户端仅仅保存当前版本信息。所有的回滚操作都需要服务器支持。<br> 而git是分布式的,每个电脑都是服务器,可以自由在本地回滚。</p>
<h2 id="0-3-最高频操作"><a href="#0-3-最高频操作" class="headerlink" title="0.3 最高频操作"></a>0.3 最高频操作</h2><p>私以为最高频的应该就是远程仓库和本地仓库的拉取与推送了</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">git add .</span><br><span class="line">git commit -m "This is description"</span><br><span class="line">git push origin master</span><br><span class="line"></span><br><span class="line">git pull origin master</span><br><span class="line"></span><br><span class="line">git status</span><br><span class="line">git log</span><br></pre></td></tr></table></figure>
<h1 id="1-介绍"><a href="#1-介绍" class="headerlink" title="1. 介绍"></a>1. 介绍</h1><p>git 官网: <a target="_blank" rel="noopener" href="https://git-scm.com/">https://git-scm.com</a></p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git help</span><br></pre></td></tr></table></figure>
<h2 id="1-1-安装"><a href="#1-1-安装" class="headerlink" title="1.1 安装"></a>1.1 安装</h2><p>Linux安装</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install git</span><br></pre></td></tr></table></figure>
<p>windows<br><a target="_blank" rel="noopener" href="https://git-scm.com/download/win">Git - Downloading Package (git-scm.com)</a></p>
<h2 id="1-2-基本配置"><a href="#1-2-基本配置" class="headerlink" title="1.2 基本配置"></a>1.2 基本配置</h2><p>查看git信息</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git -V</span><br><span class="line">git version</span><br></pre></td></tr></table></figure>
<p>配置config,设置自己的用户名和邮箱,这些是每次提交的时候都会用到的信息</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.name <span class="string">"User Name"</span></span><br><span class="line">git config --global user.email <span class="string">"[email protected]"</span></span><br><span class="line"><span class="comment"># --global表示配置全局,整个git环境</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查询git config的信息</span></span><br><span class="line">git config --list</span><br><span class="line">git config -l <span class="comment">#两种都行</span></span><br><span class="line"> <span class="comment"># 按 q 退出查看</span></span><br></pre></td></tr></table></figure>
<p>取消配置</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global --unset user.name</span><br></pre></td></tr></table></figure>
<p>配置git使用的代理(根据个人需求设置)</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config --global http.proxy "http://127.0.0.1:7890"</span><br><span class="line">git config --global https.proxy "http://127.0.0.1:7890"</span><br></pre></td></tr></table></figure>
<h2 id="1-3-架构"><a href="#1-3-架构" class="headerlink" title="1.3 架构"></a>1.3 架构</h2><p>在git的过程中,主要分为两个大区</p>
<blockquote>
<p>工作区和版本库,版本库又分为暂存区和分支</p>
</blockquote>
<ul>
<li><strong>版本库</strong>:存在于工作区中的一个隐藏目录<code>.git</code>,该目录不属于工作区,是git的版本库,是git管理的所有内容;</li>
<li><strong>工作区</strong>:是你撰写代码的地方,修改完成后,通过add操作将工作区的修改放到暂存区;一般是最新的版本代码</li>
<li><strong>暂存区</strong>:是版本库的一个临时区域,保存下一步将要提交的文件;</li>
<li><strong>分支</strong>:版本库有很多分支,提交的文件就存储在分支中,例如master和main分支</li>
<li><strong>仓库</strong>:所有提交都在这,包括历史版本</li>
</ul>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Git</span><br><span class="line">|————————WorkSpace:工作区</span><br><span class="line">|————————Index/Stage:暂存区/缓存区</span><br><span class="line">|————————Repository:本地仓库/仓库区</span><br><span class="line">|————————Remote:远程仓库</span><br></pre></td></tr></table></figure>
<h3 id="git"><a href="#git" class="headerlink" title=".git"></a>.git</h3><p>Index:缓存区,存在于.git中</p>
<h1 id="2-仓库"><a href="#2-仓库" class="headerlink" title="2. 仓库"></a>2. 仓库</h1><p>一个仓库对应一个目录,该目录中的所有文件被git管理</p>
<h2 id="2-1-新建仓库"><a href="#2-1-新建仓库" class="headerlink" title="2.1 新建仓库"></a>2.1 新建仓库</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git init</span><br><span class="line"><span class="comment"># 需要在空目录</span></span><br></pre></td></tr></table></figure>
<p>执行<code>git init</code>操作的目录即为<strong>工作区</strong>,在操作之后,该目录下会有<code>.git</code>目录,是版本库<br>.git是git的配置文件目录,是隐藏文件夹,普通的ls命令无法查看</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ls</span></span><br><span class="line"><span class="comment"># 用-lha参数来查看隐藏的目录</span></span><br><span class="line"><span class="built_in">ls</span> -lha</span><br></pre></td></tr></table></figure>
<blockquote>
<p>插播一句废话:<code>-lha</code>是命令<code>ls</code>的三个可选参数,分别代表显示详细信息、以便于人类可读的方式显示大小、显示所有文件(包括隐藏)</p>
</blockquote>
<h1 id="3-基本操作"><a href="#3-基本操作" class="headerlink" title="3. 基本操作"></a>3. 基本操作</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#查看仓库状态</span></span><br><span class="line">git status</span><br><span class="line"><span class="comment"># 能看到是否有改动,untracked未跟踪代表未提交</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#暂存文件,将工作区文件存入暂存区/缓存区</span></span><br><span class="line">git add .</span><br><span class="line">git add --all <span class="comment"># 添加所有,基本同git add . , 但是会记录删除操作</span></span><br><span class="line">git add filname.txt <span class="comment"># 添加某文件</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#提交文件,将暂存区文件存入分支,形成一个版本</span></span><br><span class="line">git commit -m <span class="string">"提交的描述信息"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除文件</span></span><br><span class="line">git <span class="built_in">rm</span> filename</span><br></pre></td></tr></table></figure>
<p>push和pull操作会放到下文远程仓库中</p>
<h2 id="3-2-日志"><a href="#3-2-日志" class="headerlink" title="3.2 日志"></a>3.2 日志</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看历史提交日志</span></span><br><span class="line">git log</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash"><span class="built_in">log</span>的日志格式</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">commit <<span class="built_in">hash</span> <span class="built_in">id</span>> (HEAD -> master)</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">Author : 提交者(user.name)</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">Date : 提交时间</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash"> myBase add new file <span class="string">"readme.md"</span></span></span><br><span class="line"></span><br><span class="line">git log filename</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看某一文件的回滚版本</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看提交历史: 包括回滚操作</span></span><br><span class="line">git reflog</span><br><span class="line"></span><br><span class="line">git log --pretty=oneline #单行显示</span><br><span class="line"></span><br><span class="line">git log --help</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">会打开本地的<span class="built_in">log</span>命令选项文档</span></span><br></pre></td></tr></table></figure>
<h3 id="日志帮助文档"><a href="#日志帮助文档" class="headerlink" title="日志帮助文档"></a>日志帮助文档</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">#</span><span class="language-bash">合并merge</span></span><br><span class="line">git log --merge #仅展示合并的commit</span><br><span class="line">git log --no-merge #不展示合并的commit</span><br></pre></td></tr></table></figure>
<h1 id="4-远程仓库"><a href="#4-远程仓库" class="headerlink" title="4. 远程仓库"></a>4. 远程仓库</h1><p>前面提到的仓库是本地仓库,当多人进行协同开发工作的时候,每个人都在自己的本地仓库维护版本,但是工作需要多人之间共享代码、合并代码,就需要用到远程仓库</p>
<h2 id="4-1-工作模式"><a href="#4-1-工作模式" class="headerlink" title="4.1 工作模式"></a>4.1 工作模式</h2><p>程序员在本地仓库进行add操作将工作区文件存入暂存区,通过commit操作将暂存区文件存入分支,形成一个版本。<br>然后通过<code>clone</code>,<code>push</code>,<code>pull</code>操作与远程仓库进行交互</p>
<ul>
<li>常见的远程仓库是<strong>github和gitee</strong></li>
<li>一些企业也会有自己的远程仓库</li>
</ul>
<h2 id="4-2-基础操作"><a href="#4-2-基础操作" class="headerlink" title="4.2 基础操作"></a>4.2 基础操作</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 当前仓库名</span></span><br><span class="line">git remote </span><br><span class="line"></span><br><span class="line"><span class="comment">#本地关联远程仓库</span></span><br><span class="line">git remote add origin https://gitee.com/Username/case.git</span><br><span class="line"></span><br><span class="line"><span class="comment">#查看远程仓库地址</span></span><br><span class="line">git remote -v</span><br><span class="line"></span><br><span class="line">git remote show origin</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用prune参数刷新本地分支仓库</span></span><br><span class="line">git remote prune origin</span><br><span class="line"></span><br><span class="line">git remote rename <old name> <new name></span><br><span class="line"></span><br><span class="line">git remote remove <remote_name></span><br></pre></td></tr></table></figure>
<h2 id="4-3-推送-克隆-拉取"><a href="#4-3-推送-克隆-拉取" class="headerlink" title="4.3 推送 克隆 拉取"></a>4.3 推送 克隆 拉取</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">git push origin master</span><br><span class="line"></span><br><span class="line">git <span class="built_in">clone</span> https://gitee.com/username/case.git </span><br><span class="line"></span><br><span class="line">git <span class="built_in">clone</span> https://gitee.com/username/case.git .</span><br><span class="line"><span class="comment"># 有 . 在末尾,及克隆到当前目录,最好保证是一个空目录</span></span><br><span class="line"></span><br><span class="line">git pull origin master</span><br><span class="line"></span><br><span class="line"><span class="comment"># 单一分支的时候可以省略后面的参数</span></span><br><span class="line">git push</span><br><span class="line">git pull</span><br></pre></td></tr></table></figure>
<table>
<thead>
<tr>
<th>命令</th>
<th>描述</th>
</tr>
</thead>
<tbody><tr>
<td><code>git remote add <标识> 远程仓库地址</code></td>
<td>本地仓库关联远程仓库</td>
</tr>
<tr>
<td><code>git push <标识> master</code></td>
<td>将本地仓库上传到远程仓库的master分支</td>
</tr>
<tr>
<td><code>git pull <标识> master</code></td>
<td>从远程仓库master分支拉取到本地仓库</td>
</tr>
<tr>
<td><code>git clone 地址</code></td>
<td>将远程仓库复制到本地,并形成本地仓库</td>
</tr>
</tbody></table>
<h2 id="4-4-同步"><a href="#4-4-同步" class="headerlink" title="4.4 同步"></a>4.4 同步</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git fetch</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">拉取远程全部分支,包括这些分支的仓库版本和日志记录</span></span><br></pre></td></tr></table></figure>
<p>在进行PR操作前,需要与远程仓库的最新进展进行同步,就可以使用fetch。<br>该操作比较适用于本地仓库有多个远程仓库,通过<code>remote</code>查看。<br>例如fork一个主要仓库,在自己的仓库修改后,想要提交一个PR合入到主要仓库。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">git remote add upstream <仓库地址></span><br><span class="line"></span><br><span class="line">git fetch upstream <span class="comment"># 拉取upstream仓库的更新</span></span><br><span class="line"></span><br><span class="line">git pull upstream master</span><br><span class="line"></span><br><span class="line">git push origin feature</span><br></pre></td></tr></table></figure>
<h2 id="4-5-Github"><a href="#4-5-Github" class="headerlink" title="4.5 Github"></a>4.5 Github</h2><p>想要直接与Github仓库进行交互使用,可以通过SSH对github仓库进行访问和写入数据。<br>SSH连接需要使用密钥进行身份验证,也就需要在本地电脑上生成SSH密钥并把公钥添加到github账户中。<br>详细操作可以直接参考<a target="_blank" rel="noopener" href="https://docs.github.com/zh/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key">github的文档</a></p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t ed25519 -C "[email protected]"</span><br></pre></td></tr></table></figure>
<p>测试与github的连接</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -T [email protected]</span><br></pre></td></tr></table></figure>
<p>github相关内容不是本篇博客重点,点到为止。更多问题可以直接搜索关键字github ssh</p>
<h1 id="5-分支"><a href="#5-分支" class="headerlink" title="5. 分支"></a>5. 分支</h1><h2 id="5-1-分支简介"><a href="#5-1-分支简介" class="headerlink" title="5.1 分支简介"></a>5.1 分支简介</h2><p>分支,是一个个版本存储的最终位置;<br>一个分支相当于一条时间线,每一次commit都会形成一个版本,一个个版本依次存储在分支的一个个提交点上,分支上有个指针默认指向最新的提交点。</p>
<h2 id="5-2-分支的操作"><a href="#5-2-分支的操作" class="headerlink" title="5.2 分支的操作"></a>5.2 分支的操作</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#查看分支</span></span><br><span class="line">git branch</span><br><span class="line"></span><br><span class="line"><span class="comment">#查看所有分支</span></span><br><span class="line">git branch -a <span class="comment"># 包括远程</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建分支</span></span><br><span class="line">git branch dev <span class="comment">#创建名为dev的分支,只会创建,不会切换</span></span><br><span class="line">git checkout -b dev <span class="comment">#创建dev分支</span></span><br><span class="line"></span><br><span class="line">git checkout -b previous upstream/previous</span><br><span class="line"><span class="comment"># 基于远程仓库upstream/previous创建previous分支</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#切换分支</span></span><br><span class="line">git checkout dev</span><br><span class="line"></span><br><span class="line"><span class="comment">#删除本地分支</span></span><br><span class="line">git branch -D <branch_name></span><br><span class="line"></span><br><span class="line"><span class="comment">#删除远程分支</span></span><br><span class="line">git push origin --delete <remote_branch_name></span><br></pre></td></tr></table></figure>
<ul>
<li>查看分支的差异<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">git diff A B filename</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看filename文件在分支A和分支B的差异</span></span><br><span class="line"></span><br><span class="line">gitk --all</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">会唤起一个图形化浏览器展示commit</span></span><br></pre></td></tr></table></figure></li>
</ul>
<h3 id="5-2-1-分支的细节原理"><a href="#5-2-1-分支的细节原理" class="headerlink" title="5.2.1 分支的细节原理"></a>5.2.1 分支的细节原理</h3><h3 id="5-2-2-分支切换时,保存当前工作"><a href="#5-2-2-分支切换时,保存当前工作" class="headerlink" title="5.2.2 分支切换时,保存当前工作"></a>5.2.2 分支切换时,保存当前工作</h3><p>如果修改了文件,是不可能直接切换到其他分支,是git为了防止丢失当前工作区的内容<br>使用命令<code>git stash</code>保存状态</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">保存当前工作状态</span></span><br><span class="line">git stash</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看存储的工作状态</span></span><br><span class="line">git stash list</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">在其他分支完成工作后,切换为刚刚的分支,可以恢复状态</span></span><br><span class="line">git stash pop # 将list也删除了</span><br><span class="line">git stash apply # 不删除list,默认恢复第一个</span><br><span class="line">git stash apply list_name # 恢复指定的list</span><br><span class="line"></span><br><span class="line">git stash drop list_name</span><br><span class="line">git stash clear</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看新保存的stash和当前目录的差异</span></span><br><span class="line">git stash show</span><br></pre></td></tr></table></figure>
<p>该命令是解决git不提交代码不能切换分支的问题,有时候并不一定需要把代码push到远程</p>
<h2 id="5-3-分支合并"><a href="#5-3-分支合并" class="headerlink" title="5.3 分支合并"></a>5.3 分支合并</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">分支合并</span></span><br><span class="line">git merge branchB</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">当前的分支是A,上面的命令是在A分支下合并分支B</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">强制合并分支</span></span><br><span class="line">git merge branchB --allow-unrelated-histories</span><br></pre></td></tr></table></figure>
<p>合并原理:</p>
<ol>
<li>快速合并: 如果分支B的基于分支A的修改,则仅仅只是合并分支B的新内容,相当于移动指针到分支B的最新提交点;</li>
<li>三方合并: 两个分支都有修改,则累加修改在一起,形成一个全新的提交点,作为合并后分支的指针位置<blockquote>
<p>可能会造成冲突</p>
</blockquote>
</li>
</ol>
<h3 id="5-3-1-冲突"><a href="#5-3-1-冲突" class="headerlink" title="5.3.1 冲突"></a>5.3.1 冲突</h3><p>当两个分支对同一个文件进行了修改,会出现冲突,冲突后,git会将冲突的内容都展示在文件中,用<code><<<< ==== >>>></code>来进行隔开</p>
<h3 id="5-3-2-别的分支修改转移到当前分支"><a href="#5-3-2-别的分支修改转移到当前分支" class="headerlink" title="5.3.2 别的分支修改转移到当前分支"></a>5.3.2 别的分支修改转移到当前分支</h3><p>将A分支的某一修改,合并到当前的B分支</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">git checkout branch_A</span><br><span class="line"></span><br><span class="line">git log</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">查看需要合并的分支A的具体commit</span></span><br><span class="line"></span><br><span class="line">git checkout branch_B</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">切换到合并的分支</span></span><br><span class="line"></span><br><span class="line">git cherry-pick <commit_hash_id></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">合并具体的commit</span></span><br></pre></td></tr></table></figure>
<h3 id="5-3-3-预览合并的冲突"><a href="#5-3-3-预览合并的冲突" class="headerlink" title="5.3.3 预览合并的冲突"></a>5.3.3 预览合并的冲突</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">git checkout main</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">模拟合并</span></span><br><span class="line">git merge --no-commit dev</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">取消合并</span></span><br><span class="line">git merge --abort</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">解决冲突,继续合并</span></span><br><span class="line">git add .</span><br><span class="line">git commit -m "merge"</span><br></pre></td></tr></table></figure>
<p>vscode中进行冲突的管理<br>vscode在发现合并带来的冲突时候,会把更改分为两类,一种是合并更改,一种是暂存更改,暂存更改的意思是来自于合并的分支,但是没有造成冲突,而合并更改中,就是合并的分支和当前的分支产生了冲突,需要人为去管理</p>
<h2 id="5-4-恢复删除"><a href="#5-4-恢复删除" class="headerlink" title="5.4 恢复删除"></a>5.4 恢复删除</h2><blockquote>
<p>起因,错误删除了远程原仓库中的文件,并在本地修改后提交到了自己的仓库,随后发起了pull request,需要恢复这个删除的文件。<br>可以直接复制原本的内容,然后创建新的文件,但是也可以利用其他方法</p>
</blockquote>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">git fetch # 拉取所有远程仓库为最新</span><br><span class="line">git fetch upstream</span><br><span class="line"></span><br><span class="line">git pull upstream main # 但是被删除的commit还是存在,不会直接恢复</span><br><span class="line"></span><br><span class="line">git checkout <branch-name> -- <file-name></span><br><span class="line"></span><br><span class="line">git checkout upstream/main -- "Reports/season 3/successfulbarrier/[WeeklyReport]2024.07.15~2024.07.28.md"</span><br><span class="line">git add .</span><br><span class="line">git commit -m "Restore deleted files from remote repository"</span><br></pre></td></tr></table></figure>
<h1 id="6-进阶操作"><a href="#6-进阶操作" class="headerlink" title="6. 进阶操作"></a>6. 进阶操作</h1><h2 id="6-1-回滚仓库代码"><a href="#6-1-回滚仓库代码" class="headerlink" title="6.1 回滚仓库代码"></a>6.1 回滚仓库代码</h2><ul>
<li>常规回滚操作<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看提交日志</span></span><br><span class="line">git <span class="built_in">log</span></span><br><span class="line"><span class="comment"># 在日志中找到需要回滚到的一次提交的id</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># --hard 一切全部恢复,add的暂存区消失,代码全部恢复到以前状态</span></span><br><span class="line">git reset --hard <<span class="built_in">hash</span> <span class="built_in">id</span>></span><br><span class="line"></span><br><span class="line"><span class="comment"># --soft 仅仅恢复头指针,已经add的暂存区以及工作空间所有东西都不变</span></span><br><span class="line">git reset --soft <<span class="built_in">hash</span> <span class="built_in">id</span>></span><br><span class="line"></span><br><span class="line"><span class="comment"># --mixed 头指针移动,add暂存区消失,工作空间代码不变</span></span><br><span class="line">git reset --mixed <<span class="built_in">hash</span> <span class="built_in">id</span>></span><br></pre></td></tr></table></figure></li>
</ul>
<ul>
<li><p>利用<code>HEAD</code>来回滚仓库版本</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># HEAD 指向当前仓库,是头指针</span></span><br><span class="line"></span><br><span class="line">git reset --hard HEAD^</span><br><span class="line"><span class="comment"># ^代表上一次提交的版本</span></span><br><span class="line"></span><br><span class="line">git reset --hard HEAD~3</span><br><span class="line"><span class="comment"># ~3以当前版本为基数,回滚几次; ~1表示回滚1次,同^; 这个表示回滚3次</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>回滚某一文件</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">log</span> filename</span><br><span class="line"></span><br><span class="line">git reset <<span class="built_in">hash</span> <span class="built_in">id</span>> filename</span><br></pre></td></tr></table></figure></li>
</ul>
<h2 id="6-2-Github使用"><a href="#6-2-Github使用" class="headerlink" title="6.2 Github使用"></a>6.2 Github使用</h2><p>[[Github]](这个博客还在写,准备写一些开发中常用到的功能)</p>
<h3 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h3><p>遇到拒绝访问<br>可能是token过期了,需要重新生成一个token,并且记得给token权限</p>
<p>默认的github端口是22,更换端口为443</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Host github.com</span><br><span class="line"> HostName ssh.github.com</span><br><span class="line"> Port <span class="number">443</span></span><br></pre></td></tr></table></figure>
<h2 id="6-3-子模块"><a href="#6-3-子模块" class="headerlink" title="6.3 子模块"></a>6.3 子模块</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">git submodule add address</span><br><span class="line"></span><br><span class="line">git submodule init</span><br><span class="line">git submodule update</span><br></pre></td></tr></table></figure>
<h2 id="6-4-新增分支操作"><a href="#6-4-新增分支操作" class="headerlink" title="6.4 新增分支操作"></a>6.4 新增分支操作</h2><p>适用于git 2.23之后版本,新增<code>switch</code>和<code>restore</code></p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">git switch dev</span><br><span class="line"></span><br><span class="line">git switch -b dev # 合并</span><br><span class="line">git switch -c dev # 创建</span><br><span class="line"></span><br><span class="line">git restore filename # 撤销提交修改,会从缓存区删除</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h2 id="6-5-Git本地服务器"><a href="#6-5-Git本地服务器" class="headerlink" title="6.5 Git本地服务器"></a>6.5 Git本地服务器</h2><blockquote>
<p>以linux下为例</p>
</blockquote>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install git</span><br><span class="line"></span><br><span class="line">git adduser git</span><br><span class="line"></span><br><span class="line">su git</span><br><span class="line"></span><br><span class="line">ssh-keygen -t rsa -C "[email protected]"</span><br><span class="line"></span><br><span class="line">cd ~</span><br><span class="line">cd .ssh</span><br><span class="line"></span><br><span class="line">touch authorized_keys</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">存放他人的公钥,存放后该服务器对公钥的用户开启权限,免密登录,拥有推送拉取权</span></span><br></pre></td></tr></table></figure>
<h2 id="6-6-忽略-gitignore"><a href="#6-6-忽略-gitignore" class="headerlink" title="6.6 忽略 .gitignore"></a>6.6 忽略 .gitignore</h2><p>忽略一些文件或者文件夹<br>在仓库中右键git bash here</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">touch .gitignore</span><br></pre></td></tr></table></figure>
<p>编辑文件<code>.gitignore</code></p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">dir/ // 忽略dir文件夹</span><br><span class="line">dir/*.txt //忽略dir目录下所有.txt文件</span><br><span class="line"> //并不会忽略 dir/dir2/a.txt这类文件</span><br><span class="line">*.py //忽略所有.py文件</span><br><span class="line"></span><br><span class="line">*.gz //忽略所有.gz结尾文件</span><br><span class="line">!hhh.gz // hhh.gz文件除外</span><br><span class="line"></span><br><span class="line">abc //忽略abc文件</span><br><span class="line"></span><br><span class="line">/todo //忽略根目录的todo文件</span><br><span class="line"></span><br><span class="line">**/__pycache__/</span><br></pre></td></tr></table></figure>
<p>再次<code>git status</code>就发现忽略的文件,没了</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git status --ignored</span><br></pre></td></tr></table></figure>
<p>.gitignore对已经追踪的文件是无效的,所以需要线清除一下相关缓存状态</p>
<h3 id="忽略失败"><a href="#忽略失败" class="headerlink" title="忽略失败"></a>忽略失败</h3><p>.gitignore 文件只是 ignore 没有被 staged(cached) 文件,对于已经被 staged 的文件,加入 ignore 文件时一定要先从 staged 移除。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">git rm --cached <file></span><br><span class="line">git rm --cached .obsidian/workspace.json</span><br><span class="line">git rm -r --cached .obsidian # 忽略文件夹</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用-r参数递归忽略整个文件夹</span></span><br><span class="line"></span><br><span class="line">git add .</span><br><span class="line">git commit -m "ignore workspace.json"</span><br></pre></td></tr></table></figure>
<h2 id="6-7-规则"><a href="#6-7-规则" class="headerlink" title="6.7 规则"></a>6.7 规则</h2><p>在<code>.git/hooks/</code>下添加文件<code>pre-commit</code>或者<code>pre-commit.sh</code> 如果是linux还需要赋予该文件执行权限。<br>然后在文件中写下脚本,用来判断一些文件的存储规则:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"></span><br><span class="line">CURRENT_DIR=$(<span class="built_in">pwd</span>)</span><br><span class="line">HOOK_DIR=$(<span class="built_in">dirname</span> <span class="string">"<span class="variable">$0</span>"</span>)</span><br><span class="line"><span class="built_in">cd</span> <span class="string">"<span class="variable">$HOOK_DIR</span>/../../.."</span> || <span class="built_in">exit</span> 1</span><br><span class="line"></span><br><span class="line">FILES_TO_COMMIT=$(git diff --cached --name-only --diff-filter=ACM)</span><br><span class="line"></span><br><span class="line">INVALID_FILES=<span class="string">""</span></span><br><span class="line"><span class="keyword">for</span> FILE <span class="keyword">in</span> <span class="variable">$FILES_TO_COMMIT</span>; <span class="keyword">do</span></span><br><span class="line"> <span class="keyword">if</span> [[ <span class="string">"<span class="variable">$FILE</span>"</span> =~ \.(png|jpg|jpeg|gif)$ ]]; <span class="keyword">then</span></span><br><span class="line"> <span class="keyword">if</span> [[ ! <span class="string">"<span class="variable">$FILE</span>"</span> =~ ^z_LinkSource(/|$) ]]; <span class="keyword">then</span></span><br><span class="line"> INVALID_FILES=<span class="string">"<span class="variable">$INVALID_FILES</span> <span class="variable">$FILE</span>"</span></span><br><span class="line"> <span class="keyword">fi</span></span><br><span class="line"> <span class="keyword">fi</span></span><br><span class="line"><span class="keyword">done</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ -n <span class="string">"<span class="variable">$INVALID_FILES</span>"</span> ]; <span class="keyword">then</span></span><br><span class="line"> <span class="built_in">echo</span> <span class="string">"ERROR:Image files must be stored in the z_LinkSource/ directory or its subdirectories.\n The following files need to be moved to the correct directory before committing:"</span></span><br><span class="line"> <span class="built_in">echo</span> <span class="string">"<span class="variable">$INVALID_FILES</span>"</span></span><br><span class="line"> <span class="built_in">exit</span> 1</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">"Pre-commit Checking Passed!"</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">exit</span> 0</span><br></pre></td></tr></table></figure>
<!-- reward -->
</div>
<!-- copyright -->
<footer class="article-footer">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/mikhayeeer.github.io/tags/CLI/" rel="tag">CLI</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/mikhayeeer.github.io/tags/Git/" rel="tag">Git</a></li></ul>
</footer>
</div>
</article>
<article
id="post-Pip与Conda"
class="article article-type-post"
itemscope
itemprop="blogPost"
data-scroll-reveal
>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/mikhayeeer.github.io/2024/10/08/Pip%E4%B8%8EConda/"
>Pip与Conda</a>
</h2>
</header>
<div class="article-meta">
<a href="/mikhayeeer.github.io/2024/10/08/Pip%E4%B8%8EConda/" class="article-date">
<time datetime="2024-10-07T16:00:00.000Z" itemprop="datePublished">2024-10-08</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/mikhayeeer.github.io/categories/Developers-Tool/">Developers'Tool</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<p>@[TOC]</p>
<p>python的包管理工具一般是<code>pip</code>和<code>conda</code></p>
<p><code>pip</code>和<code>conda</code>是Python开发环境中广泛使用的两大包管理工具。<br><code>conda</code>是Anaconda发行版的一部分,但也可以单独安装使用,适用于所有Python环境,不仅仅是Anaconda用户。</p>
<p>这个博客是平时的笔记的一次整合,至于为什么连这些都有笔记,那只能是:<br><img src="https://img-blog.csdnimg.cn/direct/60377e8da5dd41cbb8f7707887678052.jpeg#pic_center" alt="前面忘了,中间忘了,后面也忘了"></p>
<p>为了更好展现使用方法,就不分为<code>pip</code>和<code>conda</code>两部分展示。<br>而是<strong>依照使用</strong>进行区分展示。</p>
<hr>
<h2 id="0-获取帮助页面"><a href="#0-获取帮助页面" class="headerlink" title="0. 获取帮助页面"></a>0. 获取帮助页面</h2><p>对于任何命令行工具,查阅其帮助文档通常是快速熟悉和掌握其用法的有效途径。<br><code>pip</code>和<code>conda</code>可分别通过以下命令访问其帮助页面:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">pip <span class="built_in">help</span></span><br><span class="line">pip --<span class="built_in">help</span></span><br><span class="line"><span class="comment"># pip可以通过两种来获取帮助</span></span><br><span class="line"></span><br><span class="line">conda --<span class="built_in">help</span></span><br><span class="line"><span class="comment"># conda只能--help</span></span><br></pre></td></tr></table></figure>
<p>非常推荐在日常使用中去随时查看help文档</p>
<hr>
<h2 id="1-基础操作"><a href="#1-基础操作" class="headerlink" title="1. 基础操作"></a>1. 基础操作</h2><h3 id="安装包"><a href="#安装包" class="headerlink" title="安装包"></a>安装包</h3><p>安装包的基本命令如下:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip install <package_name></span><br><span class="line"></span><br><span class="line">conda install <package_name></span><br></pre></td></tr></table></figure>
<p>指定特定版本安装:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip install numpy==1.21.5</span><br><span class="line"></span><br><span class="line">conda install numpy=1.21.5</span><br></pre></td></tr></table></figure>
<h4 id="换源"><a href="#换源" class="headerlink" title="换源"></a>换源</h4><ul>
<li><p>pip<br>更换<code>pip</code>的默认源以加速下载,如使用清华大学镜像:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple</span><br></pre></td></tr></table></figure>
<p>使用<code>-i</code>的方法是临时性的,并不是永久的</p>
</li>
<li><p>conda<br>conda换源和切换至特定通道安装:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">conda install numpy -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main</span><br><span class="line"></span><br><span class="line">conda install conda-pack -c conda-forge</span><br></pre></td></tr></table></figure></li>
</ul>
<blockquote>
<p><strong>注</strong>:“源”(<code>pip</code>中的<code>--index-url</code>或<code>-i</code>选项)与“通道”(<code>conda</code>中的<code>-c</code>或<code>--channel</code>选项)尽管在功能上都是指代软件包的来源,但它们分别对应于<code>pip</code>与<code>conda</code>各自独立的服务体系(PyPI与Anaconda Cloud)及其特有的命令行参数。</p>
</blockquote>
<h4 id="国内镜像源"><a href="#国内镜像源" class="headerlink" title="国内镜像源"></a>国内镜像源</h4><p>同时,在指定源进行安装的时候,为了避免一些安全性问题,建议选择常规可信源进行安装。</p>
<table>
<thead>
<tr>
<th></th>
<th>一些常见的源</th>
</tr>
</thead>
<tbody><tr>
<td>清华:</td>
<td><a target="_blank" rel="noopener" href="https://pypi.tuna.tsinghua.edu.cn/simple">https://pypi.tuna.tsinghua.edu.cn/simple</a></td>
</tr>
<tr>
<td>阿里云</td>
<td><a target="_blank" rel="noopener" href="http://mirrors.aliyun.com/pypi/simple/">http://mirrors.aliyun.com/pypi/simple/</a></td>
</tr>
<tr>
<td>中科大</td>
<td><a target="_blank" rel="noopener" href="https://pypi.mirrors.ustc.edu.cn/simple/">https://pypi.mirrors.ustc.edu.cn/simple/</a></td>
</tr>
<tr>
<td>豆瓣</td>
<td><a target="_blank" rel="noopener" href="http://pypi.douban.com/simple/">http://pypi.douban.com/simple/</a></td>
</tr>
</tbody></table>
<h3 id="更新"><a href="#更新" class="headerlink" title="更新"></a>更新</h3><h2 id="更新单个包:更新所有已安装包:-卸载-查看查看单一包的详情查看所有已安装的包"><a href="#更新单个包:更新所有已安装包:-卸载-查看查看单一包的详情查看所有已安装的包" class="headerlink" title="更新单个包:更新所有已安装包:### 卸载### 查看查看单一包的详情查看所有已安装的包"></a>更新单个包:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip install --upgrade <package_name></span><br><span class="line"></span><br><span class="line">conda update <package_name></span><br></pre></td></tr></table></figure><br>更新所有已安装包:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip install --upgrade --all</span><br><span class="line"></span><br><span class="line">conda update --all</span><br></pre></td></tr></table></figure><br>### 卸载<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip uninstall <package_name></span><br><span class="line"></span><br><span class="line">conda remove <package_name></span><br></pre></td></tr></table></figure><br>### 查看<br>查看单一包的详情<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip show <package_name></span><br><span class="line"></span><br><span class="line">conda list <package_name></span><br></pre></td></tr></table></figure><br>查看所有已安装的包<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip list</span><br><span class="line"></span><br><span class="line">conda list</span><br></pre></td></tr></table></figure></h2><h2 id="2-requirements"><a href="#2-requirements" class="headerlink" title="2. requirements"></a>2. requirements</h2><h3 id="依据requirements-txt安装"><a href="#依据requirements-txt安装" class="headerlink" title="依据requirements.txt安装"></a>依据requirements.txt安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">pip install -r requirements.txt</span><br><span class="line">pip install --requirement requirements.txt</span><br><span class="line"></span><br><span class="line">conda install --<span class="built_in">yes</span> --file requirements.txt</span><br><span class="line">conda install -y -f requirements.txt</span><br></pre></td></tr></table></figure>
<h3 id="生成requirements-txt"><a href="#生成requirements-txt" class="headerlink" title="生成requirements.txt"></a>生成requirements.txt</h3><p>使用<code>pip</code>自带功能生成:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pip freeze > requirements.txt</span><br><span class="line"><span class="comment"># 自带的功能,会把所有包都生成出来</span></span><br></pre></td></tr></table></figure>
<p><strong>使用第三方工具<code>pipreqs</code>生成:</strong>(推荐)</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">pip install pipreqs</span><br><span class="line"></span><br><span class="line">pipreqs . </span><br><span class="line"><span class="comment"># 对当前路径下的文件进行requirements生成</span></span><br><span class="line">pipreqs . --encoding=utf8</span><br><span class="line"><span class="comment"># 加上这个避免一些编码错误</span></span><br></pre></td></tr></table></figure>
<p><a id="RecommendPipreqs"></a></p>
<h3 id="freeze和pipreqs的差别"><a href="#freeze和pipreqs的差别" class="headerlink" title="freeze和pipreqs的差别"></a>freeze和pipreqs的差别</h3><p><code>pip freeze</code> 用于列出当前 Python 环境中<strong>所有已安装包及其版本</strong>。<br>执行此命令时,它不分项目边界,一视同仁地捕捉环境中所有的软件包,无论这些包是否直接服务于当前项目。<br>也导致生成的 <code>requirements.txt</code> 文件可能<strong>包含大量非项目必需的依赖</strong>,提供的是全局环境快照,依赖列表过于宽泛。</p>
<p><code>pipreqs</code> 是一款专门<strong>针对项目</strong>代码进行依赖分析的工具。<br>它通过静态解析项目目录下的源代码和相关文件(如 <code>.py</code>, <code>.ipynb</code>, <code>.yaml</code> 等),识别出项目实际引用的库。<br>基于这种精准分析,生成的 <code>requirements.txt</code> 文件<strong>仅包含项目实际使用的依赖</strong>,剔除了无关包。所以通常更推荐使用 <code>pipreqs</code>。</p>
<hr>
<h2 id="3-conda环境"><a href="#3-conda环境" class="headerlink" title="3. conda环境"></a>3. conda环境</h2><ul>
<li>创建<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda create -n New_env python=3.7</span><br><span class="line">conda create --name New_env python=3.7</span><br></pre></td></tr></table></figure></li>
<li>重命名env<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda create --name conda-new --<span class="built_in">clone</span> conda-old</span><br><span class="line"><span class="comment"># 通过克隆进行重命名</span></span><br></pre></td></tr></table></figure></li>
<li>查看环境<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda <span class="built_in">env</span> list</span><br><span class="line">conda info --envs</span><br></pre></td></tr></table></figure></li>
<li>激活与退出<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">conda activate <env_name></span><br><span class="line"></span><br><span class="line">conda deactivate</span><br></pre></td></tr></table></figure></li>
<li>删除环境<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda <span class="built_in">env</span> remove --name <env_name></span><br></pre></td></tr></table></figure></li>
</ul>
<h3 id="环境迁移"><a href="#环境迁移" class="headerlink" title="环境迁移"></a>环境迁移</h3><ul>
<li><p>Export环境配置进行迁移</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 导出环境配置</span></span><br><span class="line">conda <span class="built_in">env</span> <span class="built_in">export</span> > enviroment.yml</span><br><span class="line"><span class="comment"># 依据环境配置创建环境</span></span><br><span class="line">conda <span class="built_in">env</span> create -f enviroment.yml</span><br></pre></td></tr></table></figure>
</li>
<li><p>打包环境进行迁移</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">conda install conda-pack -c conda-forge</span><br><span class="line"><span class="comment"># 从通道conda-forge安装conda-pack工具</span></span><br><span class="line"></span><br><span class="line">conda pack -n <env_name> -o /path/to/<output_filename>.tar.gz</span><br></pre></td></tr></table></figure>
<p>eg.</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda pack -n mask-rcnn -o /pack_envs/mask-rcnn.tar.gz</span><br><span class="line"><span class="comment"># 将环境存储到路径为<>的文件中</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>导入打包好的环境<br>将打包文件移动至目标路径,并解压。<br>假设目标路径为<code>$CondaPath/<env_name></code>,操作如下:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> <span class="variable">$CondaPath</span></span><br><span class="line"><span class="built_in">mkdir</span> <env_name></span><br><span class="line"><span class="built_in">cd</span> <env_name></span><br><span class="line">tar -xzvf /path/to/<pack_filename>.tar.gz</span><br></pre></td></tr></table></figure>
<p>激活并验证已导入的环境:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda <span class="built_in">env</span> list</span><br><span class="line">conda activate <env_name></span><br></pre></td></tr></table></figure></li>
</ul>
<p><strong>注意</strong>:<code>$CondaPath</code>代表conda环境目录,通常位于<code>/root/anaconda/envs</code>(或其他路径),具体位置可通过<code>conda info</code>命令查看。</p>
<hr>
<h2 id="更新说明"><a href="#更新说明" class="headerlink" title="更新说明"></a>更新说明</h2><p><strong>2024年4月20日</strong></p>
<ul>
<li>补充了freeze和pipreqs的区别,说明为什么更推荐pipreqs。<a href="#RecommendPipreqs">跳转</a></li>
</ul>
<!-- reward -->
</div>
<!-- copyright -->
<footer class="article-footer">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/mikhayeeer.github.io/tags/CLI/" rel="tag">CLI</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/mikhayeeer.github.io/tags/Python/" rel="tag">Python</a></li></ul>
</footer>
</div>
</article>
<article
id="post-Windows常用CMD命令"
class="article article-type-post"
itemscope
itemprop="blogPost"
data-scroll-reveal
>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/mikhayeeer.github.io/2023/03/06/Windows%E5%B8%B8%E7%94%A8CMD%E5%91%BD%E4%BB%A4/"
>Windows Command</a>
</h2>
</header>
<div class="article-meta">
<a href="/mikhayeeer.github.io/2023/03/06/Windows%E5%B8%B8%E7%94%A8CMD%E5%91%BD%E4%BB%A4/" class="article-date">
<time datetime="2023-03-06T03:24:14.000Z" itemprop="datePublished">2023-03-06</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/mikhayeeer.github.io/categories/Developers-Tool/">Developers'Tool</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>&emsp; 个人在使用python和运行vs还有git的时候,感觉还是经常会用到cmd相关的命令,而课堂上只是学习过linux相关的命令,和cmd又有些不同,经常会出错,故此总结记录一下,以后也方便自己进行查找翻看。<br>适合与Linux命令结合学习,注意异同点[[Linux]]</p>
<h1 id="0-启动"><a href="#0-启动" class="headerlink" title="0. 启动"></a>0. 启动</h1><p><kbd>Win</kbd> + <kbd>r</kbd> 进入运行,输入cmd<br>按下<kbd>Enter</kbd>进入cmd;<br>按下<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Enter</kbd>使用管理员权限启动</p>
<h1 id="1-常用命令"><a href="#1-常用命令" class="headerlink" title="1. 常用命令"></a>1. 常用命令</h1><h2 id="1-1-跳转硬盘"><a href="#1-1-跳转硬盘" class="headerlink" title="1.1 跳转硬盘"></a>1.1 跳转硬盘</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">d: //跳转到D盘</span><br><span class="line">f: //跳转到F盘</span><br><span class="line"></span><br><span class="line">cd /d d: //加参数/d跳转到D盘</span><br></pre></td></tr></table></figure>
<h2 id="1-2-cd命令"><a href="#1-2-cd命令" class="headerlink" title="1.2 cd命令"></a>1.2 cd命令</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">cd /? //获取使用帮助</span><br><span class="line">cd \ //根目录</span><br><span class="line"></span><br><span class="line">cd .. //上级目录 </span><br><span class="line">cd test //进入当前目录下的test文件夹</span><br><span class="line">cd c:\test1 //跳转当前磁盘下的其他文件夹</span><br></pre></td></tr></table></figure>
<h2 id="1-3-查看文件目录"><a href="#1-3-查看文件目录" class="headerlink" title="1.3 查看文件目录"></a>1.3 查看文件目录</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">dir //查看当前文件夹下的文件</span><br><span class="line"></span><br><span class="line">//该命令类似于linux的ls命令,经常混淆</span><br><span class="line"></span><br><span class="line">dir /? //查看隐藏文件夹</span><br></pre></td></tr></table></figure>
<h3 id="1-4-清除屏幕"><a href="#1-4-清除屏幕" class="headerlink" title="1.4 清除屏幕"></a>1.4 清除屏幕</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cls //类似Linux的clear</span><br></pre></td></tr></table></figure>
<h3 id="1-5-查看ip与网络相关"><a href="#1-5-查看ip与网络相关" class="headerlink" title="1.5 查看ip与网络相关"></a>1.5 查看ip与网络相关</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">ipconfig //查看ip</span><br><span class="line"></span><br><span class="line">ping [ip] //测试与【ip】的连接是否畅通</span><br><span class="line"></span><br><span class="line">netstat -ano //查看网络连接、状态与对应进程id</span><br></pre></td></tr></table></figure>
<h3 id="1-6-创建删除文件夹(目录)"><a href="#1-6-创建删除文件夹(目录)" class="headerlink" title="1.6 创建删除文件夹(目录)"></a>1.6 创建删除文件夹(目录)</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">md Dir1 //创建文件夹Dir1</span><br><span class="line">rd Dir1 //删除文件夹Dir1</span><br></pre></td></tr></table></figure>
<h3 id="1-7-删除复制移动文件"><a href="#1-7-删除复制移动文件" class="headerlink" title="1.7 删除复制移动文件"></a>1.7 删除复制移动文件</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">copy [文件path1] [文件path2] //把文件从一个位置复制到另一个位置</span><br><span class="line"></span><br><span class="line">move [文件path1] [文件path2] //把文件从一个位置移动到另一个位置</span><br><span class="line"></span><br><span class="line">del File1 //删除文件File1,仅能删除文件,不能删除文件夹</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h3 id="查看帮助"><a href="#查看帮助" class="headerlink" title="查看帮助"></a>查看帮助</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">-help</span><br><span class="line">/?</span><br></pre></td></tr></table></figure>
<h1 id="2-Git命令的相关使用"><a href="#2-Git命令的相关使用" class="headerlink" title="2. Git命令的相关使用"></a>2. Git命令的相关使用</h1><h1 id="3-Python相关使用"><a href="#3-Python相关使用" class="headerlink" title="3. Python相关使用"></a>3. Python相关使用</h1><p>下载python的库命令pip [[Pip——Python的包管理工具]]</p>
<h1 id="4-Visual-Studio的相关使用"><a href="#4-Visual-Studio的相关使用" class="headerlink" title="4. Visual Studio的相关使用"></a>4. Visual Studio的相关使用</h1><h1 id="5-Java相关使用"><a href="#5-Java相关使用" class="headerlink" title="5. Java相关使用"></a>5. Java相关使用</h1>
<!-- reward -->
</div>
<!-- copyright -->
<footer class="article-footer">
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/mikhayeeer.github.io/tags/CLI/" rel="tag">CLI</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/mikhayeeer.github.io/tags/Windows/" rel="tag">Windows</a></li></ul>
</footer>
</div>
</article>
<article
id="post-hello-world"
class="article article-type-post"
itemscope
itemprop="blogPost"
data-scroll-reveal
>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/mikhayeeer.github.io/2023/03/06/hello-world/"
>Hello World</a>
</h2>
</header>
<div class="article-meta">
<a href="/mikhayeeer.github.io/2023/03/06/hello-world/" class="article-date">
<time datetime="2023-03-06T01:42:06.895Z" itemprop="datePublished">2023-03-06</time>
</a>
</div>
<div class="article-entry" itemprop="articleBody">
<p>Welcome to <a target="_blank" rel="noopener" href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a target="_blank" rel="noopener" href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a target="_blank" rel="noopener" href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a target="_blank" rel="noopener" href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p>
<h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure>
<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/writing.html">Writing</a></p>
<h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure>
<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/server.html">Server</a></p>
<h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure>
<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/generating.html">Generating</a></p>
<h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure>
<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>
<!-- reward -->
</div>
<!-- copyright -->
<footer class="article-footer">
</footer>
</div>
</article>
</article>
</section>
</div>
<footer class="footer">
<div class="outer">
<ul>
<li>
Copyrights ©
2023-2024
<i class="ri-heart-fill heart_icon"></i> Danzel
</li>
</ul>
<ul>
<li>
</li>
</ul>
<ul>
<li>
<span>
<span><i class="ri-user-3-fill"></i>Visitors:<span id="busuanzi_value_site_uv"></span></span>
<span class="division">|</span>
<span><i class="ri-eye-fill"></i>Views:<span id="busuanzi_value_page_pv"></span></span>
</span>
</li>
</ul>
<ul>
</ul>
<ul>
</ul>
<ul>
<li>
<!-- cnzz统计 -->
<script type="text/javascript" src='https://s9.cnzz.com/z_stat.php?id=1278069914&web_id=1278069914'></script>
</li>
</ul>
</div>
</footer>
</main>
<div class="float_btns">
<div class="totop" id="totop">
<i class="ri-arrow-up-line"></i>
</div>
<div class="todark" id="todark">
<i class="ri-moon-line"></i>
</div>
</div>
<aside class="sidebar on">
<button class="navbar-toggle"></button>
<nav class="navbar">
<div class="logo">
<a href="/mikhayeeer.github.io/"><img src="/images/ayer-side.svg" alt="MikhayEeer's Blog"></a>
</div>
<ul class="nav nav-main">
<li class="nav-item">
<a class="nav-item-link" href="/mikhayeeer.github.io/">主页</a>
</li>
<li class="nav-item">
<a class="nav-item-link" href="/mikhayeeer.github.io/archives">归档</a>
</li>
<li class="nav-item">
<a class="nav-item-link" href="/mikhayeeer.github.io/categories">分类</a>
</li>
<li class="nav-item">
<a class="nav-item-link" href="/mikhayeeer.github.io/tags">标签</a>
</li>
<li class="nav-item">
<a class="nav-item-link" target="_blank" rel="noopener" href="https://blog.csdn.net/Topsort">CSDN</a>
</li>
<li class="nav-item">
<a class="nav-item-link" href="/mikhayeeer.github.io/resources">资源</a>
</li>
<li class="nav-item">
<a class="nav-item-link" href="/mikhayeeer.github.io/friends">友链</a>
</li>
</ul>
</nav>
<nav class="navbar navbar-bottom">
<ul class="nav">
<li class="nav-item">
<a class="nav-item-link nav-item-search" title="Search">
<i class="ri-search-line"></i>
</a>
<a class="nav-item-link" target="_blank" href="/mikhayeeer.github.io/atom.xml" title="RSS Feed">
<i class="ri-rss-line"></i>
</a>
</li>
</ul>
</nav>
<div class="search-form-wrap">
<div class="local-search local-search-plugin">
<input type="search" id="local-search-input" class="local-search-input" placeholder="Search...">
<div id="local-search-result" class="local-search-result"></div>
</div>
</div>
</aside>
<div id="mask"></div>
<!-- #reward -->
<div id="reward">
<span class="close"><i class="ri-close-line"></i></span>
<p class="reward-p"><i class="ri-cup-line"></i>请我喝杯咖啡吧~</p>
<div class="reward-box">
<div class="reward-item">
<img class="reward-img" src="/mikhayeeer.github.io/images/alipay.jpg">
<span class="reward-type">支付宝</span>
</div>
<div class="reward-item">
<img class="reward-img" src="/mikhayeeer.github.io/images/wechat.jpg">
<span class="reward-type">微信</span>
</div>
</div>
</div>
<script src="/mikhayeeer.github.io/js/jquery-3.6.0.min.js"></script>
<script src="/mikhayeeer.github.io/js/lazyload.min.js"></script>
<!-- Tocbot -->
<script src="https://cdn.staticfile.org/jquery-modal/0.9.2/jquery.modal.min.js"></script>
<link
rel="stylesheet"
href="https://cdn.staticfile.org/jquery-modal/0.9.2/jquery.modal.min.css"
/>
<script src="https://cdn.staticfile.org/justifiedGallery/3.8.1/js/jquery.justifiedGallery.min.js"></script>
<script src="/mikhayeeer.github.io/dist/main.js"></script>
<!-- ImageViewer -->
<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
<!-- Background of PhotoSwipe.
It's a separate element as animating opacity is faster than rgba(). -->
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides.
PhotoSwipe keeps only 3 of them in the DOM to save memory.
Don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
<button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader--active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
<link rel="stylesheet" href="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe.min.css">
<link rel="stylesheet" href="https://cdn.staticfile.org/photoswipe/4.1.3/default-skin/default-skin.min.css">
<script src="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe.min.js"></script>
<script src="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe-ui-default.min.js"></script>
<script>
function viewer_init() {
let pswpElement = document.querySelectorAll('.pswp')[0];
let $imgArr = document.querySelectorAll(('.article-entry img:not(.reward-img)'))
$imgArr.forEach(($em, i) => {
$em.onclick = () => {
// slider展开状态
// todo: 这样不好,后面改成状态
if (document.querySelector('.left-col.show')) return
let items = []
$imgArr.forEach(($em2, i2) => {
let img = $em2.getAttribute('data-idx', i2)
let src = $em2.getAttribute('data-target') || $em2.getAttribute('src')
let title = $em2.getAttribute('alt')
// 获得原图尺寸
const image = new Image()
image.src = src
items.push({
src: src,
w: image.width || $em2.width,
h: image.height || $em2.height,
title: title
})
})
var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, {
index: parseInt(i)
});
gallery.init()
}
})
}
viewer_init()
</script>
<!-- MathJax -->