Lab 0 - Setup
0 写在前面
在暑假结束之际,再开新坑(
这种多门课并行的做法……其实我也不知道怎么样,毕竟暑假其实只有在学61B和CSAPP,总之,今天既然配好环境了,开学后就学起来吧,说太多倒是不如勤奋些了
课程网站是用的csdiy上的24fall的备份网站
Lab 0主要是配置一些东西,这次以Windows为例,由于61C好像用不了auto grader,其实配起来挺简单的,但我还是搞了比较久(
文章没有提到的地方,建议查看61C的Lab 0文档,本篇文章只作为配置的辅助,除了GitHub Setup部分跟官方课程文档略有区别外,其他内容和课程文档一致,也可以向ai提问尝试解决,
1 Installing Software
1 | java -version |
1 | python --version # 也可能是python 3 |
2 GitHub Setup
先查看已有的git配置
1 | git config --global user.name |
如果没有配置,可以设置
1 | git config --global user.name "你的名字" |
user.name、user.email:记录每次提交的作者身份。--global:作为当前操作系统用户的默认配置,应用于其各个仓库。- 名字不必与 GitHub 用户名相同;邮箱可以使用 GitHub 已验证邮箱或隐私邮箱
2.1 配置 GitHub SSH 认证
设置GitHub的流程跟61B其实相似,这里用SSH密钥向GitHub证明身份,以便访问私有仓库、推送代码
先测试已有认证
1 | ssh -T git@github.com |
如果认证没成功,先检查
1 | ls -al ~/.ssh |
如果没有可用的现成密钥,再生成
1 | ssh-keygen -t ed25519 -C "你的邮箱" |
ssh-keygen:生成密钥。-t ed25519:选择密钥算法。-C:添加备注,邮箱只是便于辨认的标签。
查看公钥
1 | cat ~/.ssh/id_ed25519.pub |
将完整输出添加到 GitHub 的 Settings → SSH and GPG keys → New SSH key,类型选择 Authentication Key
再测试
1 | ssh -T git@github.com |
结果类似
1 | Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access. |
这里一共有两次身份确认
- 你的电脑确认对方是GitHub
- GitHub根据密钥确认你的账号
2.2 建立自己的仓库
在GitHub上创建一个空仓库,在本地创建一个文件夹,假设路径是/e/code/cs61c
1 | cd /e/code/cs61c |
这几条命令创建课程目录、克隆官方实验仓库并进入它。clone 下载的不只是文件,还包括提交历史
下面我们设置两个远程别名
1 | git remote rename origin starter |
clone默认把下载来源叫作origin。rename把61C官方仓库的本地别名改为starter。remote add将自己的仓库地址记为origin,此时尚未上传。push -u上传本地main,并设置它跟踪自己的origin/main(详细原理见61B的Lab/HW文章)
3 Fizzing and Buzzing
接着跟着课程文档做练习,这个练习就是模拟了这么个过程
1 | 你的电脑:版本 A |
这时如果提交修改并push,就会
1 | ! [rejected] main -> main (non-fast-forward) |
意思是push失败,远程已经有别人提交的新版本了,但是你本地仓库并没有这个提交的新版本。你要先把它整合进来,再上传,避免丢掉对方的工作
所以我们先拉取最新的远程仓库
1 | git pull --no-rebase origin main |
--no-rebase 明确使用 merge
这时又会出现错误
1 | Auto-merging lab00/code.py |
意思是远程仓库和本地仓库的提交都对code.py做了改变,而且可能改了同一个地方,导致Git不能自动地合并提交,可以检查下git status
1 | git status |
解释如下
| 输出 | 意思 |
|---|---|
On branch main |
你当前在本地 main 分支 |
have diverged |
本地和远程的历史分叉了 |
have 1 and 1 different commits each |
你有 1 个远程没有的提交,远程也有 1 个你没有的提交 |
You have unmerged paths |
有文件尚未完成合并 |
both modified: code.py |
双方都修改了 code.py,其中的冲突需要你决定如何处理 |
no changes added to commit |
目前还没有暂存可以提交的改动;不代表你的修改消失了 |
打开文件,处理冲突,并删除冲突标记
1 | <<<<<<< HEAD |

不过这个练习会把之前clone进来的其他lab文件夹给弄没,所以这次提交、push后还需要
1 | git status |
fetch:获取老师的最新提交,更新本地记录。merge:把老师最新代码整合进自己的分支。
如果 lab00/code.py 再次冲突,保留正确的实验成果,整合必要内容、删除标记、测试,再 add 和 commit, push


