Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
IPFS 安装
, `  r. }- i' ~# m) E: V8 S4 o1 [, o2 b$ q4 e) O2 q1 i/ l
要使用IPFS, 第一步肯定是先把IPFS安装好,IPFS在Mac OS X 、Linux及Window平台均有提供, 可以通过这个链接下载对应平台可执行文件的压缩包。; d, m# h. \4 n$ j( n: \* ^  Y/ P

: x8 @; H* L2 D  y- y8 e: F/ q, r对于Mac OS X 及 Linux 平台,使用一下命令进行安装:1 F! }- K, I% E) t; E/ C  n0 u
3 T# [# j) H3 ?1 h+ C& U
$ tar xvfz go-ipfs.tar.gz2 D& K3 c3 ^% H3 `

' C& z: g# W- C$ cd go-ipfs
7 U5 b5 B. P% ^, U0 i# e+ U
9 B! m/ h" U  d0 O; Y$ K' Y3 h$ ./install.sh
9 e2 B5 I3 Y6 f( n9 g, c3 F6 K4 g, W' \& _+ a. v3 @( E0 T; j
上面先使用tar 对压缩包进行解压,然后执行install.sh 进行安装,安装脚本install.sh其实就是把可执行文件ipfs移动到$PATH目录下。安装完成之后,可以在命令行终端敲入ipfs试试看,如果显示一堆命令说明,则说明IPFS安装成功。% a$ d( Q! X  [+ K! T" v* y2 `
. T' H8 M# T& m/ I
在Windows平台也是类似,把ipfs.exe移动到环境变量%PATH%指定的目录下。+ j9 s5 l, W2 Y! ?
( ~* R. G/ J& f/ K5 V9 }0 D
IPFS 基本用法4 g5 k8 _) U5 `. j8 P
$ D, H4 Z6 G* _( q0 R5 I! W
IPFS初始化' }9 M) _$ Z# N$ ^) {9 l6 {- u

* R$ [5 u' R' T5 g# |安装完成之后,要使用IPFS第一步是要对IPFS进行初始化,使用ipfs init进行初始化
9 _3 a- B- ~0 q- X) B9 Z- ~, [" Q# P9 h" ?6 m7 Q+ {
> ipfs init" W$ {+ _) B  P2 y/ n" V! D
: m0 o, o5 y. K  o. X& `* ?* c4 G
initializing ipfs node at /Users/Emmett/.ipfs
/ v! i$ O5 y6 M0 h* @
. f4 T( F6 a( A3 A& lgenerating 2048-bit RSA keypair...done
, C4 p& y$ z. S9 i5 Y
; l/ M7 z" ~- [9 W# mpeer identity: QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva
3 O2 |/ }/ Q, L8 m; M
5 I8 x' p9 O- k: c0 nto get started, enter:( g2 H8 U/ E( K* W" x
1 q" Y0 s3 F4 w, m# i0 |
  ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
; f4 V6 l. Q1 O- f5 J. A. u
4 M+ y5 e5 }, y: e  v. F上面是执行命令即对应输出,在执行ipfs init进行初始化时,会有一下行为:4 f) c6 Z+ V1 ~

2 x6 h* q* x! I3 r3 d. \生成一个秘钥对并产生对应的节点id, 即命令提示:peer identity后面的hash值。  T& c# ]( v+ `( e* c. J
5 X& ]: b, A  Z& O7 u' D
节点的id用来标识和连接一个节点,每个节点的id是独一无二的, 因此大家看到的提示也会和我的不一样。
% M4 k# Z8 s- O
8 a% R/ G1 w/ j, ?/ ?, F# `在当前用户的主目录(~ 目录)下产生一个.ipfs 的隐藏目录,这个目录称之为库(repository)目录,ipfs 所有相关的数据都会放在这个目录下。
1 }  r- x! p  o4 B" t) G* ?- v8 }- N: s
$ u: ~" k% j( |- W( i# J如同步文件数据块放在.ipfs/blocks 目录,秘钥在.ipfs/keystore 目录,ipfs配置文件为:.ipfs/config。7 x0 j# Q8 K- y) e" a. S
0 Z: Y2 D" h3 \- h9 V" [2 X
IPFS 配置修改. @% B$ Z4 m  V& j1 t
- `  A4 m) C' w: x1 l" e' }
在IPFS初始化之后,可以根据需要修改配置(可选),修改方法如下:
6 W/ U0 S. @- J" r9 g& g: Q( H& B( y# g' }
cd ~/.ipfs
" U. O6 M- A. I' X* L, {3 c
6 d9 r3 Y/ C/ I3 s7 sexport EDITOR=/usr/bin/vim6 y% Y! `, B+ T# h9 |7 d
0 A9 s: Y9 n/ k
ipfs config edit* K! I3 w! [& j( ~) J- P) T9 [  o" i

: ^  h+ f$ W) S# @1 P或者直接编辑 ~/.ipfs/config 文件。
1 ^  _5 e- u5 c* Q2 D9 w1 R! A0 H) p% R0 s! S
上传文件到IPFS7 v) S, A+ `/ Z. }1 M
* J  a) F0 N) m7 ]% W7 W! k
我们先创建一个upchain.pro.txt文件,可以使用如下方式:
  `; p6 L: k# I+ P% `, m! N% a  ^% `, o9 Q' e# d' `
