[研学] 项目配置和规范
VS 和 环境配置
头文件和库文件去群里下或者自己编译,似乎把编译好的库文件放代码库里面会违反开源协议?
把头文件和库文件放到你的项目文件夹的同级目录下。在 VS 中上方 文件-启动窗口-创建新项目-空项目,文件夹选你的项目文件夹。
将你的 github 仓库 clone 到你的项目文件夹,clone 操作在下文。
调试-xxx 调试属性-VC++目录,将 includes 文件夹和项目中的 header 文件夹加入包含目录和外部包含目录,libs 文件夹加入库目录,同窗口 链接器-输入-附加依赖项 内加入 glfw3.lib。
在项目文件中新建 path.cpp,里面写入
#include "utils/file.h"
const std::string path = R"([[ 你的项目文件夹 ]])";
e.g const std::string path = R"(C:\Watware\Cpp\source\Rep\)";
(这个操作以后应该会去掉,但是现在先这样吧)
这是你的文件结构应该形如
xxxx
|- includes
|- libs
|- project
|- header
|- ...
|
|- path.cpp
!!! 最后将 项目-显示所有文件 打开。
git 使用和规范
一个不错的教程
使用
事前准备
从 这里 下载 git。git 默认不使用代理,使用 git config --global http.proxy http://127.0.0.1:7890
和 git config --global https.proxy https://127.0.0.1:7890
设置 clash 代理。
加入团队,从 团队 fork 项目。在合适的地方建立文件夹(以下称为 project),然后运行命令 git clone https://github.com/[!!!YOURNAME!!!]/Research-Based-Learning.git
,git 会把项目从 github 下载到 project 文件夹下一个同名文件夹(以下称为工作区)中。将该文件夹用 VS 打开,并在该文件夹下打开 cmd 运行 git 命令。
在提交代码前你需要将自己的一个 ssh 密钥上传至 github,在 settings-SSH and GPG keys 处,github 有文档说明如何生成。
一些概念
git 分为工作区和暂存区,使用 git add .
将工作区所有修改存入暂存区。
git 的仓库分为本地或者远程,通过 git remote add NAME URL.git
添加一个远程仓库。URL 是你访问仓库首页使用的网址,NAME 任取,通常你 fork 的仓库叫做 origin,被 fork 的仓库叫 upstream。
git 内部维护一个 DAG,有若干节点和边。
每条边是一个 commit,是一系列修改操作的集合。每个点代表你的代码的一个版本,你可以随意查看版本间的修改,回退版本或者合并两个版本。
本地或远程仓库有多个 branch,每个 branch 是一个指向 DAG 某个节点的指针。本地仓库的 branch 直接使用其名字访问,如一个叫 test 的 branch 在命令行中写作 branch
,远程仓库的 branch 用远程仓库名和其名字访问,如一个叫 test 的 origin 仓库中的 branch 在命令行中写作 origin test
一些命令
branch
使用 git branch -a
查看所有的 branch。红色的是远程的,绿色的是当前的 branch。
使用 git switch [-c] NAME
切换或创建 branch,-c 表示 create。
使用 git branch -m NEWNAME
更改当前 branch 名字。
默认应该会有一个名字叫 main 的 branch,如果它默认叫 master,请将其名字改成 main 以与 github 同步并且避免对 Sadomasochism 倾向的影射。
commit
使用 git commit -m "DESCRIPTION"
将暂存区的所有修改作为一个从当前 branch 指向修改后节点的 commit 添加到 DAG,并把当前 branch 指向新建的那个节点。DESCRIPTION 是 commit 的描述,尽量写清楚一点以免给未来的自己添麻烦。
使用 git log
和 git reflog
查看 commit。你应该能看到本地和远程的 branch 都指向 DAG 的什么位置。
使用 git reset --hard COMMITID
将当前 branch 强行回退至 COMMITID,COMMITID 是一长串 16 进制 ID,你可以只写一个前缀。
以上所有更改会存储在你的计算机本地,以下操作可以将本地的数据和远程的数据进行交互:
remote
使用 git push [-u] [-f] REMOTE_NAME BRANCH_NAME
将该 branch 推送到 remote 的同名 branch 中。如果是第一次 push,请加上 -u,表示将本地和远程的 branch 关联起来。如果你前面使用过 reset 操作,那请加上 -f,表示 force 强制。
使用 git pull REMOTE_NAME BRANCH_NAME
将远程库中的数据拉取到你的计算机。
使用 git fetch -p
刷新远程信息。
实际上 REMOTE_NAME BRANCH_NAME
是 REMOTE_NAME REMOTE_BRANCH_NAME:LOCAL_BRANCH_NAME
的简写,并默认远程仓库和本地仓库 branch 的名字相同。实际开发中保持他们名字相同即可,只要用到简写就好。
规范
当你要负责某项功能的时候,例如地图读取器 loader,新建一个 branch feature/loader
,并且在其中进行修改。当完成 并 且 测 试 没 有 出 锅 后在 github 上面向团队仓库提交一个 feature/xxx
branch 的 pull request,团队仓库管理会把 feature/xxx
合并到团队仓库的 feature/xxx
,然后将团队仓库的 feature/xxx
合并到 main
branch。在 pull request 里面尽量写清楚一点,以免你走后洪水滔天。
注意到当团队仓库更新时你的仓库的 main branch 的版本落后了。你可以使用 git fetch upstream main
把团队仓库的 main branch 弄到你的本机,然后把你私人仓库的 main
branch 和 feature/xxx
merge 到团队仓库的 main
branch 以与团队仓库同步,可以看上面 blog 里面的 合并分治 教程 和 多人协作获取最新进度 教程。
关于代码的格式,我也不知道啥格式,反正 VS 自己有个代码格式化器,交之前格式化一下就好。
多个人搞一个 feature 的话,只在一个人的私人仓库开 branch 就好了,仓库可以设置那些人可以提交 commit。