Git入门指南:本地文件的版本控制演示及远程仓库链接

导言:
在软件开发和团队协作中,版本控制系统是不可或缺的工具。Git作为最流行的分布式版本控制系统之一,提供了强大的功能和灵活的使用方式。本文将以我自己的文件路径为例,介绍如何通过Git进行版本控制和管理。

准备Git

下载地址

https://git-scm.com/

配置Git

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安
装成功!

打开命令窗口之后要设置一下姓名与邮箱地址

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ git config --global --get user.name #得到user.name的值
$ git config --global -l #列表参数

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许
会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其
次,真的有冒充的也是有办法可查的。
注意 git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用
这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。这里我就不再过多阐述

本地文件的版本控制

1.创建版本库

  1. 打开git窗口。

2.导航到你要创建版本库的目录。例如,使用 cd 命令切换到该目录:

cd E:\learngit

3.初始化一个新的 Git 版本库:

git init

现在,你的目录中就创建了一个空的 Git 版本库。

  • 如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。通过 git init 命令把这个目录变成Git可以管理的仓库:
    瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现
    当前目录下多了一个 .git 的目录(隐藏目录),这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目
    录里面的文件,不然改乱了,就把Git仓库给破坏了。
    如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用 ls -ah 命令就可以看见。
  • 首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网
    页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个
    单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制
    系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改
    成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
  • 不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动
    的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
    因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问
    题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
    使用Windows的童鞋要特别注意:千万不要使用Windows自带的记事本编辑任何文本文件。原因是
    Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每
    个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题
    ,比如,网页第一行可
    能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议
    你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8
    without BOM即可:

2. 添加文件到版本库

1.现在我们编写一个readme.txt文件,内容如下:

Git is a version control system.
Git is free software.

ps:注意这个文件要放到刚刚版本库所在的目录,如果放到别处Git便找不到了

2.将文件添加到仓库(暂存区):执行以下命令将文件添加到Git仓库中:

$ git add readme.txt
  • 这一步相当于将文件纳入Git的跟踪范围。

3.提交文件变更(由暂存区提交给分支)

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
$ git log
commit 6e4de12122b22ee3145dfa87af974d284f832dd2 (HEAD -> master)
Author: 799 <qwe799@163.com>
Date: Tue Jul 11 09:57:08 2023 +0800
wrote a readme file
  • 这一步相当于保存了文件的当前状态,并生成了一个对应的提交记录。而且commit命令可以一次提交很多文件

4.查看提交历史:使用以下命令可以查看所有的提交历史记录:

git log
  • 这个命令将显示每个提交的作者、日期、提交信息等信息,方便你追踪文件的变更历史。
    5.使用git status查看git状态
git status

在这里插入图片描述

3. 版本控制

以readme文件作为演示文件

1.修改readme.txt文件(可以修改为任何东西)

Git is a distributed version control system.
Git is free software.

运行git status命令查看结果

$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
  • git status 命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们, readme.txt被修改过了,但还没有准备提交的修改。也就是现在还没有加到暂存区中
  • 虽然Git告诉我们 readme.txt 被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如
    你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的 readme.txt ,所以,需要用 git diff 这个命令看看:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.

可以看到我们在第一行添加了一个distributed单词
2.提交到仓库(暂存区)

git add readme.txt

再次执行git status 查看当前仓库的状态

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt

git status 告诉我们,将要被提交的修改包括 readme.txt 。
3.提交到分支

$ git commit -m "add distributed"
[master e475afc] add distributed
1 file changed, 1 insertion(+), 1 deletion(-)

提交后,我们再用 git status 命令看看仓库的当前状态:


$ git status
On branch master
nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。

readme演示文件的版本回退

1.再次修改并提交文件readme.txt

Git is a distributed version control system.
Git is free software distributed under the GPL

$ git add readme.txt

$ git commit -m "append GPL"
[master 1094adb] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)

2.查看版本

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:06:15 2018 +0800
append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file

可以看到有三次提交 ,最近的一次是append GPL,上一次是add distributed,最早一次是wrote a readme file

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数:

ps:前面的1094adb…是commit id(版本号)
3.1.版本回退

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

