Things about Git

0x00 碎碎念

想写一个Revised version KISS manual of Git.
主要是, 最近拱拱大学开了门叫做[开源硬件开发与应用]的课程, 然后好多人对Git不熟.
基于拱拱的个人经验, 写了一篇Git Related, 但是那个是极其随意写的.
在知识范围内, 这篇会稍微详细一些.

说在前头, 拱拱推荐Linux的另一个原因是, 中文化. See why

0x01 Installing Git

On Windows

从Git-scm下载Git套件, 安装.
Windows 10 Insider Build可以在Powershell下使用winget下载: winget install Git.Git.(好像是这个, 不保证准确性)

On Windows Subsystem Linux

Windows Subsystem Linux or WSL是Windows10的一个特性, 可以在Windows上原生使用Linux于终端执行Linux二进制文件. Linux的一个优点是环境配置极其方便, 拱拱推荐这种方式.
启用和删除Windows功能上把适用于Windows的Linux子系统勾选上, 重启电脑后去Windows store搜索下载Ubuntu(推荐)即可使用. WSL配置过程参考此链接 https://docs.microsoft.com/zh-cn/windows/wsl/ .

有Linux环境就好说了, Ubuntu自带OpenSSH套件和Git. 即使如此仍然推荐下载Windows的Git-scm套件.
对于Ubuntu, 中文支持需要language-pack-zh-hans这个包, 包括Git的主要输出都会中文化. 安装sudo apt update; sudo apt install language-pack-zh-hans.
需要访问本地Windows的文件的话, 他们一般在/mnt/盘符处.

Linux

都用上Linux了拱拱觉得也不需要说啥了, 一般发行版都有Git套件的.
不过总有人用最小发行版, 这时候可以使用对应发行版的包管理器安装. 拱拱就不信有发行版仓库没有Git

macOS

你需要苹果的XCode命令行套件, 具体去哪找拱拱也不清楚.

0x02 OpenSSH 相关配置

Windows 10 自带OpenSSH套件.
要用到的主要命令是ssh-keygen.
一般直接就这么输入进命令行就行了. 可以不用带任何参数.

跑完后你会得到一个 私钥文件 id_rsa / 公钥文件 id_rsa.pub, 位于~/.ssh/
在Windows下~ = C:\Users\你用户名\
在Linux下~ = /home/你用户名 (如果是root账户的话就是/root/)

Github相关

Github 在处理用户鉴权时, 使用SSH公钥或HTTPS认证.
也就意味着你的远端可以是 git@github.com/后略[ssh] 或者 https://github.com/后略[https]

使用SSH公钥时, 前往 https://github.com/settings/keys 将得到的id_rsa.pub内容复制粘帖到New SSH key中.
使用HTTPS认证时, 一般不需要做什么, 但就是在处理私有仓库(Private Repo)或者Push时会有一个交互, 让你填写用户名和密码. 拱拱本人不推荐这个方式.

0x03 Git 基本配置和食用方法

对于Completely Beginner, Git相关知识无非就这些

初始化工作区:

  • 复制别人的: git clone
  • 从头开始: git init

在工作区上工作:

  • 一般暂存: git add
  • 其他: git mv / git restore / git rm

提交更改:

  • 一般情况: git commit
  • 出冲突了: git merge

和远端同步:

  • 同步远端元数据: git fetch
  • 一推一拉: git push/git pull

以及修改配置:

  • git config

初次运行前要做的配置

主要使用git config命令.

在Commit前需要设置邮箱和名字:
git config --global user.name "你名字, 可以是中文"
git config --global user.email "你邮箱"

Git的默认文本编辑器是vi/vim. 如果vim使不来的话, 可以更换默认文本编辑器
git config --global core.editor "中略"
参考Github的这篇中文化文档以获得关于如何配置的资讯.
私货: 这里推荐VSCode[GUI/图形界面] 和nano[CLI/命令行界面]

初始化工作区

这里主要使用git initgit clone两个命令.

Git-clone用于当远端已有一个仓库时, 将远端仓库原样拉取下来. 适合在加入他人工作时, 要从Github上拉源码编译软件时使用.
这会在当前工作目录(如果没有参数的话)创建一个和远端仓库同名的文件夹. 如果已有同名文件夹, 则要求该文件夹为空, 否则将克隆失败.
食用方法: git clone <remote-url>

Git-init适合用于没有远端时, 将本地已有的文件夹转换为Git版本控制仓库.
如要配置一个Git服务器, 也可以使用git init --bare创建空仓库.
在创建仓库后不要忘记添加远端哦.

在工作区作出更改

基本操作是git add, 用于暂存文件 和 git commit, 用于提交修改.
此外还有git rm, 用于删除文件 和 git restore, 用于丢弃工作区改动 以及 git mv, 用于移动文件
检查当前仓库状态git status

