为了在学校的高强度课程《逆向工程原理 Principles of Reverse Engineer》存活下来,站主决定开启一个系列笔记,并同步到博客上。
目标是将课程以及实验的要点以人话讲清楚,整理一些便于查询的cheatsheet,并尝试拓展学习一些有趣的内容,以便同学和自己参考。(如果有同学看的话(´_ゝ`))
本期作为第0期,主要记录课程的基础设施使用方法。
在 PoRE 中使用 git
本课程所有的 slides 获取、作业获取以及作业提交都通过 GIT 完成。
GIT 作为一个分布式的版本控制软件,自然有强大的文件同步功能,能在客户端和服务器之间同步文件。
完整的 GIT 系统是经典的客户端-服务端架构,服务器上存储了 GIT 仓库。
我们经常使用的 github,提供了 GIT 仓库的托管服务。而在PoRE课程中,我们使用的是课程搭建的 GIT 服务器。
在课程 GIT 服务器上,有如下一些仓库(repository,简称repo):
- release:LAB 的分发版本
- pore_2130xxx0xxx:每个人的个人仓库,主要用于提交
- slides:存放课程的 slides
在 PoRE 中使用 git 的完整流程如下:
- 和TA注册公钥,服务器会允许你使用私钥来登录服务器的 gitpore 账号
- 使用
git clone
下载自己的个人仓库(目前是空的) - 使用
gir remote add
将 release 仓库添加至远程仓库列表中,并命名为 release
(以下步骤为每次 Lab 的流程) - 使用
git pull release master
来让本地文件与 release 仓库的 master 分支同步(下载最新作业分发) - 完成Lab,多使用
git commit
和git push origin master
来在本地、远程存档。其中 origin 是指我们位于服务器的个人仓库。 - 在最后的提交时,使用
git tag 'submit'
来标记当前 commit 为最终版本。
此外,未来常用的操作还有:
0. 一键add:git add <path_of_root_dir>
- 撤回本地 commit,并且不还原文件:
git reset --soft HEAD^
- 撤回远程 commit,并且不还原文件:上一步基础上将本地强行同步至远程仓库
git push origin master --force
- 删除本地 tag:
git tag -d <tagname>
- 删除远程 tag:上一步基础上
git push origin :refs/tags/<tagname>
指定 git 使用的 SSH 密钥
如果需要在多个设备上使用同一对密钥,或者设备迁移之后要迁移密钥,或者想要同时使用多个密钥,可以通过如下的方式为不同的主机设置不同的密钥(这其实不是 git 的配置,而是 ssh 的配置):
进入 ~/.ssh/
,如果没有 config 文件的话就创建一个 config 文件(文件名为 config)。
config 的规则是从上至下读取条目,若找到匹配的Host就使用配置,找不到就默认。具体规则详见 man page。
config 的条目格式如下:
1 | Host <NickName> |
具体来说,本课程的远程 git 服务器可以这样设置:
1 | Host PoRE |
在设置完毕之后,再从服务器 clone repo 时,就可以从原先冗长的:git clone gitpore@106.15.186.69:slides.git
简写为:git clone PoRE:slides.git