Git 是一个“版本控制系统”。它可以追踪对代码库所做的每一个更改,并帮助保持多个开发者对同一代码库版本的同步和更新。 意外地做了一个破坏生产环境的更改?你可以用 Git 进行还原。你和你的同事对同一个文件都做了修改?Git 通常可以自动为你合并它们,或者至少可以明确告知你更改冲突的地方。
GitHub 是一个 Git 服务器。他是一个远程仓库,你可以把 Git 中的代码托管存储在这里。它还提供问题跟踪功能,以及一个不错的前端用于管理以 pull requests 形式提交到代码库的变更。但 GitHub 并不是唯一的 Git 服务器;还有 GitLab、Gitea、BitBucket、Gogs……这些都有自己的优缺点。GitHub 是日常使用中最常见的,但它绝对不是唯一的,你也不应仅仅围绕某一个 Git 服务器来学习 Git。
我为什么需要Git?#
我的博客是使用 Hugo 托管在 GitHub 上面的,当我更新博客的时候,我需要把我本地代码 git push 到 GitHub ,然后Cloudflare Pages会自动帮我编译生成网页
发布流程是这样
- 本地创作: 在电脑上用 Markdown 写文章,运行
hugo server在本地预览排版。 - 打包存档(
git commit): 用 Git 给这次的更新拍个“快照”,记录我今天写了啥。 - 触动机关(
git push): 把代码推送到 GitHub 仓库。 - 自动接力(Cloudflare Pages): Cloudflare 就像一个全天候待命的机器人,它盯着我的 GitHub。一旦发现我 Push 了新代码,它就会自动在云端下载源码、运行 Hugo 编译,然后把新网页发布到公网上。
整个过程中,我不需要手动碰任何 HTML 网页文件,只需要专注于“写字”本身。
Git 基础命令#
git ini在当前文件夹下初始化一个全新的 Git 本地仓库。git clone <远程仓库网址>克隆一个新的远程仓库到本地git status查看当前工作区状态(目录修改、跟踪状态)git add <文件名>或git add .把工作区的修改提交到暂存区(Staging Area)。git commit -m "你的提交信息"把暂存区的内容正式提交到本地仓库(Local Repository)。git push origin <分支名>把本地仓库的提交推送到远程仓库(不同分支可以提交不同代码用于创新实验)。git pull从远程仓库拉取最新的代码并自动合并到本地。(在本地已有 Git 仓库执行)
基础命令之外你需要知道的#
- 如果你不想某个文件或文件夹加加入 Git 仓库,你需要在项目根目录的
.gitignore文件内添加该文件路径,这样 Git 就会略该改目录。 - Git 不喜欢“套娃”。任何使用
git clone下载下来的文件夹内部都自带一个.git文件夹。当文件夹包含.git就意味着该文件我本身就是一个独立的 Git 仓库。Git 只会管理自己的地盘,不会插手其他独立仓库。- 解决办法:使用 Git 子模块,不要用
git clone,改用git submodule add。他会自动创建一个 .gitmodules 文件用于记录主项目中引入的外部子仓库的本地路径和远程仓库地址,从而允许在一个 Git 仓库中嵌套和管理另一个独立的 Git 仓库。
- 解决办法:使用 Git 子模块,不要用