> echo "比特池塘:www.bitmere.com" >> upchain.pro.txt
/ h7 ^' I5 Q9 R- L* U: L
3 ?3 f& g& }# }ipfs 使用add 命令来添加内容到节点中,  在命令行输入:
  y8 B+ Z, [+ l7 i0 |: ]+ ~- y
% c: ^5 f1 s: T> ipfs add upchain.pro.txt
2 A  A% O1 C1 O2 E% ]# k; J: k4 {1 h# ~9 d5 G) [- v( e1 t6 ?
added QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi upchain.pro.txt
4 x8 c( r: s% @
  ~" R4 {3 ~( q7 i% {5 K9 h+ {43 B / 43 B [=====================================================] 100%
! T6 [/ `8 X$ @3 y* b! Y7 ^" L6 n! `7 x; U$ n. D  m/ R
当它文件添加到节点时,会为文件生成唯一的hash: QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi, 可以使用ipfs cat 查看文件的内容:
% G1 ]" D% n& ~9 P. C& {! s4 H
# f( n3 ]2 M3 S3 V. s9 A> ipfs cat QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi
8 v0 e/ n: f" y8 U: a& }0 `% G* X3 c# L0 I9 P3 Q1 H7 T

+ C4 S$ T4 J$ z8 |注意,此时文件仅仅是上传在本地的IPFS节点中,如果需要把文件同步到网络,就需要开启 daemon 服务, 使用命令:1 O/ n/ H" c/ n) R% R

, n, d7 l- f  N0 j& b> ipfs daemon
5 o( ~( z# d- k; o7 E
3 u" r, `( o2 C! ?2 nInitializing daemon...
# k; e4 D+ q( m3 x; ^3 l, w
# o2 a" o  k: R2 mgo-ipfs version: 0.4.18-
- ?* R* `; S# x$ t# ^7 ]  J
+ n! a% I# e$ F& {2 G+ vRepo version: 7; e+ A5 z% ]  Q# }4 ]* ^

% R# ~9 Y2 N4 b4 a( D+ aSystem version: amd64/darwin+ t4 ]+ Q2 k, f1 q6 V

- i) p. P; s* U  c( O. C8 n) KGolang version: go1.11.1% |+ A) I- v/ ^! N3 l$ A+ |, D

- I& N2 W+ i/ E4 cSwarm listening on /ip4/127.0.0.1/tcp/4001
6 R6 }8 j3 p/ N; v) E2 D  u6 h+ r& A" ]6 W) f
Swarm listening on /ip4/192.168.8.105/tcp/4001
0 s: R- v2 o* ^/ f# M/ e% p4 Z. h7 p! `( c
Swarm listening on /ip6/2408:84f3:82e:cfcd:409:fee2:e261:4dc3/tcp/4001
6 Z+ R7 ~+ j- s* i
  X# D- v% o3 s/ rSwarm listening on /ip6/2408:84f3:82e:cfcd:a9c6:116b:349f:8c2b/tcp/40017 l( t* J+ o7 b
1 j! |6 P( z: R5 I$ A; b. g# `9 I
Swarm listening on /ip6/2408:84f3:82e:cfcd:ec89:145d:cf27:4/tcp/40010 [: M2 S2 m6 l7 I) _
$ r9 b; K0 P$ D0 e
Swarm listening on /ip6/::1/tcp/4001) i0 I5 ?% l. S. E+ G1 M6 A

& n. Q+ a6 W7 s8 y; p, Q$ ~5 wSwarm listening on /ip6/fd1d:43b:e89b:eb9b:c405:56af:8f52:67df/tcp/4001; Q- r. f. @& u% \- \% ]6 R

- i: R9 e0 B4 O# w: ySwarm listening on /p2p-circuit3 q& X- _" e& S1 E

, \; C; a( u6 p: Y+ Z' {Swarm announcing /ip4/127.0.0.1/tcp/4001
: U8 e5 m, m; I; h" q7 \+ E
: w9 ?9 z- F8 q+ ^Swarm announcing /ip4/192.168.8.105/tcp/40015 B; Z! u6 B, k+ c# {
9 N* Z+ M( w) H: `: h4 a% P
Swarm announcing /ip6/2408:84f3:82e:cfcd:409:fee2:e261:4dc3/tcp/4001- l1 x: k" Q+ G3 ~( V5 r( `" i

9 W& e- b% K* I$ x1 [Swarm announcing /ip6/2408:84f3:82e:cfcd:a9c6:116b:349f:8c2b/tcp/4001
9 B8 B) G, Y' `" u
# `) L  q7 r' }+ Z2 F( X# {) L) ?Swarm announcing /ip6/2408:84f3:82e:cfcd:ec89:145d:cf27:4/tcp/40016 F& z3 r& b, q

: V; h- ?: t4 u" m# ~1 ySwarm announcing /ip6/::1/tcp/4001
5 `% p) s0 D8 T* t. `" t
7 ?9 ?# T0 ^7 e2 YSwarm announcing /ip6/fd1d:43b:e89b:eb9b:c405:56af:8f52:67df/tcp/40018 ?5 v/ Y- e3 k# b/ L2 m. N

2 q# g& P8 v2 O& U& fAPI server listening on /ip4/127.0.0.1/tcp/5001
- n  C4 Q: F+ y1 S0 z- x8 h' V5 h# `/ j, h7 o! W1 T
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/80804 v. U1 _9 p5 V5 t% p+ Y
/ ?$ x' l5 S5 E6 E, x1 G  S/ N  N
Daemon is ready
" G3 d3 T: {: {4 v6 X) Z, Z2 ^+ a
开启 daemon 之后,Swarm 就会尝试连接其他的节点,同步数据,同时在本地还会开启两个服务:API服务及Web网关服务,下面分别介绍下:% D! ~* k) E# j2 v) }+ x

7 t& h9 ^, I5 b* G$ i7 J- H! vAPI服务,默认在5001端口,可以通过 http://localhost:5001/webui 进行访问,界面如:& b. F8 W  N# \5 p' O

3 q9 J7 E1 [& ]' [" v) M1 f这也是IPFS的一个Web版的管理控制台, 可以通过这个控制台添加文件,查看节点连接情况等等。+ }( Y# l3 T0 j% n# j4 D

3 g. j3 `. Z' l: C! ~+ C网关服务,默认在8080端口, 由于当前浏览器还不支持通过IPFS协议(ipfs://)来访问文件,如果我们要在浏览器里访问文件的话,就需要借助于IPFS 提供的网关服务,由浏览器先访问到网关,网关去获取IPFS网络杀过了的文件。 有了网关服务,就可以通过这个链接:http://localhost:8080/ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi 来访问刚刚上传到ipfs 的文件。# b/ H9 h0 {6 C' d: C

2 t0 e0 M- L! I8 E/ Bipfs 也提供了官方的网关服务:https://ipfs.io/, 因此也可以通过 https://ipfs.io/ipfs/QmQgMZKqHzy ... UDVjqhJDoaUKDymgioi (需要翻墙)来访问刚刚上传到ipfs 的文件。. K6 D) \5 x7 C  f3 E3 Y
2 K- A! T0 x0 J' ^$ {- Z+ d7 a
上传目录到IPFS
+ N8 ~0 l! R. T( O  |, `; q" d* I- I% m0 l
我们先创建一个文件夹upchain, 并把之前的 upchain.pro.txt 放进目录。
% R, `+ \0 ^$ T. i4 S) W2 h& F0 j; p' m: J
> mkdir upchain
  B% C4 P) f3 U. ^# u, Q( l" c% ?9 C+ j" w2 z9 D/ x
> mv upchain.pro.txt  upchain
- E) F# c  P5 l( U2 c3 Z: B- ?
" ]* o8 N6 w' J# p上传目录到IPFS 需要在使用 add 命令时加上 -r ,如下:
# s* ?2 s9 c. m$ E- H6 B9 b: T
4 v  u! k  e0 P8 i> ipfs add -r upchain% ^4 }: r% e# ^# H" C) h2 c2 z

; j( V5 }* |) i3 o) y- W( L3 gadded QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi upchain/upchain.pro.txt- E7 J7 E$ t) r8 H; Z" z2 Z" N

3 N3 j" q1 k1 U/ ]: F, b+ e0 k' v" Fadded QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP upchain
: u( o5 u/ k8 {+ |% |* O. h& N+ p. D
4 e. q/ n$ \- ~* J$ G0 v. Y43 B / 43 B [===========================================================================] 100.00%. j2 i6 U: a1 {4 s& b4 w
2 A1 X( M4 r( d- I+ P
在上传时文件夹,文件夹也会生成一个对应的hash,可以通过hash后接文件名来进行访问, 如:
- G2 O! A& D0 S0 @" s3 z6 X
, [  I3 H" ~5 W0 c$ n# j>ipfs cat QmQYpGRFBpHVzoShpwU5C3XgGAxJKqY83X8VXfMbyktdbP/upchain.pro.txt) z/ i5 y) n" r7 P& K; ^) Q
3 m" }% ^* z, a8 g: H$ }- Z
7 c" w7 ]0 A4 w( j- b5 w3 b1 g
在浏览器可以链接:http://127.0.0.1:8080/ipfs/QmQYp ... dbP/upchain.pro.txt 来访问。
$ |9 |" A( H) u5 M! f: y* v- v: x# n6 W4 x' g) K8 }6 Z
通过上传目录的方式,可以把整个静态网站的根目录上传到IPFS网络,这样就可以省去托管服务器,例如可以直接通过以下链接访问深入浅出区块链博客:/ V! m9 t8 y8 z* ~0 r3 ^. K/ u& l5 ^

+ _, Z+ B. }" b& u2 Phttps://ipfs.io/ipfs/QmaFWgfpRNz ... uCphq2ua/index.html& v3 ]! w) |& R
! N, [( n8 L" C3 P
使用IPNS解决文件更新问题
3 P' e  e2 e3 q$ }/ `; m; q# k& a, J+ e: V% b- e9 V+ F3 |0 P5 [# W
因为IPFS在IPFS中,对一个文件的内容修改后(如升级),会生成一个完全不同的新Hash,使用IPNS就可以利用同一个链接总是指向更新的内容,其实使用也很简单,只需要每次在内容更新之后使用ipfs name publish hash 发布到节点。: N4 s9 Q' y& K  c

8 w" j, |6 E. a1 J3 A# V例如把upchain.pro.txt发布到节点,使用下面的命令:
5 T. b3 y. s  k# ~/ O5 L) o+ h) s2 X0 z& K
> ipfs name publish QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi
% O2 _' L6 S0 q- g! `6 ?+ d8 L* p2 N8 P$ o  J/ E+ g, w! S* ?3 m, {
Published to QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva: /ipfs/QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi
+ b0 U" {/ n4 C( `8 m" D2 N1 j
4 L/ T9 x. n1 i3 v  q# ^命令中的QmQgMZKqHzyEdyJja5ioF8WaXrbUDVjqhJDoaUKDymgioi是upchain.pro.txt的hash, 命令提示中的QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva是当前节点id(大家可以回看一个前面ipfs init 的输出)。3 B0 j0 f. ]& |
0 g: r$ F/ ~) r) h8 G. L* K# {
发布之后就可以使用http://127.0.0.1:8080/ipns/QmYM3 ... VvmDU7xKUiVeswBuTva 或 https://ipfs.io/ipns/QmYM36s4ut2 ... VvmDU7xKUiVeswBuTva 来访问upchain.pro.txt的内容,如图:% J* w" V4 r8 Z# e: {

3 O" w6 o, M1 y8 u  P1 R0 |其实理想下是使用 ipns://QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva 来访问,通过网站还是前面提到的浏览器暂不支持ipfs协议。# w$ k: q8 {# t! @5 M7 m& K' m. s. U
% {+ v4 O4 V, C
现在我们来更新一下upchain.pro.txt 加入文字:“创办人:Tiny熊”
( ~1 n- K/ L/ R' z- R& r3 c2 m2 h% a! T9 w4 O
> echo "创办人:Tiny熊" >>  upchain.pro.txt3 }' O# ~  q$ _! M% Z

0 W/ a! l& J% F: [8 s4 F# \- m8 w> ipfs add upchain.pro.txt
5 m# ~; [) J- ]; j: Q0 L+ K0 r6 E! o7 Q" Q/ k9 }  z, {! j
added QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S upchain.pro.txt
! q, s! R6 j' ?5 m' x8 k1 t
4 z* }0 a+ D1 [63 B / 63 B [=============================================================] 100.00%! X) ^5 z* d* }  R
2 L' p% `& h% v' B* S" \. T; C! M
重新发布一下:4 Z2 K* w7 j, n' z

4 A* s: \# i* q$ G> ipfs name publish QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S9 c6 L8 j$ u0 n0 f' u' N
, U* W& s* k# |0 Q0 H- h
Published to QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva: /ipfs/QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S
% G$ Z6 K' X! Q, J
5 M3 Q6 y0 u; t再次访问 http://127.0.0.1:8080/ipns/QmYM3 ... VvmDU7xKUiVeswBuTva (这个链接和上面的链接一样)可以看到内容更新了。' G9 A* K8 e7 N, w. f9 S

3 l5 ^2 M8 d. J% ~6 ]9 @3 @如果我们要查询 节点id 指向的hash 可以使用 ipfs name resolve  进行查询:0 Q0 G3 K. i2 i0 q3 }9 J
1 r9 V/ R! f$ U  H, }7 Q
> ipfs name resolve( k8 ^) ~4 B' j$ _2 o. K2 Y
2 `/ Q2 f3 O! M8 o7 f
/ipfs/QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5
1 t5 \1 m8 o4 p- Y% S/ x% s% J0 M! t+ T
有一点值得大家注意: 节点id其实是公钥的hash,它的关联信息是需要经过私钥签名才可以发布,因此只有我们自己才可以更新节点的指向。
- Q& u4 C. w8 n2 S$ \/ O) _2 u9 `8 E, `$ ~
如果我们有多个站点需要更新,可以新产生一个秘钥对,使用新的key 发布,如:
0 k8 Z# v$ i, a! s( f4 ^
( D) r3 i9 A- r0 X1 G! Y> ipfs key gen --type=rsa --size=2048 mykey
+ O+ n9 h5 f" H5 m+ p, F% \2 e: |% Q
8 D5 R( ^: Z/ l/ b7 Q. CQmVZvdYEsdfHSR43Qm1fY8eDFrhB3UNZ2oVyEuVUH3VHrg7 r9 r1 }8 m+ I7 X
* R% [' Q' V, M1 \$ S# H& d
> ipfs name publish --key=mykey  hashxxx3 A/ g, i! f: u, ^$ q! t. P3 Q

6 M3 {2 V! S5 `9 G. _Pinning
: K( x5 I0 K- x. ?" P1 n3 h
: t) v5 M5 E8 u# U( l4 e/ APinning 在IPFS里是一个很重要的概念,当我们每次请求一个网络上的内容的时候,IPFS总是会把内容先同步的本地提供服务,而为了防止 IPFS 存储空间不停增长,实际上使用cache 机制来处理文件, 如果文件在一段时间内没有被使用,文件会被”回收“。 Pinning 的作用就是把文件”钉“住,确保文件在本地不被”回收“。 如果是重要的文件,就可以使用 Pinning 防止文件被删除。
, ?9 B; D% t( I# Q. D
; R  n; a7 m% x1 N4 O当我们使用ipfs add 添加文件时,默认会进行Pinning(使用其他命令获取的文件不会进行pinning),
, A3 H# I& \! l! J* D- X8 i. U+ r+ n! r$ Z
IPFS 提供了pin命令进行Pinning操作, 比如我们查询下某一个hash 是否被pin:
5 z2 E4 H: s  C
+ M, |6 s' E2 s> ipfs pin ls QmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S
9 O6 _& x; ^! b* b
3 x0 }; Z9 Q3 NQmUUiDN6tWtj89xmUw1iCK2NczBqE6m3zH9QnbhHoMvZ5S recursive$ I- C. c7 x# [! n% w1 f4 g$ h
5 C7 O$ L! s- ]  t
> ipfs pin ls QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK71 L  e! f+ k1 M- A# g& Q  }