基本食用方法: (没写到的建议自己查文档, 毕竟真的没怎么用过)

  • git add 你要的文件: 可以直接git add .或者git add *将所有已经于保存的更改暂存, 但是容易导致奇怪的问题所以在这么做前先确认下.
  • git rm 要删除的文件: 可以先删除文件后rm(删了但之后再记入暂存), 也可以直接git rm(就直接删了记入暂存一步到位). git rm *一键删库跑路
  • git commit -m "提交信息", 可以不带-m但这会导致你在提交时到一个文本编辑器界面. 如果忘记配置默认文本编辑器的话, 他默认文本编辑器是vi, 一键进入地狱难度.
    携带--allow-empty-message参数可以允许一个信息为空的提交. 但是不推荐, 极有可能会被其他同行追着打, 实在没东西写了再用.
    如果提交后发现了啥失误, 比如多暂存了, 或者信息填错了, 不用担心. 你可以接着进行更改, 然后在提交时带上--amend参数. 这样上一个提交就会被这一个提交替代.

此外, 可以在仓库根目录下放个.gitignore文件, 这样Git处理的时候就会直接忽略他们. 你不会希望你密码/API密钥出现在公开的记录里的.

配置远端

和远端相关的是Git-remote模块.

Git是分布式版本管理软件, 意味着远端可以不止一个.
如果你的仓库是从Github克隆下来并且只使用Github的话, 请跳过本节. 但在远端不止一个, 或者没有远端需要配置远端相关信息的时候, 你会用到Git-remote模块的.

通过执行git remote --verbose, 你应该会看到类似与如下的输出:

origin  git@github.com:camberloid/camber.moe (fetch)
origin  git@github.com:camberloid/camber.moe (push)

需要添加远端时, 使用git remote add [远端别名] [URL].
如果不小心写错了, 或者远端地址发生更改, 使用git remote set-url [远端别名] [新URL]来更改.

常用的操作就这些, 更多操作建议查文档. 在操作后记得git fetch --all验证远端是否可用.
当然, 如果远端咕咕了, 想删掉的话, 请使用git remote delete [远端别名]

与远端同步

一推(push)一拉(pull), 组成了Git的远端同步部分.

git push用于向远端推送你已经提交(commit)的更改. 请注意只能在自己已经没有任何更改可以拉取, 并且本地最新更改不晚于远端最新提交的更改(窝觉得用最新不妥)的情况下推送.
git pull用于从远端拉取最新的更改.如果出现了文件冲突, 可以参考Git merge相关文档. 拱拱没用过所以就不说了.

从Git 2.26还是27开始, 执行git pull时有如下提示:

warning: 不建议在没有为偏离分支指定合并策略时执行 pull 操作。 您可以在执行下一次  
pull 操作之前执行下面一条命令来抑制本消息:

git config pull.rebase false  # 合并(缺省策略) 
git config pull.rebase true   # 变基  
git config pull.ff only       # 仅快进  

您可以将 "git config" 替换为 "git config --global" 以便为所有仓库设置  
缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、--no-rebase,  
或者 --ff-only 参数覆盖缺省设置。

窝也没有去了解那么多. 如有需要可以阅读相关文档.

合并冲突

其实不会/用不熟.
这里放个Ref: 分支的新建与合并

0x04 Bash

其实我完全忘了Git-scm的Windows套件有Bash.
但也不懂怎么教, 故Pass.

0xFD VSCode 相关

VSCode有一个源代码管理部分. 可以基本替代Git CLI使用.
他张这个样子:
image

可以简单地: 填写消息, 暂存/撤销更改, 提交更改, 拉取和推送等. 是的拱拱就是在安利呢.

0xFE vim相关

声明: 拱拱使不来.

最基本的操作是

  • i: 进入编辑模式, 按下Esc退出
  • :wq: 保存后退出
  • :q: 一般退出
  • :q!: 不保存退出/强制退出

0xFF GPG相关

GPG的作用是证明 你是你自己. 哲学的基本问题.
对于Git, GPG可以对你提交的更改生成一个签名, 以证明这是你提交的. 有的人就是比较Care这件事.

如果你没有PGP密钥对, 使用gpg --full-generate-key跟着提示走创建一组.
如果使用Github, 使用gpg --armor --export导出公钥后前往Github的GPG设置页面在添加PGP公钥原样粘贴上去.
然后gpg --list-keyspub下面那行记下(复制), 在git-config中加上 user.signingkey "刚才复制的那行", commit.gpgsign=true. 就好了.

如果需要验证的话, 提交个更改, 推送到Github, 在你仓库网页中的commit一栏出现这么些东西, 你就成功了.

Reference

[1] https://help.github.com/cn/github 来自Github的中文文档.
[2] https://git-scm.com/book/zh/v2 来自Git-scm的中文教程. 他们的Reference是英文的.

拱拱 / Camber / Billy Huang
点子开始于20200614, 完成于20200616, 发布于20200617.

除非另有说明皆以CC BY-SA 4.0发布
本文链接:https://logistics.camber.moe/2020/GitRevised/