应该学过计算机的人都知道git和github,基本上伴随我们的整个编程生涯。但是博主由于并非科班出身,虽然日常都在用,但是一直对里面的一些概念和操作不是很清楚,每次遇到问题都是百度一下,解决了就忘记了。 所以想通过这篇文章来梳理记录一下git和github的日常使用方法,方便自己查阅,也希望能帮助到有需要的人。
Git和GitHub的概念
- Git 是一个分布式版本控制系统,用于管理代码版本和协作开发。
- GitHub 是一个基于 Git 的代码托管平台,提供了代码托管、版本管理、协作开发等功能。同时增加了界面化的功能,如 Pull Requests、Issues 和 Wiki。
git与github的联合配置
- 安装Git
- 访问 Git 官方网站 下载并安装适合操作系统的版本。
- 验证安装:在命令行输入
git --version
,显示版本号则安装成功。
- 配置Git
- 配置用户名:
git config --global user.name "Your Name"
- 配置邮箱:
git config --global user.email "your_email@example.com"
- 创建 GitHub 账户并设置 SSH 密钥
- 注册 GitHub 账户
- 生成 SSH
密钥:
ssh-keygen -t ed25519 -C "your_email@example.com"
- 将 SSH 密钥添加到 GitHub 账户:将
~/.ssh/id_ed25519.pub
文件中的内容添加到 GitHub 账户的 SSH keys 中。 - 验证GitHub连接:
ssh -T git@github.com
如果你是在docker容器中连接github,为了避免SSH 密钥的泄漏风险应该使用宿主机已有的 SSH 密钥 注意.ssh目录中的权限不能修改,如果出现权限太过开放,则需要修改.ssh目录的权限chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub
- Git 与 GitHub 的连接
- 在 GitHub 上创建仓库,获取仓库地址(https或ssh地址)
- 在项目的本地目录中初始化仓库:
git init
- 添加远程仓库地址:
git remote add origin <仓库地址> # 添加远程仓库
- 基本命令:
### submodule 在 Git 中,子模块(submodule) 是一个 Git 仓库嵌套在另一个 Git 仓库中的工具。将另一个仓库的特定分支作为子模块加入当前仓库的流程如下:git add . # 添加所有文件到暂存区 git commit -m "提交信息" # 提交到本地仓库 git push origin main # 推送到远程仓库
- 在主仓库中添加子模块:
git submodule add -b <分支名> <目标仓库地址> <子模块路径>
- -b <分支名>: 指定目标仓库的分支。
- <目标仓库地址>: 如:https://github.com/example/target-repo.git submodules/target-repo
- <子模块路径>:子模块在当前仓库中的存储路径, 如submodules/target-repo
- 初始化并更新子模块:
git submodule update --init --recursive
- 提交更改,添加子模块后,需要提交子模块的元信息到主仓库:
git add .gitmodules submodules/target-repo git commit -m "Add submodule target-repo"
- 如果目标仓库的指定分支发生更改,你可以更新子模块到最新状态:
git submodule update --remote
- 如果你是克隆一个包含子模块的仓库,可以使用
git clone --recurse-submodules <仓库地址>
选项来自动初始化和更新子模块。或者在正常克隆后执行git submodule update --init --recursive
。 - 子模块也可以切换分支,需要进入子模块目录,执行:
git checkout <自模块的分支名>
典型工作流程
- 克隆仓库:
git clone <仓库地址>
- 同步更新:
git pull origin main
- 分支管理:
- 创建分支:
git branch <分支名>
- 切换分支:
git checkout <分支名>
- 合并分支:
git merge <分支名>
# 要先切换到主分支 - 删除分支:
git branch -d <分支名>
- 创建分支:
- 提交更改:
git add . git commit -m "提交信息" git push origin main
GitHub高级功能
fork
在 GitHub 上,如果你直接clone了一个别人的仓库,会没有原仓库的写入权限(例如为他人开源项目贡献代码)。即使有权限,但团队页也可能有明确要求或想避免在原仓库中直接创建分支。 所以fork就是为了解决这个问题的,fork的作用是在你的仓库中创建一个原仓库的副本,你可以在这个副本上自由修改,然后通过pull request向原仓库提交修改。 1. 在 GitHub 上点击仓库页面右上角的 Fork 按钮,创建一个你的副本仓库。 2. 将 Fork 的仓库克隆到本地:
git clone <你的 Fork 仓库地址>
3. 创建新分支: git checkout -b feature-branch # -b 表示创建并切换到新分支
4. 提交更改: git add .
git commit -m "添加新功能"
git push origin feature-branch
5. 在 GitHub
上进入你的 Fork 仓库,点击 “New Pull
Request”,选择将你的分支合并到原仓库的主分支(如 main)。
Fork 的仓库能否跟踪原仓库的更改? Fork 仓库可以跟踪原仓库的更改,但需要手动同步更新。 1. 添加原仓库的远程地址:
git remote add upstream <原仓库地址>
2. 验证是否添加成功:git remote -v
输出类似:
origin <你的 Fork 仓库地址> (fetch)
upstream <原仓库地址> (fetch)
3. 同步原仓库的更新: - 从 upstream 拉取最新代码:
git fetch upstream
- 合并原仓库的主分支代码到你的主分支: git checkout main
git merge upstream/main
-
推送更新到你的 Fork 仓库: git push origin main
如果 Fork
仓库是用作完全独立的项目,且不再需要原仓库的更新或提交历史,可以清除.git重新初始化:
rm -rf .git
git init
git remote add origin <你的 Fork 仓库地址>
git add .
git commit -m "初始化"
git push origin main
# 此时Fork 仓库已经是一个全新的仓库,你没有办法再跟踪原仓库的更新了,也不能提交pull request
Pull Requests
Pull Request (PR) 是协作开发的重要工具,用于在分支之间或不同开发者的仓库之间合并代码改动,同时提供审阅、讨论和测试的机会。 1. 创建 Pull Request - 确保你的改动已经推送到远程仓库中的某个分支(如 feature-branch)。 - 在 GitHub 网站上,进入目标仓库,点击 “Pull Requests”。 - 点击 “New Pull Request”。 - 选择: - Base Branch:要合并到的主分支(如 main) - Compare Branch:你的开发分支(如 feature-branch) 2. 审阅和讨论 - 代码审阅者会看到你的 PR,提出评论或修改建议。 - 你可以根据反馈进行改动,并通过提交新的代码到分支自动更新 PR。 3. 合并 PR - 审阅通过后,仓库管理员或 PR 创建者可以点击 “Merge Pull Request”。 - GitHub 提供多种合并方式: - Merge Commit(默认方式):保留所有提交历史。 - Squash and Merge:将所有提交合并为一个提交。 - Rebase and Merge:将分支历史与主分支合并,保留线性历史。 4. 关闭 PR - 如果 PR 不再需要,可以选择关闭 PR,而不合并改动。
Issues
Issues 是用于跟踪任务、记录 Bug 或建议新功能的工具。它是协作和项目管理的重要部分。
- 创建 Issue
- 在仓库主页,点击 “Issues”。
- 点击 “New Issue”。
- 填写 Issue 标题和描述。
- 添加标签(Labels)标记类型(如 Bug、Enhancement)、分配人员(Assignees)和里程碑(Milestones)。
- 管理 Issue
- 可以对 Issue 进行评论和讨论。
- 可以将 Issue 关联到 PR 或者 Issue。
- 关闭 Issue
- 当 Issue 解决后,可以点击 “Close Issue” 关闭。
- 如果与 PR 关联,PR 合并时可以自动关闭 Issue(在 PR 描述中写 Fixes
#
)。
Actions
GitHub Actions 是 GitHub
提供的持续集成/持续部署(CI/CD)工具,用于自动化构建、测试和部署流程。
1. 创建 Workflow - 在仓库中创建 .github/workflows
目录。 -
在目录中创建 .yml
文件,定义 Workflow。示例:
name: CI
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
2. 触发 Workflow - 每次推送代码或创建 PR,Actions
会自动运行。 - 运行结果可以在仓库的 “Actions” 标签页中查看。 3.
使用现成模板 - GitHub 提供了许多现成的 Workflow
模板,如代码格式检查、构建部署等,可以直接使用。
Projects
Projects 是 GitHub 提供的项目管理工具,用于组织和跟踪任务、Issue 和 PR。 - 创建项目 - 在仓库页面,点击 “Projects” - 点击 “New Project”。 - 选择模板(如 Kanban Board)或自定义项目布局。 - 添加任务 - 将 Issues 或 Pull Requests 直接添加到项目中。 - 可以在项目中拖动任务,调整任务状态或优先级。 - 管理任务 - 通过拖放操作移动任务到不同阶段(如 “To Do” -> “In Progress” -> “Done”)。 - 设置优先级、截止日期和责任人。
Wiki
Wiki 是一个仓库附带的文档存储工具,适用于记录项目文档、API 说明或团队协作指南。
- 在仓库页面,点击 “Wiki”。
- 点击 “Create the first page”。
- 编辑页面内容,支持 Markdown 语法。