【工具】git 入门

文章目录

  • 下载安装
  • 版本库及其使用
    • 创建版本库
    • 版本创建
    • 版本回退
    • 工作区和缓存区
    • 修改管理
    • 文件比较
    • 文件删除
  • 分支管理
    • 分支创建与合并
    • 分支冲突
    • 分支管理策略[^2]
    • bug分支
  • GitHub 应用 git
    • 账号创建与绑定
    • 代码克隆与上传

git 是什么?Wiki上是这么讲的:git 是用于Linux 内核开发的版本控制工具。它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,而最为出色的是它的合并追踪(merge tracing)能力。 1

用人话讲,就是能控制代码版本的东西。最为开发者,往往更多的是用它与 Github 交互,当然,git 也可以提交代码到别的平台,这一点我们后面再讲。

这里,我们先给一个简明教程的链接,可以帮助你在5分钟内熟悉 git 的使用。当然,它过于简略,也许你需要本文来帮助你解读当中的一些要点。git - the simple guide

这里还有一个网页教程,采用游戏的方法学习 git ,不妨玩一玩,增进你对 git 的理解。Learn Git Branching

当然,如果你已经熟练掌握了 git,不妨看看事无巨细的 git documention

好耶!废话终于讲完了!进入正题!

下载安装

工欲善其事,必先利其器。

程序员欲善 git,必先安装 git。

​ ——《论语 · 没有说过》

首先你需要下载安装 git 。地址在这里git-scm.com/downloads。

下载并安装。按照如图所示进行选择。

在见到如下界面时,按照你的喜好进行选择。例如我自己选择的是 vim 。如果你不熟悉 vim ,你就先去学习 vim你也可以选择 notepad 或者 vscode 等编辑器。

【工具】git 入门_第1张图片

注意!网上不少教程在下图所示界面会让你选择 Let Git Decide,但由于 GitHub 已经将主分支名字改为 main,所以为了后续方便,把它改成 main!

【工具】git 入门_第2张图片

接下来一路next,完成安装。

版本库及其使用

创建版本库

前面说到,git 是用来进行版本控制的。为了实现这一目标,我们需要首先告诉 git ,我们需要进行版本控制的代码在哪里。

新建或使用原有的文件夹,进入文件夹,右键点击 Git Bash Here,打开如下所示页面

【工具】git 入门_第3张图片

我的电脑用户名是83442@chenyang,前面选择的文件夹为E:\code,这个每个人都不一样。

输入git init,界面上会显示

83442@Chenyang MINGW64 /e/code
$ git init
Initialized empty Git repository in E:/code/.git/

83442@Chenyang MINGW64 /e/code (main)
$

说明我们已经初始化成功。

版本创建

下面,我们在版本库中创建版本。

首先我们通过touch命令新建一个文件,比如叫做code.txt,并使用vim进行编辑,我们将它的内容修改为Hello, world!(程序员的 DNA 动了):

83442@Chenyang MINGW64 /e/code (main)
$ touch code.txt

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!

如果你不会使用 vim,也可以在文件夹中打开文件,用别的编辑器修改。

然后我们为 code.txt 创建一个版本version1.0。

83442@Chenyang MINGW64 /e/code (main)
$ git add code.txt
warning: LF will be replaced by CRLF in code.txt.
The file will have its original line endings in your working directory

83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.0"
[main (root-commit) 7be1bd8] version1.0
 1 file changed, 1 insertion(+)
 create mode 100644 code.txt

其中,version1.0可以替换成你想要的内容,用来命名你当前的版本。

查看我们刚刚创建的版本:

83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 7be1bd88fe8def114c34acc8f51617ce90044a34 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800

    version1.0

Author 处是我的 Github 用户名和邮箱所以隐去了。

这里面显示的一些信息非常重要,我们后面会进行讲解。

下面,我们再在 code.txt 中增加一行AMD, YES!(Intel低声说了句:F**k)

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!

再创建一个版本version1.1

83442@Chenyang MINGW64 /e/code (main)
$ git add code.txt
warning: LF will be replaced by CRLF in code.txt.
The file will have its original line endings in your working directory

83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.1"
[main 5090356] version1.1
 1 file changed, 1 insertion(+)

83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 50903560253d0f177d8433dcd4a766c1731e9ab1 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:01 2021 +0800

    version1.1

