ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Git/Github 学习笔记

2022-05-16 16:01:32  阅读:78  来源: 互联网

标签:Git -- 笔记 仓库 命令 git Github 分支


Git

一、基本概念

Git 是一个开源的分布式版本控制系统。是一个开放源码的版本控制软件。它采用了分布式版本库的方式,不必服务器端软件支持。

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

特点:

  • Git 是分布式的
  • Git 把内容按元数据方式存储
  • Git 没有一个全局的版本号
  • Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

img

二、安装配置

Linux

sudo apt-get install git -y

温豆师

二进制文件。

阿里源地址

配置

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。

    [pack]
    packsizelimit = 2g
    [diff "astextplain"]
    textconv = astextplain
    [filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
    [http]
    sslBackend = openssl
    sslCAInfo = F:/Git/mingw32/ssl/certs/ca-bundle.crt
    [core]
    autocrlf = true
    fscache = true
    symlinks = true
    [pull]
    rebase = false
    [credential]
    helper = manager-core
    [credential "https://dev.azure.com"]
    useHttpPath = true
    [init]
    defaultBranch = main

  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。

    [core]
    editor = "F:\Microsoft VS Code\bin\code" --wait
    [user]
    name = ymj68520
    email = ymj68520@std.uestc.edu.cn

  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings$USER。

此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

1. 用户信息

配置个人的用户名称和电子邮件地址:

$ git config --global user.name "name"
$ git config --global user.email name@bula.com

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

2. 文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

$ git config --global core.editor emacs

3. 差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

$ git config --global merge.tool vimdiff

4. 查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
pack.packsizelimit=2g
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=F:/Git/mingw32/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=true
pull.rebase=false
credential.helper=manager-core
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=main
core.editor="F:\Microsoft VS Code\bin\code" --wait
user.name=ymj68520
user.email=ymj68520@std.uestc.edu.cn

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name
ymj68520

三、Git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

如下图所示:

img

四、Git 工作区、暂存区和版本库

基本概念

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

工作示意图

img

图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。

图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。

当执行 git checkout . 或者 git checkout -- 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

当执行 git checkout HEAD . 或者 git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

五、Git 创建仓库

git init

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

使用方法

使用当前目录作为 Git 仓库,我们只需使它初始化。

git init

该命令执行完后会在当前目录生成一个 .git 目录。


使用我们指定目录作为Git仓库。

git init newrepo

初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。


如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

注: 在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "

所以在 git bash 中 git commit -m '提交说明' 这样是可以的,在 Windows 命令行中就要使用双引号 git commit -m "提交说明"



git clone

我们使用 git clone 从现有 Git 仓库中拷贝项目

克隆仓库的命令格式为:

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

参数说明:

  • repo:Git 仓库。
  • directory:本地目录。

七、Git 基本操作

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。

Git 常用的是以下 6 个命令:git clonegit pushgit addgit commitgit checkoutgit pull.

如图:

img

说明:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

基本命令

  • 创建仓库命令

    下表列出了 git 创建仓库的命令:

    命令 说明
    git init 初始化仓库
    git clone 拷贝一份远程仓库,也就是下载一个项目。
  • 提交与修改

    下表列出了有关创建与提交你的项目的快照的命令:

    命令 说明
    git add 添加文件到暂存区
    git status 查看仓库当前的状态,显示有变更的文件。
    git diff 比较文件的不同,即暂存区和工作区的差异。
    git commit 提交暂存区到本地仓库。
    git reset 回退版本。
    git rm 删除工作区文件。
    git mv 移动或重命名工作区文件。
  • 提交日志

    命令 说明
    git log 查看历史提交记录
    git blame <file> 以列表形式查看指定文件的历史修改记录
  • 远程操作

    命令 说明
    git remote 远程仓库操作
    git fetch 从远程获取代码库
    git pull 下载远程代码并合并
    git push 上传远程代码并合并

八、Git 分支管理

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

创建分支命令:

git branch (branchname)

切换分支命令:

git checkout (branchname)

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。


合并分支命令:

git merge 

你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。

管理方法

  1. 列出分支

    列出分支基本命令:

    git branch
    

    没有参数时,git branch 会列出你在本地的分支。

    $ git branch
    * master
    

    此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。

    当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。

    如果我们要手动创建一个分支。执行 git branch (branchname) 即可。

    $ git branch testing
    $ git branch
    * master
      testing
    

    我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。

    使用分支将工作切分开来,从而让我们能够在不同开发环境中做事,并来回切换。

  2. 删除分支

    删除分支命令:

    git branch -d (branchname)
    
  3. 分支合并

    一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去:

    git merge (branch_merge2main)
    
  4. 合并冲突

    合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。

    $ git checkout -b change_site # 创建分支
    $ git diff	# 查看差异
    $ git commit -am '修改代码'
    # 现在这些改变已经记录到我的 "master" 分支了。接下来我们将 "change_site" 分支合并过来。
    $ git merge change_site
    # 我们将前一个分支合并到 master 分支,一个合并冲突就出现了,接下来我们需要手动去修改它。
    

    在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决

    # 查看状态
    $ git status -s
    UU bulabula
     
    $ git add bulabula
    $ git status -s
    M  bulabula
    $ git commit
    

九、Git 查看提交历史记录

Git 提交历史一般常用两个命令:

  • git log - 查看历史提交记录。
  • git blame <file> - 以列表形式查看指定文件的历史修改记录。

git log

在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。(以下使用code-server示例)

$ git log
commit aa08f84aeb63654da17e11c83230a8df6d7f75df (HEAD -> main, origin/main, origin/HEAD)
Merge: a51836fc bee35549
Author: Joe Previte jjprevite@gmail.com
Date: Fri Jun 18 10:04:48 2021 -0700

Merge pull request #3635 from cdr/dependabot/npm_and_yarn/typescript-4.3.4

chore(deps-dev): bump typescript from 4.3.2 to 4.3.4

commit a51836fca7ff41846c654d5d8768d697e6d18d48
Merge: 5f7e9b73 d9bb1a36
Author: Joe Previte jjprevite@gmail.com
Date: Fri Jun 18 10:04:06 2021 -0700

Merge pull request #3629 from cdr/jsjoeio/docs-testing

docs(CONTRIBUTING): add section on testing

commit bee35549f1bd1bf564d1fe351ba4b01369594184
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri Jun 18 11:03:23 2021 +0000

chore(deps-dev): bump typescript from 4.3.2 to 4.3.4

Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.3.2 to 4.3.4.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.3.2...v4.3.4)

