diff --git a/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md b/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md index 7bc6c1b..e2e68f1 100644 --- a/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md +++ b/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md @@ -4,7 +4,7 @@ title: "Git 速通指南 | Part 1: 基础" ## 1. 安装 Git -请参考文章: [安装 Git](Install-Git_zh.md) . +参考文章: [安装 Git](https://shusct.github.io/wiki/blog/install-git/) . > 📌 **注意** > 如果你是 Windows 用户, 由于这个 [Issue](https://github.com/gitextensions/gitextensions/issues/5073) 尚未被解决, 我们建议使用 Git Bash (而非 PowerShell) 执行 Git 命令. @@ -119,16 +119,47 @@ Fig.4 中的 Version 2 是当前项目的最新版本. > 💬 之后的开发过程中如果出现问题, 可以进行**版本回退**, **版本比较**等操作. -## 4. 远程储存库 +## 4. 远程 Git 储存库 很多时候, 我们需要在不同的电脑上部署某个项目进行多人协同开发. 因此出现 "将本地 Git 储存库同步到一个远程储存库 (例如 GitHub)" 的想法. +### 4.1. 基础工作流程 -### 4.1. 生成 SSH 密钥并连接 GitHub +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-远程储存库) . -参考文章: [利用 SSH 密钥链接 GitHub](Connect-to-GitHub-with-SSH-Keys_zh.md) . +**常用流程 1** - 本地更改 `push` 到远程储存库: -### 4.2. 创建一个 GitHub 储存库 +```bash +git switch +# 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 +git commit -m +# Push the new version to the remote repository +git push origin +``` + +**常用流程 2** - 远程储存库的更改 `pull` 到本地: + +```bash +git switch +# Pull the new version from the remote repository and merge it into the current branch +git pull origin --no-rebase +``` + +总结来说, 当你的储存库中版本更新, 你应该 `push` 到远程储存库; 当远程储存库中版本更新, 你应该 `pull` 到本地储存库. + +### 4.2. 生成 SSH 密钥并连接 GitHub + +参考文章: [利用 SSH 密钥链接 GitHub](https://shusct.github.io/wiki/blog/connect-to-github-with-ssh-keys/) . + +### 4.3. 创建一个 GitHub 储存库 根据 Fig.5, 我们可以在 GitHub 上创建一个新的远程 Git 储存库: 1. 输入 GitHub 的网址进入首页并登录. @@ -159,7 +190,7 @@ Figure 5. 如何创建一个远程 GitHub 储存库 Figure 6. 获取远程储存库的 SSH 地址