commit 7be1bd88fe8def114c34acc8f51617ce90044a34
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800

    version1.0

版本回退

如果我们不小心 commit 错了代码,想回到以前的版本怎么办?

如果你观察仔细的话,会发现我们之前每次 commit 都会出现 (HEAD -> main)。这个 main 是我们的默认分支,而HEAD就指向我们的最新版本!因此,要想回退,只要改变HEAD的指向就行了。

83442@Chenyang MINGW64 /e/code (main)
$ git reset --hard HEAD^
HEAD is now at 7be1bd8 version1.0

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!

可以看到,code.txt 回到了第一次 commit 时的样子。

上面的指令中,HEAD^是什么意思呢?我们用HEAD^表示当前版本的上个版本,用HEAD^^表示当前版本的上上个版本,……以此类推。

【工具】git 入门_第4张图片

当然我们也可以使用HEAD~1表示当前版本的上个版本,用HEAD~2表示当前版本的上个版本,……以此类推。

现在,产品经理打了个电话给我,又想要version1.1了怎么办?git log看看:

83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 7be1bd88fe8def114c34acc8f51617ce90044a34 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800

    version1.0

发现只剩下version1.0了!!!呜呜呜,回不去了~~~

真的吗?我不信。

​ ——鲁豫

假的。

git 要是这都干不了,趁早卸载得了。

但是,HEAD指针就跟我的成绩一样,只退不进。我们得想点别的法子。git reflog查看操作记录:

83442@Chenyang MINGW64 /e/code (main)
$ git reflog
7be1bd8 (HEAD -> main) HEAD@{0}: reset: moving to HEAD^
5090356 HEAD@{1}: commit: version1.1
7be1bd8 (HEAD -> main) HEAD@{2}: commit (initial): version1.0

妙啊!我们看到了每次操作都有一串代号(也就是代码中的7be1bd850903567be1bd8),我们把刚刚的操作撤回不就好了嘛!

83442@Chenyang MINGW64 /e/code (main)
$ git reset --hard 5090356
HEAD is now at 5090356 version1.1

可以看到,我们又回到了版本 version1.1 。

工作区和缓存区

再看一遍我们创建版本 version1.1 时的代码:

$ git add code.txt
$ git commit -m "version1.1"

发现了吗,在 commit 之前,我们还有 add 操作。这是干什么的呢?请看下图

【工具】git 入门_第5张图片

一图胜千言。

​ ——不著名计算机科学家chenyang

这张图应当说是一目了然了。在 commit 之前,我们要把需要 commit 的文件塞到缓冲区,告诉 git:“你给我 commit 这些文件!”不然,要是我们不小心把学习资料放在文件夹里,git 岂不是也一并帮我们 commit 上去了?

我们用实例来验证一下这个机制。编辑code.txt

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!

不经过add,直接提交

83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.2"
On branch main
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   code.txt

Untracked files:
  (use "git add ..." to include in what will be committed)

no changes added to commit (use "git add" and/or "git commit -a")

83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 50903560253d0f177d8433dcd4a766c1731e9ab1 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:01 2021 +0800

    version1.1

commit 7be1bd88fe8def114c34acc8f51617ce90044a34
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800

    version1.0

果然,没有成功提交。

修改管理

现在我们把 code.txt add 进去:

83442@Chenyang MINGW64 /e/code (main)
$ git add code.txt

这时候,你的女朋友说:“我今天才学会了vim(而你却不会),我来给你展示一下!”说罢,便修改了你的 code.txt:

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
cai guai!

哎呀!谁动了我的代码!

幸好,原来的代码已经存在缓存区了,我们使用checkout命令把缓存区的代码调进工作区:

83442@Chenyang MINGW64 /e/code (main)
$ git checkout -- code.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!

你长呼了一口气。这时候,产品经理突然来电话了:“不要 commit!不要 commit!把它从缓存区拿出去!”

???血压飙升!

都杀好了,让我不要做成菜,再把它还原成?

抱歉,git 还就真可以。

使用git status查看缓存区:

83442@Chenyang MINGW64 /e/code (main)
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged ..." to unstage)
        modified:   code.txt

Untracked files:
  (use "git add ..." to include in what will be committed)

看到 code.txt 已经在里面了。

使用git reset HEAD撤掉缓存区里面的内容

