Skip to content

Commit

Permalink
Update Git Speedrun Guide
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesnulliu committed Jul 1, 2024
1 parent 2f33fee commit 10ecaa1
Show file tree
Hide file tree
Showing 3 changed files with 172 additions and 11 deletions.
28 changes: 18 additions & 10 deletions content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,17 +119,24 @@ Fig.4 中的 Version 2 是当前项目的最新版本.

> 💬 之后的开发过程中如果出现问题, 可以进行**版本回退**, **版本比较**等操作.
## 4. 远程储存库
## 4. 远程 Git 储存库

很多时候, 我们需要在不同的电脑上部署某个项目进行多人协同开发. 因此出现 "将本地 Git 储存库同步到一个远程储存库 (例如 GitHub)" 的想法.

## 4.1. 基础命令
### 4.1. 基础工作流程

在实际创建和使用远程储存库之前, 我们先了解一些基础命令:
1. SSH 密钥连接 GitHub: [4.2. 利用 SSH 密钥链接 GitHub](#42-生成-ssh-密钥并连接-github) .
2. 已有本地储存库:
- [4.3. 创建一个 GitHub 储存库](#43-创建一个-github-储存库) .
- [4.4. 关联本地储存库与远程储存库](#44-关联本地储存库与远程储存库) .
3. 已有远程储存库:
- [4.5. 直接 `clone` 远程储存库](#45-直接-clone-远程储存库) .

本地更改 `push` 到远程储存库:
**常用流程 1** - 本地更改 `push` 到远程储存库:

```bash
git switch <BranchName>
# Do some changes in the project
# Add local changes to the staged area
git add .
# Commit local changes to the local Git repository; Now there is a new version of your project
Expand All @@ -138,20 +145,21 @@ git commit -m <Message>
git push origin <BranchName>
```

远程储存库的更改 `pull` 到本地:
**常用流程 2** - 远程储存库的更改 `pull` 到本地:

```bash
# Pull the new version from the remote repository
git switch <BranchName>
# Pull the new version from the remote repository and merge it into the current branch
git pull origin <BranchName> --no-rebase
```

总结来说, 当你的储存库中版本更新, 你应该 `push` 到远程储存库; 当远程储存库中版本更新, 你应该 `pull` 到本地储存库.

### 4.1. 生成 SSH 密钥并连接 GitHub
### 4.2. 生成 SSH 密钥并连接 GitHub

参考文章: [利用 SSH 密钥链接 GitHub](https://shusct.github.io/wiki/blog/connect-to-github-with-ssh-keys/) .

### 4.2. 创建一个 GitHub 储存库
### 4.3. 创建一个 GitHub 储存库

根据 Fig.5, 我们可以在 GitHub 上创建一个新的远程 Git 储存库:
1. 输入 GitHub 的网址进入首页并登录.
Expand Down Expand Up @@ -182,7 +190,7 @@ Figure 5. 如何创建一个远程 GitHub 储存库
Figure 6. 获取远程储存库的 SSH 地址
</p>

### 4.3. 关联本地储存库与远程储存库
### 4.4. 关联本地储存库与远程储存库

[3. 本地 Git 储存库](#3-本地-git-储存库) 中, 我们已经创建了一个本地 Git 储存库, 并且提交了一些更改; 同时在 [4.2. 创建一个 GitHub 储存库](#42-创建一个-github-储存库) 中, 我们在 GitHub 上创建了一个新的远程 Git 储存库, 并获取了远程储存库的 SSH 地址.

Expand Down Expand Up @@ -226,7 +234,7 @@ git push origin main

> 💡 `push` 操作会把本地储存库中较新的内容推送至远程储存库.
### 4.4. 直接 `clone` 远程储存库
### 4.5. 直接 `clone` 远程储存库

对于一个已有的远程储存库, 你可以直接通过以下命令将其 `clone` 至本地:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ git switch main
git merge feature # Merge feature to main
```

此时在 `main` 分支下, 通过 `ll` 可以查看到已有 `feature.txt` 文件. 从 `commit` 记录来看, `main` 分支上的 `commit` 记录已经包含了 `feature` 分支上的所有 `commit` 记录.
此时在 `main` 分支下, 通过 `ls` 命令可以查看到已有 `feature.txt` 文件. 从 `commit` 记录来看, `main` 分支上的 `commit` 记录已经包含了 `feature` 分支上的所有 `commit` 记录.

### 1.3. 冲突处理

Expand Down Expand Up @@ -108,6 +108,32 @@ This is a feature file. fff

> 💬 从远程 Git 储存库 `pull` 新版本时, 也可能出现冲突情况. 此时也只需手动处理冲突即可.
### 3.4. 删除本地分支

当一个分支的工作已经完成, 可以删除该分支. 删除分支前, 请确保该分支上的所有更改已经 `commit` 并合并到其他分支上. 删除本地分支 `feature`:

```bash
git branch -d feature
```

### 3.5. 创建远程分支

本地新创建的分支 `feature` 并不会自动同步到远程仓库. 如果需要将本地分支同步到远程仓库, 需要手动 `push` 该分支:

```bash
git push origin feature:feature
```

此时在远程仓库中应该可以看到一个新的分支 `feature`.

### 3.6. 删除远程分支

删除远程分支 `feature`:

```bash
git push origin --delete feature
```

## 2. 子模块

子模块是 Git 仓库中的一个仓库. 通过子模块, 我们可以将一个 Git 仓库嵌套到另一个 Git 仓库中. 子模块的使用可以帮助我们更好地管理项目的依赖关系.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
---
title: "Git 速通指南 | Part 3: 作为协作者贡献"
---

> 📌**注意**: 对于 SHUSCT, 我们倾向使用 GitHub Flow 进行协作. 详细内容请参考 [GitHub Flow](https://guides.github.com/introduction/flow/).
## 1. 指定协作者 (Collaborator)

1. 打开你的项目仓库, 点击 `Settings` 选项卡.
2. 在左侧导航栏中点击 `Manage access`.
3. 在右上角点击 `Invite a collaborator`.
4. 输入协作者的 GitHub 用户名, 点击 `Add [username] to [repository]`.

## 2. `clone` 项目仓库

参考 [Git 速通指南 | Part 1: 基础 - 4. 远程储存库](https://shusct.github.io/wiki/blog/git-speedrun-guide-part-1-basics/#4-%e8%bf%9c%e7%a8%8b%e5%82%a8%e5%ad%98%e5%ba%93) 中的内容, 将项目仓库 `clone` 至本地.

## 3. 查看 `issue`

在项目仓库中点击 `Issues` 选项卡.

选择一个你感兴趣的 `issue`, 并在评论中表明你想要解决这个 `issue`. 你可以提出你的解决方案, 或者询问其他协作者的意见; 你还可以将 `issue` 分配给自己.

如果没有与你想法相关的 `issue`, 你可以创建一个新的 `issue`.

## 4. 创建分支

当你决定解决一个 `issue` 时, 请先检查是否已经有合适的分支.

如果有, 可以直接在本地 `pull``switch` 到该分支进行工作:

```bash
# Pull the new version from the remote repository
git pull origin <BranchName> --no-rebase
# Switch to the branch
git switch <BranchName>
```


如果没有合适的分支, 你需要创建一个新的分支. 我们建议使用如下命名规范:

<p align="center">

| 分支名 | 用途 |
| :---: | :---: |
| `feature/#<IssueNumber>-<Description>` | 添加新功能 |
| `bugfix/#<IssueNumber>-<Description>` | 修复 bug |
| `hotfix/#<IssueNumber>-<Description>` | 紧急修复 |
| `doc/#<IssueNumber>-<Description>` | 文档更新 |

</p>

参考 [Git 速通指南 | Part 1: 基础 - 1. 分支]() 创建新分支并推送至远程仓库. 例如, 如果你想解决 `issue #1` (关于支持 `std::format`), 你可以创建一个名为 `feature/#1-support-std-format` 的分支并推送至远程仓库; 参考以下命令:

```bash
# Switch to the target branch
git switch main # Take main branch as an example
# Create and switch to a new branch; The branch is based on the target branch
git switch -c feature/#1-support-std-format
# Push the new branch to remote repository
git push origin feature/#1-support-std-format:feature/#1-support-std-format
```

## 5. `push` 更改

修改完成后, 请将更改 `add``commit` 到本地仓库, 接着先 `pull` 远程仓库的最新更改 (他人可能在你提交之前 `push` 到了你正在工作的分支, 你需要 `pull` 下来进行可能的[冲突处理]()), 然后再 `push` 你的更改至远程仓库:

```bash
# Add local changes to the staged area
git add .
# Commit local changes to the local Git repository; Now there is a new version of your project
git commit -m "<Message>"
# Pull the new version from the remote repository
git pull origin <BranchName> --no-rebase
# [Note]: If there are conflicts, you need to resolve them manually.
# Push the new version to the remote repository
git push origin <BranchName>
```

## 6. 提交 `PR`

当你的更改完成并 `push` 到远程仓库后, 请在 GitHub 上提交一个 `PR` (Pull Request).

1. 打开项目仓库, 点击 `Pull requests` 选项卡.
2. 点击 `New pull request`.
3. 选择你的分支和目标分支. 由于我们采用 GitHub Flow, 通常目标分支是 `main`; `PR` 操作的目的是将你的分支 `merge` 入目标分支.
4. 输入 `PR` 的标题和描述. **如果你的 `PR` 关联到某个 `issue`, 请在描述中提及, 例如: `Fix #1`, `Close #1`**.
5. 点击 `Create pull request`.

如果 GitHub 提示 `conflict`, 那么表示当前分支和目标分支间有无法自动解决的冲突. 以目标分支为 `main` 为例, 你需要将最新的 `main` 分支 `merge` 入你的分支, 并解决冲突后再次 `push` 到远程仓库; 参考以下代码:

```bash
# Switch to the target branch
git switch main
# Pull the new version from the remote repository
git pull origin main --no-rebase
# Switch to your branch
git switch <BranchName>
# Merge the target branch into your branch
git merge main
# [Note]: If there are conflicts, you need to resolve them manually.
# Push the new version to the remote repository
git push origin <BranchName>
```

此时你的分支能够被 `merge` 入目标分支; 回到刚才的 `PR` 页面, GitHub 能够自动检测到你的分支已经能够被 `merge`.

## 7. `PR` 审核与合并

作为协作者, 你可以在 `PR` 页面查看其他协作者提交的 `PR`, 并对其进行评论. 你可以提出修改建议, 或者直接 `approve``PR`.

`PR` 经过多人 `approve` 后, 项目维护者可以 `merge``PR`. 项目维护者可以选择 `Squash and merge`, `Rebase and merge`, 或者 `Create a merge commit` 等方式进行 `merge`.

## 8. `Tag`

如果想要将某个版本标记为重要版本, 可以使用 `tag`. 例如, 如果你的项目完成了一个重要的版本迭代, 你可以使用 `tag` 标记该版本:

```bash
# Switch to the target branch
git switch main # Take main branch as an example
# Tag the version
git tag -a v1.0 -m "Release v1.0"
# Push the tag to the remote repository
git push origin v1.0
```


0 comments on commit 10ecaa1

Please sign in to comment.