-### 4.3. 关联本地储存库与远程储存库 +### 4.4. 关联本地储存库与远程储存库 在 [3. 本地 Git 储存库](#3-本地-git-储存库) 中, 我们已经创建了一个本地 Git 储存库, 并且提交了一些更改; 同时在 [4.2. 创建一个 GitHub 储存库](#42-创建一个-github-储存库) 中, 我们在 GitHub 上创建了一个新的远程 Git 储存库, 并获取了远程储存库的 SSH 地址. @@ -176,7 +207,7 @@ git remote add origin 假设远程储存库的默认分支名为 `main`, 先 `pull` 远程储存库中的内容: ```bash -git pull origin main +git pull origin main --no-rebase ``` > 💡 `pull` 操作会把远程储存库中的较新内容拉取到本地储存库. @@ -203,7 +234,7 @@ git push origin main > 💡 `push` 操作会把本地储存库中较新的内容推送至远程储存库. -4.4. `clone` 远程储存库 +### 4.5. 直接 `clone` 远程储存库 对于一个已有的远程储存库, 你可以直接通过以下命令将其 `clone` 至本地: diff --git a/content/blog/Git-Speedrun-Guide-Part-2-Branch-And-Submodule/index.zh-cn.md b/content/blog/Git-Speedrun-Guide-Part-2-Branch-And-Submodule/index.zh-cn.md new file mode 100644 index 0000000..3eb847d --- /dev/null +++ b/content/blog/Git-Speedrun-Guide-Part-2-Branch-And-Submodule/index.zh-cn.md @@ -0,0 +1,174 @@ +--- +title: "Git 速通指南 | Part 2: 分支与子模块" +--- + +在 [Git 速通指南 | Part 1: 基础](https://shusct.github.io/wiki/blog/git-speedrun-guide-part-1-basics/) 中, 我们已经学习了如何创建 Git 储存库, 如何 `add` 和 `commit` 更改, 以及如何进行 `push` 以及 `pull` 操作. 本文将继续介绍 Git 的分支与子模块的使用. + +## 0. 准备工作 + +请保证本地有一个与远程仓库关联的 Git 储存库. 如果没有, 请参考 [Git 速通指南 | Part 1: 基础](https://shusct.github.io/wiki/blog/git-speedrun-guide-part-1-basics/) 第 4 节创建一个远程储存库, 然后直接 `clone` 至本地. + +## 1. 分支 + +### 1.1. 创建和切换分支 + +在本地 Git 储存库下打开终端, 输入以下命令创建一个新分支 `feature`: + +```bash +git switch -c feature +``` + + +> 💡 当基于当前分支创建了一个新分支时, 新分支会继承当前分支的所有 `commit` 记录; 可以认为新分支克隆了当前分支. + + +查看本地储存库有哪些分支: + +```bash +git branch +``` + +查看远程储存库有哪些分支: + +```bash +git branch -r +``` + +通过 `git branch` 你应该观察到当前我们在本地的 `feature` 分支上; 如果没有, 通过以下命令切换到 `feature` 分支: + +```bash +git switch feature +``` + +在当前路径下创建一个新文件 `feature.txt` 并写入 "This is a feature file."; 将更改 `add` 和 `commit` 到本地储存库: + +```bash +echo "This is a feature file." > feature.txt +git add feature.txt +git commit -m "Add feature file" +``` + +这次 `commit` 记录仅在 `feature` 分支上, 并不会影响 `main` 分支. 切换到 `main` 分支, 可以看到 `feature.txt` 文件并不存在: + +```bash +git switch main +ls # List files in current directory +``` + +### 1.2. `merge` 分支 + +由于 `feature` 分支上的更改已经 `commit`, 我们希望将 `feature` 分支上的更改合并到 `main` 分支上. 切换到 `main` 分支, 并输入以下命令: + +```bash +git switch main +git merge feature # Merge feature to main +``` + +此时在 `main` 分支下, 通过 `ls` 命令可以查看到已有 `feature.txt` 文件. 从 `commit` 记录来看, `main` 分支上的 `commit` 记录已经包含了 `feature` 分支上的所有 `commit` 记录. + +### 1.3. 冲突处理 + +冲突发生在 `merge` 过程中. 例如, 当 `main` 分支和 `feature` 分支上的同一个文件的同一行都被修改时, Git 无法自动决定如何合并这两个更改, 从而产生冲突. + +接下来我们尝试模拟冲突产生过程并处理冲突. + +首先切换到 `main` 分支, 修改 `feature.txt` 文件, 在 "This is a feature file." 这行末尾添加 "mmm", 最终文件内容为 "This is a feature file.mmm". `add` 和 `commit` 更改. + +接着切换到 `feature` 分支, 修改 `feature.txt` 文件, 在 "This is a feature file." 这行末尾添加 "fff", 最终文件内容为 "This is a feature file.fff". `add` 和 `commit` 更改. + +切换回 `main` 分支, 输入以下命令合并 `feature` 分支: + +```bash +git merge feature +``` + +终端提示如下: + +``` +Auto-merging feature.txt +CONFLICT (content): Merge conflict in feature.txt +Automatic merge failed; fix conflicts and then commit the result. +``` + +说明合并过程中发生了冲突. 此时查看 `feature.txt` 文件, 会发现文件内容如下: + +``` +<<<<<<< HEAD +This is a feature file. mmm +======= +This is a feature file. fff +>>>>>>> feature +``` + +从上面的内容可以看出, `<<<<<<< HEAD` 到 `=======` 之间的内容是 `main` 分支上的内容 (即当前分支 `HEAD`), `=======` 到 `>>>>>>> feature` 之间的内容是 `feature` 分支上的内容. 我们需要手动解决这个冲突. + +解决冲突的方式非常简单, 手动选择保留哪部分内容即可. 比如把上面的内容全部删除, 只保留 `feature` 分支的更改, 最终文件内容为 "This is a feature file.fff". + +在 `main` 分支上 `add` 和 `commit` 更改后, 就完成了 `merge` `feature` 分支并解决冲突的所有过程. + +> 💬 从远程 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 仓库中. 子模块的使用可以帮助我们更好地管理项目的依赖关系. + +### 2.1. 添加子模块 + +在本地 Git 储存库下打开终端, 输入以下命令添加一个子模块: + +```bash +git submodule add +``` + +其中 `` 是子模块的 Git 仓库地址, `` 是子模块在本地储存库中的相对路径. + +### 2.1. 初始化子模块 + +直接 `clone` 包含子模块的 Git 仓库时, 子模块并不会被自动初始化. 因此需要手动初始化子模块: + +```bash +git submodule update --init --recursive +``` + +### 2.3. 更新子模块 + +如果子模块的远程仓库发生了更改, 需要手动更新子模块: + +```bash +git submodule update --remote --recursive +``` + +### 2.4. 删除子模块 + +删除子模块需要以下几个步骤: + +1. 删除 `.gitmodules` 文件中子模块的配置. +2. 删除 `.git/config` 文件中子模块的配置. +3. 删除子模块的目录. +4. 删除 `.git/modules/` 文件夹. \ No newline at end of file diff --git a/content/blog/Git-Speedrun-Guide-Part-3-Contribute-as-a-Collaborator/index.zh-cn.md b/content/blog/Git-Speedrun-Guide-Part-3-Contribute-as-a-Collaborator/index.zh-cn.md new file mode 100644 index 0000000..6e59f23 --- /dev/null +++ b/content/blog/Git-Speedrun-Guide-Part-3-Contribute-as-a-Collaborator/index.zh-cn.md @@ -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 --no-rebase +# Switch to the branch +git switch +``` + + +如果没有合适的分支, 你需要创建一个新的分支. 我们建议使用如下命名规范: + +

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