83442@Chenyang MINGW64 /e/code (main)
$ git reset HEAD code.txt
Unstaged changes after reset:
M       code.txt

83442@Chenyang MINGW64 /e/code (main)
$ git status
On branch main
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   code.txt

Untracked files:
  (use "git add ..." to include in what will be committed)

no changes added to commit (use "git add" and/or "git commit -a")

受写作文本的编辑器所限,在文章中看不出来一个变化:modified: code.txt从绿色变为了红色。我们成功撤掉了缓存区里面的内容。

文件比较

如果我想知道这次提交和上次相比有哪些改动,怎么办?

使用diff命令:

83442@Chenyang MINGW64 /e/code (main)
$ git diff HEAD -- code.txt
diff --git a/code.txt b/code.txt
index cb42fce..52c8da4 100644
--- a/code.txt
+++ b/code.txt
@@ -1,2 +1,3 @@
 Hello, world!
 AMD, YES!
+chenyang is so shuai!

我们解读一下结果:---这里代指HEAD,+++这里代指工作区。能够看到,工作区比HEAD多了一行。

我们还可以比较提交的两个版本:

83442@Chenyang MINGW64 /e/code (main)
$ git diff HEAD HEAD^ -- code.txt
diff --git a/code.txt b/code.txt
index cb42fce..af5626b 100644
--- a/code.txt
+++ b/code.txt
@@ -1,2 +1 @@
 Hello, world!
-AMD, YES!

文件删除

我们首先 commit 一个 code2.txt 上去:

83442@Chenyang MINGW64 /e/code (main)
$ touch code2.txt

83442@Chenyang MINGW64 /e/code (main)
$ vi code2.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code2.txt
F**k!

83442@Chenyang MINGW64 /e/code (main)
$ add code2.txt
bash: add: command not found

83442@Chenyang MINGW64 /e/code (main)
$ git add code2.txt
warning: LF will be replaced by CRLF in code2.txt.
The file will have its original line endings in your working directory

83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.2"
[main 2157ebb] version1.2
 1 file changed, 1 insertion(+)
 create mode 100644 code2.txt

