为了 xv6 而连接两个远程 git 仓库
2021-06-04 08:54:49

最近发现 xv6 实验的远程仓库在 MIT 特定的服务器里,且每个实验在不同的分支,我说做实验时咋总感觉少实验代码。平常我都是将本地仓库 git 到 GitHub 中的仓库,现在的需求则变成了跟踪 MIT 的远程仓库,切换分支,拉取代码并且在做完实验后推送到我的 GitHub 中

设置远程仓库

首先执行命令git remote -v,查看现有的远程仓库

1
2
3
~/xv6(master) » git remote -v
origin https://github.com/xQmQ/xv6.git (fetch)
origin https://github.com/xQmQ/xv6.git (push)

可用看到有一个 GitHub 的仓库,别名是origin,也是我用来保存的仓库

接下来添加 MIT 的远程仓库,命令是git remote add,设置别名为labs

1
2
3
4
5
6
7
~/xv6(master) » git remote add labs git://g.csail.mit.edu/xv6-labs-2020

~/xv6(master) » git remote -v
labs git://g.csail.mit.edu/xv6-labs-2020 (fetch)
labs git://g.csail.mit.edu/xv6-labs-2020 (push)
origin https://github.com/xQmQ/xv6.git (fetch)
origin https://github.com/xQmQ/xv6.git (push)

接下来就是有两个远程仓库了,origin用来推送,labs用来拉取实验的分支

查看仓库分支

执行git branch -a,查看当前仓库的所有分支

1
2
3
4
5
~/xv6(master) » git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
(END)

可用看到现在只有origin里面的分支,所以需要用git fetchlabs中的分支拉下来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
~/xv6(master) » git fetch labs
remote: Enumerating objects: 7008, done.
remote: Counting objects: 100% (7008/7008), done.
remote: Compressing objects: 100% (3612/3612), done.
remote: Total 7008 (delta 3650), reused 6526 (delta 3366)
接收对象中: 100% (7008/7008), 17.19 MiB | 235.00 KiB/s, 完成.
处理 delta 中: 100% (3650/3650), 完成.
来自 git://g.csail.mit.edu/xv6-labs-2020
* [新分支] cow -> labs/cow
* [新分支] fs -> labs/fs
* [新分支] lazy -> labs/lazy
* [新分支] lock -> labs/lock
* [新分支] master -> labs/master
* [新分支] mmap -> labs/mmap
* [新分支] net -> labs/net
* [新分支] pgtbl -> labs/pgtbl
* [新分支] riscv -> labs/riscv
* [新分支] syscall -> labs/syscall
* [新分支] thread -> labs/thread
* [新分支] traps -> labs/traps
* [新分支] util -> labs/util

好多实验分支 😅

然后再看一下本地仓库的情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
~/xv6(master) » git branch -a
* master
remotes/labs/cow
remotes/labs/fs
remotes/labs/lazy
remotes/labs/lock
remotes/labs/master
remotes/labs/mmap
remotes/labs/net
remotes/labs/pgtbl
remotes/labs/riscv
remotes/labs/syscall
remotes/labs/thread
remotes/labs/traps
remotes/labs/util
remotes/origin/HEAD -> origin/master
remotes/origin/master
(END)

这时候切换到labs/syscall,获得实验代码

1
2
3
4
~/xv6(master) » git checkout syscall
分支 'syscall' 设置为跟踪来自 'labs' 的远程分支 'syscall'。
切换到一个新分支 'syscall'
~/xv6(syscall) »

也找到了相关的代码

1
2
3
~/xv6/user(syscall) » find trace.c sysinfotest.c
trace.c
sysinfotest.c

现在就可以在labs/syscall这个分支上工作