+ +参考 [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 "" +# Pull the new version from the remote repository +git pull origin --no-rebase +# [Note]: If there are conflicts, you need to resolve them manually. +# Push the new version to the remote repository +git push origin +``` + +## 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 +# 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 +``` + +此时你的分支能够被 `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 +``` + + diff --git a/content/blog/Install-Git/index.zh-cn.md b/content/blog/Install-Git/index.zh-cn.md index de27ccf..49955c1 100644 --- a/content/blog/Install-Git/index.zh-cn.md +++ b/content/blog/Install-Git/index.zh-cn.md @@ -12,7 +12,7 @@ sudo apt install git ## 2. 在 Windows 上安装 Git -安装 Scoop (参考: [在 Windows 上安装 Scoop](Install-Scoop-on-Windows_zh.md)) 后, 在终端中运行以下命令以安装 Git: +安装 Scoop (参考: [在 Windows 上安装 Scoop](https://shusct.github.io/wiki/blog/install-scoop-on-windows/)) 后, 在终端中运行以下命令以安装 Git: ```powershell scoop install main/git diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/check_ram.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/check_ram.png new file mode 100644 index 0000000..b2aa914 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/check_ram.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/clean_disk.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/clean_disk.png new file mode 100644 index 0000000..878ee57 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/clean_disk.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/disk_manager.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/disk_manager.png new file mode 100644 index 0000000..51ea53f Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/disk_manager.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/download_ubuntu_iso.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/download_ubuntu_iso.png new file mode 100644 index 0000000..3751321 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/download_ubuntu_iso.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/hp_boot.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/hp_boot.png new file mode 100644 index 0000000..40bbf09 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/hp_boot.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit.png new file mode 100644 index 0000000..c10351e Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit_2.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit_2.png new file mode 100644 index 0000000..7ee9fd3 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit_2.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_1.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_1.png new file mode 100644 index 0000000..7712c5c Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_1.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_2.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_2.png new file mode 100644 index 0000000..a22b74e Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_2.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/lenovo_boot.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/lenovo_boot.png new file mode 100644 index 0000000..da6f470 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/lenovo_boot.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/nvidia_driver.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/nvidia_driver.png new file mode 100644 index 0000000..9a2dc8c Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/nvidia_driver.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/reset_windows.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/reset_windows.png new file mode 100644 index 0000000..762d921 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/reset_windows.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/see_out_alter_downloads.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/see_out_alter_downloads.png new file mode 100644 index 0000000..9820b2c Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/see_out_alter_downloads.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/shrink_disk.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/shrink_disk.png new file mode 100644 index 0000000..db5c402 Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/shrink_disk.png differ diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/index.zh-cn.md b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/index.zh-cn.md new file mode 100644 index 0000000..edd8437 --- /dev/null +++ b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/index.zh-cn.md @@ -0,0 +1,215 @@ +--- +title: 重置 Windows 并且安装 Ubuntu 双系统 +--- + +## 1. [可选] 重置 Windows + +先把重要的东西备份好. + +根据下图步骤重置你的 Windows. + + + + +注意, 在 Step 8, 如果你有多个磁盘, 建议把别的磁盘也给格式化了. + +## 2. 下载 Ubuntu Desktop + +进入 https://ubuntu.com/download/desktop . + +Ubuntu 23 比较好看, 所以接下来我准备下载 23. 你也可以选择下载 22. + +官方源不翻墙下载太慢了. 推荐从镜像源下载. + +向下滑动页面, 找到并点击下图中的 "see our alternative downloads". + + + + +然后根据下图翻翻翻, 点点点, 下载 "ubuntu-23.10.1-desktop-amd64.iso". + + + +选择从南京大学的镜像站下载是因为我自己用下来感觉最快. 你可以根据自己的网络环境选择其他的镜像站. + +## 3. 制作启动盘 + +准备一个大于 16G 的闲置U盘. 等会U盘会被格式化, 所以里面别放重要的东西. + +下载 Rufus, 网址: https://rufus.ie/en/ . + +用起来很简单, 选择你的U盘, 选择前面下载好的 iso, 点 START. + +## 4. 装双系统 + +### 4.1. 看自己有多少磁盘 + + + +### 4.2. 看自己的内存大小 + + + +可以看到我的电脑 RAM 是 16 GB. + +### 4.3. 情况 1: 对于一个磁盘, 希望一部分用于 Windows, 另一部分分配给 Ubuntu (以 C 盘为例) + +#### 4.3.1. 压缩目标磁盘 + +根据下图, 先压缩目标磁盘, 预留出足够空闲空间给 Ubuntu: + + + +> 💡 如果你的 SSD 明明有很多容量, 但是能够 shrink 的部分很小 (比如 475G 只能 shrink 100G), 强烈建议重装一下 Windows. + +#### 4.3.2. 进入安装引导 + +将 [3. 制作启动盘](#3-制作启动盘) 中制作好的启动盘插入电脑. + +电脑关机; 再按电源键开机立刻疯狂按 F2 进入 Bios 模式. + +然后你需要想办法更改启动选项为 USB (也就是刚刚做的启动盘). + +不同电脑的更改方式不一样, 比如联想的电脑可以参考下图: + + + +惠普的电脑, 先要选择退出 Hardware Diagnostics UEFI, 然后选择启动选项: + + + +> 📌 注意: 启动时, 如果系统问你选择用什么 boot 模式, 记得选 normal mode 而非 grub2 mode. + +#### 4.3.3 开始安装 Ubuntu + +安装参考下面的步骤 (不同版本 Ubuntu 可能顺序不一样, 不过大差不差): + + + +### 4.4. 情况 2: 有一个独立磁盘安装 Ubuntu + +#### 4.4.1. 释放目标磁盘 + +参考下图做以下几件事情: +1. Win + R 打开 Run. +2. 输入 "Diskpart". +3. 输入命令: + ```bash + list disk + ``` + **注意: 不要释放掉安装了 Windows 的磁盘.** +4. 找到额外的磁盘, 比如我希望把 Linux 安装在 Disk 1 中, 就执行下面两条命令把 Disk 1 释放掉: + ```bash + select disk 1 # Choose the disk where you want to install Linux. + clean # "Clean" the disk, aka. free and format the disk. + ``` + + + +#### 4.4.2. 进入安装引导 + +与 [4.3.2. 进入安装引导](#432-进入安装引导) 中的步骤一样. + +#### 4.4.3. 开始安装 Linux + +安装参考下面的步骤 (不同版本 Ubuntu 可能顺序不一样, 不过大差不差): + + + +## 5. 修复启动引导 + +安装完重启 ubuntu, 会进入启动引导界面, 直接选择进入 ubuntu. + +进入后 ctrl+alt+t 调出 terminal, 输入以下两条命令: + +```bash +sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update + +sudo apt install -y boot-repair && boot-repair +``` + +弹出的窗口全选确认, 等待修复完成即可. + +## 6. 简单个性化和开发环境配置 + +### 6.1. 安装 VIM + +下载 `vim-gtk3`, 将原始配置文件重命名为 `vimrc.bak`, 然后新建 `vimrc` 文件并写入我们提供的 [vimrc](./vimrc) 内容 (按 `i` 进入 INSERT 模式, 按 `Ctrl-Shift-v` 粘贴, 按 `ESC` 进入 NORMAL 模式, 按 `:` 进入 COMMAND 模式, 输入 `wq` 后按 `ENTER` 保存退出) + +```bash +sudo apt-get install vim-gtk3 +sudo mv /etc/vim/vimrc /etc/vim/vimrc.bak +sudo vim /etc/vim/vimrc # 写入我们提供的 vimrc 内容 +``` + +如果你不会使用 vim, 安装完后, 请运行下面的指令开始 30 分钟的 vim 速成: + +```bash +vimtutor +``` + +### 6.2. [可选] 安装 Nvidia 驱动和 CUDA TOOLKIT (需要你的电脑有 N 卡) + +如果你电脑没有 N 卡自然跑不了 Pytorch 捏~ + +本文选择安装了 535 版本的驱动, 目前测试没有 bug. 你可以结合自己的情况试试安装更新的驱动, 不过版本一定要记住, 后面安装 cuda tookit 要用到. + +参考下图安装驱动: + + + +安装完后重启一下, 接着我们继续安装 cuda toolkit. + +先安装 Build Essentials, 也就是 gcc, g++, gdb: + +```bash +sudo apt install build-essential +``` + +进入 [Cuda Tookit Archive 官网](https://developer.nvidia.com/cuda-toolkit-archive). + +然后要注意, 当前最新 (2024/Feb/09) 的 cuda toolkit 是 12.3.2 (January 2024), 点进去选好操作系统 (Linux => x86_64 => Ubuntu => 22.04 => runfile) 后可以看到下载指令. + +**但是我们前面安装的是 535 版本的驱动, 上述指令下载的对应驱动是 545 版本. 因此出现了不匹配的状况.** + +因此你在下载时, **需要结合你安装的驱动版本找到最新的与驱动版本匹配的 cuda toolkit**. + +> 💡 你可以在系统中安装多个 cuda toolkit 版本, 只要系统驱动版本高于 toolkit 要求的版本即可. + +对于 535 版本的驱动, 最新的匹配 cuda toolkit 应该是 [12.2.2 (August 2023)](https://developer.nvidia.com/cuda-12-2-2-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local). + +点进去后选择操作系统 (虽然我们安装的是 Ubuntu 23, 但是 22.04 的 Cuda Tookit 也能装): + +Linux => x86_64 => Ubuntu => 22.04 => runfile(local) + +可以看到跳出下面的两条指令; 第一条是下载 cuda tookit 安装程序, 第二条是安装 cuda tookit: + +```bash +# [Warning] Following commands are just an example. You should get your command from the offical website: https://developer.nvidia.com/cuda-toolkit-archive + +# Download cuda toolkit +wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run +# Run installation script +sudo sh cuda_12.2.2_535.104.05_linux.run +``` + +参考下图的步骤进行 cuda toolkit 的安装 (注意取消安装 Driver): + + + +安装完后, 根据输出的提示, 利用指令 `sudo vim /etc/bash.bashrc` 在文件的末尾添加以下两行命令 (具体命令要你参考下图根据输出提示改, 不一定和我的一样): + +```bash +export PATH="$PATH:/usr/local/cuda-12.2/bin" +export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-12.2/lib64" +``` + + + +> 💡 如果安装了多个版本的 cuda toolkit, 可以通过更改上面的路径并重启终端实现切换 cuda toolkit 版本. + +安装完后, 把当前终端关闭, 开个新终端, 输入以下指令检查 cuda toolkit 是否安装成功: + +```bash +nvcc -V +``` diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/vimrc b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/vimrc new file mode 100644 index 0000000..fd58a3c --- /dev/null +++ b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/vimrc @@ -0,0 +1,73 @@ +" $VIMRUNTIME refers to the versioned system directory where Vim stores its +" system runtime files -- /usr/share/vim/vim. +" +" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc. +" This happens after /etc/vim/vimrc(.local) are loaded, so it will override +" any settings in these files. +" +" If you don't want that to happen, uncomment the below line to prevent +" defaults.vim from being loaded. +" let g:skip_defaults_vim = 1 +" +" If you would rather _use_ default.vim's settings, but have the system or +" user vimrc override its settings, then uncomment the line below. +" source $VIMRUNTIME/defaults.vim + +" All Debian-specific settings are defined in $VIMRUNTIME/debian.vim and +" sourced by the call to :runtime you can find below. If you wish to change +" any of those settings, you should do it in this file or +" /etc/vim/vimrc.local, since debian.vim will be overwritten everytime an +" upgrade of the vim packages is performed. It is recommended to make changes +" after sourcing debian.vim so your settings take precedence. + +runtime! debian.vim + +" Uncomment the next line to make Vim more Vi-compatible +" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes +" numerous options, so any other options should be set AFTER changing +" 'compatible'. +"set compatible + +" Vim5 and later versions support syntax highlighting. Uncommenting the next +" line enables syntax highlighting by default. +if has("syntax") + syntax on +endif + +" If using a dark background within the editing area and syntax highlighting +" turn on this option as well +"set background=dark + +" Uncomment the following to have Vim jump to the last position when +" reopening a file +au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + +" Uncomment the following to have Vim load indentation rules and plugins +" according to the detected filetype. +"filetype plugin indent on + +" The following are commented out as they cause vim to behave a lot +" differently from regular Vi. They are highly recommended though. +set showcmd " Show (partial) command in status line. +set showmatch " Show matching brackets. +set ignorecase " Do case insensitive matching +set smartcase " Do smart case matching +set incsearch " Incremental search +set autowrite " Automatically save before commands like :next and :make +set hidden " Hide buffers when they are abandoned +set mouse=a " Enable mouse usage (all modes) + +set number +set cursorline +" set cursorcolumn +set shiftwidth=4 +set tabstop=4 +set expandtab +set scrolloff=10 +set showmode +set hlsearch + +" Source a global configuration file if available +if filereadable("/etc/vim/vimrc.local") + source /etc/vim/vimrc.local +endif \ No newline at end of file