然后删除工作区的 code2.txt(删库跑路ing

83442@Chenyang MINGW64 /e/code (main)
$ rm code2.txt

再查看status

83442@Chenyang MINGW64 /e/code (main)
$ git status
On branch main
Changes not staged for commit:
  (use "git add/rm ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        deleted:    code2.txt

Untracked files:
  (use "git add ..." to include in what will be committed)

no changes added to commit (use "git add" and/or "git commit -a")

我们智慧的 git 已经发现 code2.txt 被删除了!

如果你是公司老板,那必然会赶紧补救:

83442@Chenyang MINGW64 /e/code (main)
$ git checkout -- code2.txt

83442@Chenyang MINGW64 /e/code (main)
$ ls
code.txt                                               code2.txt

而如果你想删库跑路,必然坏事做绝,把它彻底删除

83442@Chenyang MINGW64 /e/code (main)
$ git rm code2.txt
rm 'code2.txt'

83442@Chenyang MINGW64 /e/code (main)
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged ..." to unstage)
        deleted:    code2.txt

Untracked files:
  (use "git add ..." to include in what will be committed)


83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.3"
[main bac3110] version1.3
 1 file changed, 1 deletion(-)
 delete mode 100644 code2.txt
 
83442@Chenyang MINGW64 /e/code (main)
$ git log --pretty=oneline
bac311061c0f58187c0eefddda3af1eb7dc6793b (HEAD -> main) version1.3
2157ebbc4d9b83edf128f0bf2cf7d7f79c5c7234 version1.2
50903560253d0f177d8433dcd4a766c1731e9ab1 version1.1
7be1bd88fe8def114c34acc8f51617ce90044a34 version1.0

药药切克闹,我开个玩笑。
删库跑不掉,必然要坐牢。

分支管理

为什么要分支?比如你要开发一个同时兼容 Windows 和 Linux 的系统,我们一拨人写 Linux,另一拨人写 Windows,最后再合并:

【工具】git 入门_第6张图片

这里面有个问题:如何让写 Linux 的和写 Windows 的互不干扰?最后又如何把两个工程合并起来?

分支创建与合并

这是我们在上一章节中提交的 commit

【工具】git 入门_第7张图片

容易发现,所有的 commit 都在 main 分支上,连成了一条线。

我们可以通过git branch查看目前的分支

83442@Chenyang MINGW64 /e/code (main)
$ git branch
* main

如果我们创建一个新分支dev

83442@Chenyang MINGW64 /e/code (main)
$ git checkout -b dev
Switched to a new branch 'dev'

83442@Chenyang MINGW64 /e/code (dev)
$ git branch
* dev
  main

此时,分支变成了下图所示

【工具】git 入门_第8张图片

可以看到,HEAD 指针移动到了 dev 上。

我们尝试着向 dev 上 commit

83442@Chenyang MINGW64 /e/code (dev)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (dev)
$ git add code.txt

83442@Chenyang MINGW64 /e/code (dev)
$ git commit -m "version2.0"
[dev 5529510] version2.0
 1 file changed, 1 insertion(+)

83442@Chenyang MINGW64 /e/code (dev)
$ git log --pretty=oneline
55295104dbba9a21b8ed6f7a7f1fe5842798ccfd (HEAD -> dev) version2.0
bac311061c0f58187c0eefddda3af1eb7dc6793b (main) version1.3
2157ebbc4d9b83edf128f0bf2cf7d7f79c5c7234 version1.2
50903560253d0f177d8433dcd4a766c1731e9ab1 version1.1
7be1bd88fe8def114c34acc8f51617ce90044a34 version1.0

这时候分支变化了

【工具】git 入门_第9张图片

差不多得了
​ ——抗吧

差不多得了。

我们想要把 main 并到 dev 上。

首先切换回 main 分支

83442@Chenyang MINGW64 /e/code (dev)
$ git checkout main
Switched to branch 'main'

83442@Chenyang MINGW64 /e/code (main)
$ git branch
  dev
* main

我们看看刚刚的 code.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!

哎呀!刚刚添加的一行没了!——这是因为,刚刚添加的内容在 dev 分支上,而我们现在在 main 分支。

【工具】git 入门_第10张图片

现在我们将两者合并

83442@Chenyang MINGW64 /e/code (main)
$ git merge dev
Updating bac3110..5529510
Fast-forward
 code.txt | 1 +
 1 file changed, 1 insertion(+)

83442@Chenyang MINGW64 /e/code (main)
$ git log --pretty=oneline
55295104dbba9a21b8ed6f7a7f1fe5842798ccfd (HEAD -> main, dev) version2.0
bac311061c0f58187c0eefddda3af1eb7dc6793b version1.3
2157ebbc4d9b83edf128f0bf2cf7d7f79c5c7234 version1.2
50903560253d0f177d8433dcd4a766c1731e9ab1 version1.1
7be1bd88fe8def114c34acc8f51617ce90044a34 version1.0

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!

可以看到,main 和 dev 在一起了

【工具】git 入门_第11张图片

然后放心大胆地删除 dev(渣男行为:用完就扔)

83442@Chenyang MINGW64 /e/code (main)
$ git branch -d dev
Deleted branch dev (was 5529510).

83442@Chenyang MINGW64 /e/code (main)
$ git branch
* main
【工具】git 入门_第12张图片

分支冲突

让我们构造一个分支冲突的情况。

创建 dev 分支,并 commit

83442@Chenyang MINGW64 /e/code (main)
$ git checkout -b dev
Switched to a new branch 'dev'

83442@Chenyang MINGW64 /e/code (dev)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (dev)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
lou shang shuo de dui!

83442@Chenyang MINGW64 /e/code (dev)
$ git add code.txt

83442@Chenyang MINGW64 /e/code (dev)
$ git commit -m "version2.1.0"
[dev 9d381a1] version2.1.0
 1 file changed, 1 insertion(+)

切换回 main 分支,commit 一个不一样的内容

83442@Chenyang MINGW64 /e/code (dev)
$ git checkout main
Switched to branch 'main'

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
great!

83442@Chenyang MINGW64 /e/code (main)
$ git add code.txt

83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version2.1.1"
[main 51ff862] version2.1.1
 1 file changed, 1 insertion(+)

这时,我们的分支状况变成了

【工具】git 入门_第13张图片

这时候来问题了,怎么合并?

本着瞎折腾的宗旨,我们试着合并一下

83442@Chenyang MINGW64 /e/code (main)
$ git merge dev
Auto-merging code.txt
CONFLICT (content): Merge conflict in code.txt
Automatic merge failed; fix conflicts and then commit the result.

哎呀,合并失败了!

此时我们有两种选择:

  • 合并(merge)
  • 变基(rebase)

我们先看合并。查看两个分支上文件的不同

83442@Chenyang MINGW64 /e/code (main|MERGING)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
<<<<<<< HEAD
great!
=======
lou shang shuo de dui!
>>>>>>> dev

根据需要修改文件并 commit

83442@Chenyang MINGW64 /e/code (main|MERGING)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (main|MERGING)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
great!
lou shang shuo de dui!

83442@Chenyang MINGW64 /e/code (main|MERGING)
$ git add code.txt

83442@Chenyang MINGW64 /e/code (main|MERGING)
$ git commit -m "version2.2"
[main 6b8b715] version2.2

83442@Chenyang MINGW64 /e/code (main)
$ git log --graph --pretty=oneline
*   6b8b71527dc70717a7eccd12161199a2dff3b332 (HEAD -> main) version2.2
|\
| * 9d381a1a6e6911080dab656e788ec8e1236d7cb2 (dev) version2.1.0
* | 51ff86201bf8843109a9598ede17d1eaca770291 version2.1.1
|/
* 55295104dbba9a21b8ed6f7a7f1fe5842798ccfd version2.0
* bac311061c0f58187c0eefddda3af1eb7dc6793b version1.3
* 2157ebbc4d9b83edf128f0bf2cf7d7f79c5c7234 version1.2
* 50903560253d0f177d8433dcd4a766c1731e9ab1 version1.1
* 7be1bd88fe8def114c34acc8f51617ce90044a34 version1.0

可以看到,分支变成了

【工具】git 入门_第14张图片

修改完成后,我们不再需要 dev,把它删除

83442@Chenyang MINGW64 /e/code (main)
$ git branch -d dev
Deleted branch dev (was 9d381a1).

83442@Chenyang MINGW64 /e/code (main)
$ git branch
* main

分支变为

【工具】git 入门_第15张图片

下面再说变基。回到我们先前构造的分支冲突,然后变基。这里,我们是将 mian 变基到 dev 上

83442@Chenyang MINGW64 /e/code (main)
$ git rebase dev
error: could not apply 81df12a... version2.1.1
Resolve all conflicts manually, mark them as resolved with
"git add/rm ", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort"
.
Could not apply 81df12a... version2.1.1
Auto-merging code.txt
CONFLICT (content): Merge conflict in code.txt

83442@Chenyang MINGW64 /e/code (main|REBASE 1/1)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
<<<<<<< HEAD
great!
=======
lou shang shuo de dui!
>>>>>>> dev

83442@Chenyang MINGW64 /e/code (main|REBASE 1/1)
$ vi code.txt

83442@Chenyang MINGW64 /e/code (main|REBASE 1/1)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
great!
lou shang shuo de dui!

83442@Chenyang MINGW64 /e/code (main|REBASE 1/1)
$ git add code.txt

83442@Chenyang MINGW64 /e/code (main|REBASE 1/1)
$ git commit -m "version2.2"
[detached HEAD 0fd3a40] version2.2
 1 file changed, 1 insertion(+)

变为如下分支

【工具】git 入门_第16张图片

分支管理策略2

再回头看一看我们分支合并时的情景

$ git merge dev
Updating bac3110..5529510
Fast-forward
 code.txt | 1 +
 1 file changed, 1 insertion(+)

也许你想问,这个 Fast-forward 是什么意思?

上面我们合并两个有冲突的分支,必然要解决这个冲突。fast-forward 便提供了一个能拿诺贝尔和平奖的和平解决方法:两个分支都给你,你选择要哪一个。

如果和同事闹矛盾了,合并时看都不看,他的修改我一个也不采纳!那我们也可以强制禁用 fast-forward 模式,禁用的参数是 --no-ff。下面演示一下:假设当前 main 和 dev 不相同

$ git merge --no-ff -m "" dev

上面的 -m 参数表示新建一个 commit。

不过,在操作完成后,你同事的提交依然还在,小心他直接回退,把你的提交给干掉!

bug分支

GitHub 应用 git

账号创建与绑定

注册 GitHub 账号,并新建 repository,创建.gitignore文件

如果你这都不会,建议重开

【工具】git 入门_第17张图片

回到我们刚刚编辑代码的目录下,新建/修改.gitignore文件为

[filter "lfs"]
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
[user]
	name = [Github用户名]
	email = [Github邮箱]

请将上面的[Github用户名][Github邮箱]替换为你自己的用户名和邮箱。

右键 Git Bash Here,我们需要获取 SSH Key

83442@Chenyang MINGW64 /e/code (main)
$ ssh-keygen -t rsa -C "**@**.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/83442/.ssh/id_rsa):
/c/Users/83442/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/83442/.ssh/id_rsa
Your public key has been saved in /c/Users/83442/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:i8DZS7z8urty9bJ/tQH5OqXGduDFny36OiwPwn***** **@**.com
The key's randomart image is:
+---[RSA 3072]----+
|              .. |
|             .  E|
|            ..   |
|   . +   o .o    |
|    + + S o  +   |
|     ******** B  |
|      ****** B +o|
|    . ....o.% +.o|
|     o==o+.*+B.. |
+----[SHA256]-----+

83442@Chenyang MINGW64 /e/code (main)
$ cd ~/.ssh

83442@Chenyang MINGW64 ~/.ssh
$ ls
id_rsa  id_rsa.pub  known_hosts

83442@Chenyang MINGW64 ~/.ssh
$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCsT/hRIihxZDbNbsAO5HXDXft4NFfthD01WrE6rsha+xb1wvBzdYZIxytwQ6kOZfeoXG5JTq9d9iWIBpIf4Dts8qeGJt12DNU+Oz20TJ1khlh093srDTUKExr/hQi7mAU5ENA6TsA9nDe5dJBs25ScBSnYMWCxR9C3ZLTG5id0nok+YF4RkOHChcbbzYv2KOomuLztGR44RBgmZLzdULLzzFVJ2UqHpyZ46XEZRgj5N*****/a7+*****/qYkrdQbmWxC01NJGoreY2XECbp1ckpSN6Q02ZRIh0Z9osEpe4KsL5hMSG2NDi0mNCAFUh1GbEEjWvrmt9gNePkfV83+OBch4LNtF3KQPRBldptyu1prSehJ3j/*****pwMVJTSi9Lv4bf614wpmNCPS2lq9PGnBTTY1D2n4iheEekpfsmVPy/qEi262xRc7qmvd6lDqqfg6IHN5Ae*****/Y/C3cdoFEflfuJZ/QhcUrzecAkpD8nIwQ6zEwJ57OJCou6LM= **@**.com

以上内容的隐私部分已经过处理。

文件夹~/.ssh中有两个文件,其中id_rsa为私钥,id_rsa.pub为公钥。我们需要复制公钥。

现在回到 GitHub,点击头像,选择settings

【工具】git 入门_第18张图片

然后创建一个 SSH Key

【工具】git 入门_第19张图片

这里的 Title 可以选取你自己想要的名字。然后点击 Add SSH Key 即可完成创建。

代码克隆与上传

天下代码一大抄。
​ ——不知道谁说的,有可能我自己说的

以往我们下载代码会使用 Download ZIP,但现在我们有了 git,就应当用一些逼格更高的方法。点击 clone,选择 SSH,复制链接

然后在本地git clone

83442@Chenyang MINGW64 /e/code (main)
$ git clone [email protected]:**/**.github.io.git
Cloning into '**'...
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

哎呀,克隆失败!

因此我们需要配置一下 git。查看你的端口,比如我的是7890。然后输入命令

83442@Chenyang MINGW64 /e/code (main)
$ git config --global http.proxy 'http://127.0.0.1:7890'

83442@Chenyang MINGW64 /e/code (main)
$ git config --global https.proxy 'https://127.0.0.1:7890'

这里还需要注意一下,由于我们使用了代理,所以只能从 http/https 上 clone 项目(无奈.jpg)

所以我们还是得 clone https 地址:

83442@Chenyang MINGW64 /e/code (main)
$ git clone https://github.com/**/**.github.io.git
Cloning into '**.github.io'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.

成功了!


  1. 维基百科https://zh.wikipedia.org/wiki/Git ↩︎

  2. 参考自 https://www.cnblogs.com/charlesblc/p/6132384.html ↩︎

你可能感兴趣的:(教程,开发工具,开发工具,git,github)