每做新Lab可能都会要新加一些文件然后把自己之前实验的lab合并进来,那么怎么把文件从MIT6.828的远端仓库里fetch下来,并与之前的合并,就需要这样做:
由于之前为了把实验push到自己的远端仓库,不小心把MIT6.828那个给删了,现在得重新加上去,不过远程库的名字不能再使用origin
git remote add MIT6.828 https://pdos.csail.mit.edu/6.828/2018/jos.git
查看一下添加结果
很nice嘛,如果想删掉远程库的话,可以用git remote rm MIT6.828
,不过我才不删呢
然后使用git checkout -b lab2 MIT6.828/lab2
失败了。。。
这个时候应该git fetch MIT6.828
to make sure MIT6.828 is fetched:
然后再使用git checkout -b lab2 MIT6.828/lab2
,这次总可以了把,又fatal。。。
原来我之前乱搞已经添加了一个lab2的分支,删掉再来:
git checkout master
git branch -D lab2
git checkout -b lab2 MIT6.828/lab2
这样就ok了,再git merge master
,把之前的lab1的修改合并过来
可以看到和Lab2要求的一样,多出了5个文件,真是不能捉急呀
Lab开始
第一步,git fetch MIT6.828
确保可以获取资源
git fetch MIT6.828
第二步git pull
,让MIT6.828远端库更新本地库。
git pull
结果:Already up-to-date.
第三步,新建一个分支
,并且从MIT6.828获取对应的LabN资源到该分支。一般会报错,让你重新commit一次,就算你之前的版本已经commit了,并且handin到该上传的网页上。
git checkout -b labN MIT6.828/labN //N改成你要fetch的那个Lab
结果:
error: Your local changes to the following files would be overwritten by checkout:
kern/trap.c
Please, commit your changes or stash them before you can switch branches.
Aborting
查看一下新分支是否创建成功,果然没有。。。
git branch //查看现有分支
结果:
lab2
* lab3
master
只好又commit了一次
git add .
git commit -am "commit before fetch Lab4"
结果:
[lab3 949ffa2] commit before fetch Lab4
1 file changed, 3 insertions(+), 2 deletions(-)
然后再一次checkout创建新分支:
git checkout -b lab4 MIT6.828/lab4
结果:
Branch lab4 set up to track remote branch lab4 from MIT6.828.
Switched to a new branch 'lab4'
成功之后就会发现多了好多文件,就是Lab中提示的那些新文件
第四步,就是合并你之前的代码到这个新fetch下来的代码中,不出意外,又得commit一次才能merge
成功
git merge lab[N-1] //lab[N-1]指代上一个分支,比如我现在在lab4分支,想要合并lab3分支,git merge lab3
结果:
error: Your local changes to the following files would be overwritten by merge:
.dir-locals.el
.gdbinit.tmpl
...
user/testbss.c
user/user.ld
Please, commit your changes or stash them before you can merge.
Aborting
git commit -am "commit before lab4 merge with lab3"
[lab4 306a352] commit before lab4 merge with lab3
114 files changed, 0 insertions(+), 0 deletions(-)
git merge lab3
结果:
Auto-merging lib/printfmt.c
Auto-merging lib/libmain.c
Auto-merging kern/trapentry.S
Auto-merging kern/trap.c
CONFLICT (content): Merge conflict in kern/trap.c
Auto-merging kern/syscall.c
Auto-merging kern/pmap.c
CONFLICT (content): Merge conflict in kern/pmap.c
Auto-merging kern/monitor.c
Auto-merging kern/kdebug.c
Auto-merging kern/init.c
CONFLICT (content): Merge conflict in kern/init.c
Auto-merging kern/env.h
Auto-merging kern/env.c
CONFLICT (content): Merge conflict in kern/env.c
Auto-merging kern/console.c
Auto-merging inc/x86.h
Auto-merging inc/trap.h
CONFLICT (content): Merge conflict in inc/trap.h
Auto-merging inc/memlayout.h
Auto-merging conf/lab.mk
CONFLICT (content): Merge conflict in conf/lab.mk
Auto-merging GNUmakefile
Automatic merge failed; fix conflicts and then commit the result.
可以看到有很多不能自动合并的CONFLICT
(冲突),这些就需要自己去找到那些文件,然后把===HEAD ===labN
删掉就行,如下:
全部删完之后,能够make qemu
就算全部完成了,可以正式开始做lab了
Lab结束
第一步,把所有的修改add一下
git add .
//他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区
//包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
第二步 提交版本到本地仓库
git commit -am "Lab3 have done"
第三步 push到远端仓库
git remote -v //可以先查看下有哪些远端仓库
git push origin //开始push
//接下来会提示输入用户名与密码
Username for 'https://github.com': LoserAndSeeker
Password for 'https://LoserAndSeeker@github.com':
这样就可以了,打开GitHub查看一下:
第四步,完成了git操作,还得上传到MIT6.828指定的作业提交网站
先把你这个Lab的代码整个压缩,压缩名为labN-handin.tar.gz
,然后在命令行中输入make handin
,但我一般是失败的,所以我这样做只是为了得到那个网页网址( https://6828.scripts.mit.edu/2018/handin.py/ )而已。然后在Linux下用火狐打开,输入密钥(NORFTN9GQWFOTLNMWVX7J78D5XBKO427)后上传那个压缩文件即可