版本管理与安全
代码管理工具Git
简介
- Git 是目前世界上最先进的分布式版本控制系统,用于快速、高效地处理项目版本管理
Git的命令行接口
基础
-
git log --all --graph --decorate
:可视化历史记录(有向无环图) -
git diff
:显示工作目录中当前文件和暂存区文件的差异 -
git diff --staged
:对比已暂存文件和最后一次提交的文件差异 -
git rm --cached <filename>
:将文件从暂存区移除,恢复到未被跟踪的状态
分支与合并
-
git branch <name>
:新建分支 -
git switch <name>
:切换分支 -
git checkout -b <name>
:创建分支并切换到该分支 -
git branch -d <name>
:删除分支 -
git merge <revision>
: 合并到当前分支
撤销
git commit --amend
:重做最后一次提交的信息git reset HEAD <filename>
:取消暂存的文件git checkout -- <filename>
:撤销文件的修改git restore --staged <filename>
:同上,但仅适用于已暂存情况下git restore -- <filename>
远端操作
git push <remote> <local branch>:<remote branch>
:将对象传送至远端并更新远端引用git clone -b <remote branch> <remote>
:克隆远程仓库的其他分支git fetch
:从远端获取对象/索引,可以随时合并或查看git pull
: 相当于git fetch; git merge
git push <remote> --delete <remote branch>
:删除远程分支
高级操作
-
git stash
:跟踪文件的修改与暂存的改动,然后将未完成的修改保存到一个栈上,而你可以在任何时候重新应用这些该东(甚至在不同的分支上) -
git stash pop
:撤销git stash
的操作应用:当你在项目的一部分上已经工作一段时间后,所有的东西都进入了混乱的状态,而这时你想切换到另一个分支做一点别的事情。
-
git blame
:指出文件的每一行的最后的变更的提交以及谁是那一个提交的作者 -
git reset --hard HEAD^
:回退到上一个版本(修改历史) -
git revert HEAD
:撤销上一次提交 -
git reflog
:分析你所有分支的头指针的日志来找出你在重写历史上可能丢失的提交
拾遗
- 由于众所周知的原因,我们可能无法正常访问https://github.com,因此强烈建议使用特殊的方法研究如何访问和正常使用它,如果不方便进行这些操作,也可以使用国内的Gitee(码云)平台进行学习
- 推荐图形化软件Gitkraken
- 更多关于Git,强烈推荐学习Pro Git,以及Learn Git Branching
安全与密码学
对称加密
简介
- 对称密钥算法(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。事实上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通信联系。与公开密钥加密相比,要求双方获取相同的密钥是对称密钥加密的主要缺点之一
使用
- 使用 OpenSSL的AES模式加密一个文件:
openssl aes-256-cbc -salt -in {源文件名} -out {加密文件名}
- 解密:
openssl aes-256-cbc -d -in {加密文件名} -out {解密文件名}
GPG(非对称加密)
简介
- GNU Privacy Guard(GnuPG或GPG)是一个密码学软件,用于加密、签名通信内容及管理非对称密码学的密钥。GnuPG是自由软件,遵循IETF订定的OpenPGP技术标准设计,并与PGP保持兼容
- GnuPG使用用户自行生成的非对称密钥对来加密信息,由此产生的公钥可以同其他用户以各种方式交换,如密钥服务器。他们必须小心交换密钥,以防止得到伪造的密钥。GnuPG还可以向信息添加一个数字签名,这样,收件人可以验证信息完整性和发件人
生成密钥
gpg --full-generate-key
# 密钥长度推荐使用默认的 4096
git config --global user.signingkey [公钥ID]
# 设置Git默认使用的密钥来签署标签与提交
查看密钥
$ gpg --list-keys --keyid-format LONG
/home/kslas/.gnupg/pubring.kbx
------------------------------
pub rsa4096/[公钥ID] 2021-11-02 [SC]
FB6B847AD7B7D69740F7D7CFB919464B891589FB
uid [ 绝对 ] user.name (GPG key) <email@qq.com>
sub rsa4096/[密钥ID] 2021-11-02 [E]
# 主要用于查看密钥的ID
获取公钥值
$ gpg --armor --export 3AA5C34371567BD2
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----
# 以‘-----BEGIN PGP PUBLIC KEY BLOCK-----’开头的部分
Git 提交启用签名
- 签署提交
git commit -a -S -m 'signed commit'
git config --global commit.gpgsign true
# 默认启用GPG签名
- 验证签名
git log --show-signature -1
# 签名只对最近一次的提交生效