6 J: e: ~5 B; W; ~Error: path 'QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7' is not pinned# a; z/ x3 b$ w* e
, X  }. R& U: b% N
可以使用 pin add 手动钉住一个文件,如:
% \6 w6 t( G6 h& B& S* z; P7 R5 y! r- O, q
> ipfs pin add QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7
4 H2 G" U/ r+ D! R* h1 i1 Y
" I" F# |0 J; H+ Zpinned QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7 recursively8 O+ p  Z. ], T! Q3 r4 I

) A4 `9 L7 e  J7 @& M如果要删除pin的状态,使用pin rm , 如:
& ^$ g7 k/ I1 s* y# R$ g4 \2 }- ^) m6 a; a; t$ Z9 d5 i
> ipfs pin rm -r QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7
& \% f! i2 g/ M. A, f4 d9 @; Z! D9 m& g
unpinned QmWnrAEKyDVUQ1jh9vDtQhtBSNEgUnQhAJyMmo3JjwJZK7
- q" }' E5 R, ?2 V1 @2 s2 C2 m0 @" g+ |* v$ n
pin rm 的参数 -r 表示递归的删除pin 状态,对于没有pin住的文件, 如果执行GC操作 ipfs repo gc 文件会被删除。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

在冰雪中的玫瑰 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2