跳至主要內容

利用工具加速开发

ZJHU大约 5 分钟

注意

还在更新中,比较乱……

Git

参考资料

廖雪峰的git教程open in new window

Git 是一个分布式版本控制系统,在版本控制、分支与合并、多人合作等方面起重要作用。利用 Git 参与 Rocos 的开发有助于提高效率。

如果你只是来查询常用 git 命令的,这边走

安装 Git

点击展开查看

提示

安装完毕后,在终端中使用 git version 检查是否安装完毕(安装好了就会出现版本)。

配置 Git

点击展开查看

注意

首先确保你要有一个 Github 账号,如果没有,点这里注册 Github 账号open in new window

  • 如果你刚装 git,你需要配置一下用户名和邮箱。
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
  • (可选)配置 SSH 来方便使用

    1. 如果没有,先生成一下 SSH 密钥,用你的邮箱替换示例邮箱,
    ssh-keygen -t ed25519 -C "你的邮箱"
    

    随后按四下回车,在默认地方生成密钥,Linux 在 ~/.ssh/ 文件夹,Windows 在 C:\\Users\\username\\.ssh\\ 文件夹。
    生成 SSH 密钥

    1. 找到公钥,在 .ssh 文件夹下,叫做 id_rsa.pub,复制这段内容。
    2. 打开Github > 右上角个人设置 > 左侧 Access/SSH and GPG keys > 右上角 生成SSH Key open in new window,填入标题和公钥(上一步复制的那些),保存。
      添加 SSH 公钥到 Github

常用命令

提示

使用 git help 获取更多详细的帮助。

重要

在命令行中,方括号 [] 表示可选参数,尖括号 <> 表示必需参数。

克隆 clone

  • git clone 将远程仓库复制到本地。
  • 当我们需要从网上整个库下来的时候用这个。
# 定义
git clone [<options>] [--] <repo> [<dir>]

# 常用
git clone <仓库地址> [<目标地址(你想把这个库放在哪里)>]

# 举例:我需要克隆 Robocup-ssl-China/rocos 到我的用户目录的 Rocos 文件夹中。
git clone git@github.com:Robocup-ssl-China/rocos.git ~/user/Rocos # 如果你已经在 user 文件夹,可以省略这里的第二个参数

拉取 pull

  • git pull 将远程仓库拉取到本地。
  • 当我们需要更新到最新版的时候使用(比如开始工作前要把进度和仓库同步,因为可能其他人有提交)。
# 定义
git pull [<options>]

# 常用
git pull             # 拉取(相当于直接更新)
git pull [<仓库地址>] # 要从特定的仓库拉取

添加文件到暂存区 add

  • git add 将文件添加到暂存区。
  • 当我们准备上传的时候,需要先把需要上传的文件添加到暂存区,然后提交暂存区(把文件从暂存区传到本地仓库),最后推送(把本地仓库内容传到远程)。
# 定义
git add [<files>]

# 常用
git add .   # 把所有更改添加到暂存区

提交暂存区 commit

  • git commit 提交暂存区。
  • 常用参数为 -m [<message>],用来添加本次提交的说明(你这次提交做了什么)。
  • 如果不添加说明直接提交,git 会让你填写说明,如果此时仍不填写说明,这次提交会失败。
# 常用
git commit -m "提交说明"    # 提交,并且给这次提交添加说明

推送 push

  • git push 从将本地的分支版本上传到远程并合并。
  • 当文件被提交到本地仓库后,使用这个命令给推送到远程。
  • --force 参数可以表示这次推送是强制推送(直接覆盖,谨慎使用)。
# 常用
git push                    # 一般情况下直接推送就行了
git push <远程主机> <分支>   # 推送到指定主机的指定分支

检出/切换分支 checkout/switch

  • git checkout 命令用于在几个分支之间切换。
  • 使用参数 -b <分支名> 可以创建分支并切换过去。
  • git switch 和前者功能类似,“更清晰地切换分支”。
  • 使用参数 -c <分支名> 可以创建分支并切换过去。
  • 在执行上述操作前要确保当前没有修改或者修改已被提交。
  • 除了分支名,也可以用哈希值来切换到指定的提交版本。
# 常用
git checkout <分支名>
git checkout -b <新建的分支名>

git switch <分支名>
git switch -c <新建的分支名>

为什么要有多个分支?

多分支可以让不同人同时开发不同功能,互不影响。
也可以用作版本隔离,比如开发版本与发布版本分开来。

合并 merge

  • git merge 命令用于合并不同的分支。
  • 要注意是把参数中的分支合并入当前的分支,所以最好先用 git checkout 确认当前分支是否正确。
# 定义
git merge <branch>  # 将指定分支合并入当前所在分支

# 举例:我需要把开发分支 "dev" 合并入主分支 "main"
git checkout main
git merge dev
# 如果有冲突,需要解决后再次提交

案例参考

  • 我电脑上还没有 Rocos,我要去从仓库下载个
# clone 自官方仓库
git clone https://github.com/Robocup-ssl-China/rocos

# 或 clone 自本校的仓库
git clone https://github.com/Umbrella167/Rocos
  • 我进行了更新,需要上传
git pull                                            # 上传前先更新到最新版本,如果有冲突还要解决冲突并合并
git add .                                           # 添加所有更新
git commit -m "What have you done in this commit?"  # 提交信息可以写这次提交更新了什么,不建议乱写!
git push                                            # 推送
  • Rocos 的上游修改了,我需要拉取上游更新

  • 我需要切换新分支来测试我的功能

  • 我的新功能写好了,我需要合并到主分支

VSCode

开源的轻量级代码编辑器。

选一个趁手的敲代码的工具还是蛮重要的。

解决冲突并合并

当产生冲突的时候,Code 的冲突解决会很好用,直观方便(如下图所示,左侧是当前分支,右侧是输入分支,中间是合并后的预览;可以通过标记的冲突处上面的选项快速决定需要保留哪部分内容)。
Code Conflicts Solver