在git中HEAD表示当前版本,也就是最新的提交1094adb… (注意我的提交ID和你的肯定不一样),上一个版本就是 HEAD^ ,上上一个版本就是
HEAD^^ ,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100 。

再次查看readme.txt文件

$ cat readme.txt
Git is a distributed version control system.
Git is free software.

可以看到版本被回退了,也就是文件被还原了
再次查看提交历史

$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file

可以发现最新的那个版本已经没有了
但是如果你版本回退的多了其实也有方法可以返回的
找到对应版本的commit id 放在hard后面可以直接返回。

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

但是commit id 不用一整个全复制下来,也不能只复制前一两位,建议复制5~6位

git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用 HEAD`时,表示最新的
版本。
 
 --soft :仅仅移动本地库 HEAD 指针
 --mixed: 移动本地库 HEAD 指针,重置暂存区
 --hard:移动HEAD指针,重置暂存区,工作区,省略git checkout -- file

再次查看readme文件即可看到文件又来到了前面写的GPL版本

另外Git还有一个命令 git reflog用来记录你的每一次命令
可以通过这个命令来找寻之前的操作

git reflog

远程仓库

可以自己搭建一个远程仓库,不过也可以使用现有的git远程库
,应用比较广泛的有 1.github 2.gitee

1.使用ssh协议:

ssh基于非对称加密的免密登录原理
在这里插入图片描述

2.创建SSH key

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可以直接跳到第三步

打开shell(windows下打开git bash)创建ssh key

$ ssh-keygen -t rsa -C "qwe799@163.com"
#用户宿主目录下.ssh c:\Users\Administrator\.ssh\

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到 .ssh 目录,里面有 id_rsa 和 id_rsa.pub 两个文件,这
两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放心地告诉任
何人。

3:登陆GitHub

打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴 id_rsa.pub 文件的内容:

在这里插入图片描述

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提
交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

4. HTTS协议

当然不配置公钥也可以使用HTTS协议,在使用HTTPS协议时输入用户名/密码

5. 克隆

使用https协议

git clone https://gitee.com/halo-dev/halo.git
#第一次访问需要输入gitee的用户名密码
halo:开源博客系统,基于spring boot和vue

使用ssh协议

1 git clone git@gitee.com:halo-dev/halo.git

对称加密与非对称加密

非对称加密

非对称加密是一种加密算法,使用了一对密钥,即公钥和私钥。它与对称加密算法不同,对称加密算法使用相同的密钥进行加密和解密。

下面是非对称加密的基本原理和一般流程:

1.密钥生成:首先,生成一对密钥,包括公钥和私钥。公钥可以被分享给其他人,而私钥必须保密。

2.加密过程:

加密方使用接收方的公钥对要发送的数据进行加密。
加密后的数据只能通过配对的私钥进行解密。

3.解密过程:

接收方使用自己的私钥解密收到的数据。
解密后,原始数据将恢复出来。

4.非对称加密算法通常用于以下目的:

1.保护通信安全:非对称加密在网络通信中起着重要作用,例如,HTTPS 使用非对称加密来确保网站和客户端之间的安全通信。
2.数字签名:非对称加密可用于创建和验证数字签名。发送方使用私钥对消息进行签名,接收方使用发送方的公钥来验证签名的真实性。
3.密钥交换:非对称加密可用于安全地交换对称加密算法所需的密钥。发件人使用接收者的公钥加密对称密钥,并将其发送给接收者。接收者使用自己的私钥解密对称密钥。

常见的非对称加密算法包括 RSA、DSA、ECC 等。

请注意,非对称加密算法相比对称加密算法更为计算密集,因此通常在对机密数据进行传输或签名等特定场景使用。对于大规模的数据加密,通常会使用对称加密算法,并使用非对称加密算法来安全地交换对称密钥。

对称加密

对称加密是一种加密方法,加密和解密过程中使用相同的密钥。在对称加密中,发送方使用该密钥对数据进行加密,接收方使用相同的密钥对密文进行解密,以获取原始数据。

以下是对称加密的一般步骤:

1.密钥生成:首先,需要生成一个加密密钥。这个密钥可以是一串随机的比特序列,并且必须保持机密。

2.加密:发送方使用生成的密钥将明文(需要加密的数据)转换为密文(加密后的数据)。加密算法将密钥和明文作为输入,生成密文作为输出。常见的对称加密算法有DES、AES和RC4等。

3.传输:发送方将加密后的密文发送给接收方,可以通过网络、存储介质等方式传输。由于密钥必须保密,所以在传输过程中需要采取措施确保密钥的安全性。

4.解密:接收方使用之前与发送方共享的密钥对密文进行解密,恢复为原始的明文。解密算法将密钥和密文作为输入,生成明文作为输出。

对称加密的优点包括:

  • 处理速度快:对称加密算法通常具有高速且高效的处理能力,适用于大量数据的加密和解密。
  • 实现简单:对称加密算法的实现相对较简单,只需一个密钥进行加密和解密操作。

然而,对称加密也存在一些挑战:

  • 密钥管理:在使用对称加密时,发送方和接收方必须共享相同的密钥,因此需要确保密钥的保密性。
  • 安全性依赖于密钥分发:对称加密的安全性在很大程度上取决于密钥的安全分发,密钥如果被第三方获取,数据的机密性将受到威胁。

总结而言,对称加密是一种简单而高效的加密方法,适用于需要处理大量数据的场景。但是,在需要安全分发密钥和保护密钥安全性的情况下,需要注意对称加密算法的限制。

工作区和暂存区详解

当使用 Git 进行版本控制时,有三个关键概念:工作区、暂存区和版本库(或仓库)。下面是一个简单的图示,说明了它们之间的关系:

    +-------------------+
    |   版本库(仓库)  |
    |  (Repository)    |
    +-------------------+
    |                   |
    |       提交历史     |
    |                   |
    +-------------------+
    |                   |
    |     暂存区        |
    |  (Staging Area)   |
    +-------------------+
    |                   |
    |     工作区        |
    | (Working Directory)|
    |                   |
    +-------------------+
  • 工作区(Working Directory)是您在计算机上查看和编辑文件的目录。它是您当前正在工作的项目的实际文件夹。这些文件通常被认为是未被 Git 跟踪的文件。

  • 暂存区(Staging Area)是位于 Git 仓库中的一个中间位置。当您进行 git add 命令时,将会把更改添加到暂存区。暂存区保存待提交的更改,但尚未被记录在版本库中。

  • 版本库(Repository)是 Git 仓库中的数据库,用于存储整个项目的历史记录和元数据。它包含所有已经提交的更改,以及与这些更改相关的信息,例如作者、日期和提交消息。

Git 的基本工作流程如下:

在工作区 (Working Directory) 中进行文件的编辑和修改。
使用 git add 命令将所做的更改添加到暂存区 (Staging Area)。
使用 git commit 命令将暂存区的更改提交到版本库 (Repository)。
通过这种方式,您可以选择性地将更改添加到暂存区,并在完成一组相关更改后将它们作为一个逻辑单元提交到版本库中。
提交历史是指在 Git 仓库中记录的每次提交操作的信息。它包含了每次提交的作者、时间戳、提交消息等相关信息。提交历史可以用来跟踪项目的演变和更改的详细记录。

在提交历史中,每个提交都有一个唯一的哈希值来标识。这个哈希值就像是一个指纹,用于唯一标识每个提交。通过哈希值,您可以回溯到任意一个提交并查看它的详细信息。

您可以使用 git log 命令来查看提交历史。该命令会列出最近的提交,并按时间顺序进行排序。以下是一个示例:

$ git log
commit abcdefg1234567890 (HEAD -> master)
Author: John Doe <johndoe@example.com>
Date:   Mon Jul 12 11:30:00 2023 +0800

    Add new feature

commit 1234567890abcdefg
Author: Jane Smith <janesmith@example.com>
Date:   Sun Jul 11 15:45:00 2023 +0800

    Fix bug in login functionality

commit 9876543210gfedcba
Author: John Doe <johndoe@example.com>
Date:   Sat Jul 10 09:20:00 2023 +0800

    Initial commit

上面的输出展示了三个提交,每个提交都包含了作者、时间戳和提交消息。最新的提交在最上方,而最早的提交在最下方。

通过查看提交历史,您可以了解每次提交所做的更改、与其他提交的关系以及项目的演化过程。这对于跟踪问题、复查代码以及合并分支等任务非常有用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值