---

我们可以用 --oneline 选项来查看历史记录的简洁的版本。

$ git log --oneline
aa08f84a (HEAD -> main, origin/main, origin/HEAD) Merge pull request #3635 from cdr/dependabot/npm_and_yarn/typescript-4.3.4
a51836fc Merge pull request #3629 from cdr/jsjoeio/docs-testing
bee35549 chore(deps-dev): bump typescript from 4.3.2 to 4.3.4
d9bb1a36 docs(contr): add section on testing
5f7e9b73 Merge pull request #3630 from janiversen/patch-1
ece5de69 Update CONTRIBUTING.md
bf45e7ca chore(deps-dev): bump @types/ws from 7.4.4 to 7.4.5 (#3627)
9dae4fec chore(deps): bump ws from 7.4.6 to 7.5.0 (#3625)
83701f9f Merge pull request #3626 from cdr/dependabot/npm_and_yarn/wtfnode-0.9.0
4e14c11f Allow development on any architecture (#3598)
79f372c1 chore(deps-dev): bump wtfnode from 0.8.4 to 0.9.0
cbe31929 Merge pull request #3617 from cdr/dependabot/npm_and_yarn/audit-ci-4.1.0
ddbff58e Merge pull request #3602 from patrickcylai/patrickcylai/fix-docs-hashed-password
18c0f32c chore(deps-dev): bump audit-ci from 4.0.0 to 4.1.0
b59b3936 Fix incorrect logout base (#3611)
3241a4f5 chore(deps-dev): bump @typescript-eslint/parser from 4.26.1 to 4.27.0 (#3609)
5c9b625a chore(deps-dev): bump @typescript-eslint/eslint-plugin (#3610)
5fae520e fix: placeholder password in hashed password example
4bb7a8dd Merge pull request #3590 from mxschmitt/chore/upgrade-to-latest-playwright
2c818e38 Merge pull request #3589 from cdr/dependabot/npm_and_yarn/argon2-0.28.2
dbb34ad7 chore: upgrade to Playwright 1.12 with its new test-runner
fda44240 chore(deps): bump argon2 from 0.28.0 to 0.28.2
9fc9c041 Merge pull request #3588 from cdr/dependabot/npm_and_yarn/lib/vscode/normalize-url-4.5.1
a802a920 Merge pull request #3587 from cdr/dependabot/npm_and_yarn/lib/vscode/build/normalize-url-4.5.1
54684c0a chore(deps): bump normalize-url from 4.5.0 to 4.5.1 in /lib/vscode
2594aa3e chore(deps): bump normalize-url from 4.5.0 to 4.5.1 in /lib/vscode/build
717eaa64 Merge pull request #3422 from cdr/jsjoeio/fix-password-hash
1e55a648 feat: check for empty str in isHashMatch

这告诉我们的是,此项目的开发历史。

我们还可以用 --graph 选项,查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项:

git log --graph

  • commit aa08f84aeb63654da17e11c83230a8df6d7f75df (HEAD -> main, origin/main, origin/HEAD)
    |\ Merge: a51836fc bee35549
    | | Author: Joe Previte jjprevite@gmail.com
    | | Date: Fri Jun 18 10:04:48 2021 -0700
    | |
    | | Merge pull request #3635 from cdr/dependabot/npm_and_yarn/typescript-4.3.4
    | |
    | | chore(deps-dev): bump typescript from 4.3.2 to 4.3.4
    | |
    | * commit bee35549f1bd1bf564d1fe351ba4b01369594184
    | | Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    | | Date: Fri Jun 18 11:03:23 2021 +0000
    | |
    | | chore(deps-dev): bump typescript from 4.3.2 to 4.3.4
    | |
    | | Bumps typescript from 4.3.2 to 4.3.4.
    | | - Release notes
    | | - Commits
    | |
    | | ---
    | | updated-dependencies:
    | | - dependency-name: typescript
    | | dependency-type: direct:development
    | | update-type: version-update:semver-patch
    | | ...
    | |
    | | Signed-off-by: dependabot[bot] support@github.com
    | |
  • | commit a51836fca7ff41846c654d5d8768d697e6d18d48

你也可以用 --reverse 参数来逆向显示所有日志。

如果只想查找指定用户的提交日志可以使用命令:git log --author 。

如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。

  • 例如,如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(我还用了 --no-merges 选项以隐藏合并提交):

  • $ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
    

git blame

  • 如果要查看指定文件的修改记录可以使用 git blame 命令,格式如下:

  • git blame <file>
    
  • git blame 命令是以列表形式显示修改记录,如下实例:

  • $ git blame README.md
    b415b7524 (Ben Potter 2020-10-06 17:29:53 -0400 1) # code-server · "GitHub Discussions" "Join us on Slack" Twitter Follow
    9cd81f73f (Asher 2019-01-07 18:46:19 -0600 2)
    cb5997b51 (Joe Previte 2021-04-26 14:13:02 -0700 3) codecov
    31aac201b (Joe Previte 2021-05-21 16:04:55 -0700 4) See latest docs
    304422472 (Joe Previte 2021-01-25 10:34:51 -0700 5)
    6a25b3bfa (Anmol Sethi 2020-05-17 16:53:08 -0400 6) Run VS Code on any machine anywhere and access it in the browser.
    1d8da2161 (Ammar Bandukwala 2019-03-05 17:45:21 -0800 7)
    475625720 (Joe Previte 2021-02-03 09:32:35 -0700 8) Screenshot
    7dcfde732 (Anmol Sethi 2020-05-21 22:16:16 -0400 9)
    7dcfde732 (Anmol Sethi 2020-05-21 22:16:16 -0400 10) ## Highlights
    7dcfde732 (Anmol Sethi 2020-05-21 22:16:16 -0400 11)
    860c99e3b (Katie Horne 2020-10-29 16:21:47 -0500 12) - Code on any device with a consistent development environment
    860c99e3b (Katie Horne 2020-10-29 16:21:47 -0500 13) - Use cloud servers to speed up tests, compilations, downloads, and more
    860c99e3b (Katie Horne 2020-10-29 16:21:47 -0500 14) - Preserve battery life when you're on the go; all intensive tasks run on your server
    41d625abb (Anmol Sethi 2020-05-12 01:46:38 -0400 15)
    4fc0f9218 (Robert Wilkins III 2021-02-09 23:41:36 -0600 16) ## Requirements
    4fc0f9218 (Robert Wilkins III 2021-02-09 23:41:36 -0600 17)
    4fc0f9218 (Robert Wilkins III 2021-02-09 23:41:36 -0600 18) For a good experience, we recommend at least:
    4fc0f9218 (Robert Wilkins III 2021-02-09 23:41:36 -0600 19)


十、Git标签

如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。

比如说,我们想为我们的 bula 项目发布一个"1.0"版本。 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签。

-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。

$ git tag -a v1.0 

当你执行 git tag -a 命令时,Git 会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。


如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。使用内容哈希值。

$ git tag -a v1.0 hash_value

如果我们要查看所有标签可以使用以下命令:

$ git tag

指定标签信息命令:

git tag -a <tagname> -m "some_string"

PGP签名标签命令:

git tag -s <tagname> -m "some_string"

十一、Git 远程仓库(github)

创建远程库

如果你想通过 Git 分享你的代码或者与其他开发人员合作, 你就需要将数据放到一台其他开发人员能够连接的服务器上。

gitbub 教程

首先在本地创建ssh key;

$ ssh-keygen -t rsa -C "your_email@youremail.com"

后面的your_email@youremail.com改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key

回到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title随便填,粘贴在你电脑上生成的key。

为了验证是否成功,在git bash下输入:

$ ssh -T git@github.com

如果是第一次的会提示是否continue,输入yes就会看到:You've successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。

接下来我们要做的就是把本地仓库传到github上去,在此之前还需要设置username和email,因为github每次commit都会记录他们。

$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"

进入要上传的仓库,右键git bash,添加远程地址:

$ git remote add origin git@github.com:yourName/yourRepo.git

后面的yourName和yourRepo表示你再github的用户名和刚才新建的仓库,加完之后进入.git,打开config,这里会多出一个remote "origin"内容,这就是刚才添加的远程地址,也可以直接修改config来配置远程地址。

创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库。

检出仓库

执行如下命令以创建一个本地仓库的克隆版本:

git clone /path/to/repository 

如果是远端服务器上的仓库,你的命令会是这个样子:

git clone username@host:/path/to/repository

之后登录后点击" New repository "

# 提交到 Github
$ git remote add origin git@github.com:repo/project.git
$ git push -u origin master

查看当前的远程库

要查看当前配置有哪些远程仓库,可以用命令:

git remote

执行时加上 -v 参数,你还可以看到每个别名的实际链接地址。


提取远程仓库

Git 有两个命令用来提取远程仓库的更新。

1、从远程仓库下载新分支与数据:

git fetch

该命令执行完后需要执行 git merge 远程分支到你所在的分支。

2、从远端仓库提取数据并尝试合并到当前分支:

git merge

该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支。

推送到远程仓库

推送你的新分支与数据到某个远端仓库命令:

git push [alias] [branch]

删除远程仓库

删除远程仓库你可以使用命令:

git remote rm [alias]

标签:Git,--,笔记,仓库,命令,git,Github,分支
来源: https://www.cnblogs.com/ymj68520/p/16277242.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有