在过去的几天里,我一直试图通过在类名的repo下单独嵌套来合并类的赋值repo。到目前为止,我发现的或建议给我的大多数资源都是为了将两个对等转发合并为一个。这不是我想要的。我的目标是在本地和远程的类repo下嵌套赋值repo(据我所知,子模块仍然是远程不同的repo,这是我不想要的(:
现在:
- 分配1回购
- 转让2回购
- 转让3回购
所需:
- 类回购
- 赋值1代码,分支,提交
- 赋值2代码,分支,提交
- 赋值3代码,分支,提交
我尝试使用本文的说明,对作业2&3的repos,但只有master
分支被拉下,当我运行~/class-repo/assignment-#-repo$ git pull
时;则返回错误:CCD_ 3。
~/class-repo$ git merge --continue
没有修复此问题,它返回:error: Committing is not possible because you have unmerged files
。
~/class-repo$ git fetch --all
没有为每个分配回购撤销所有分支。
如何在以这种方式嵌套每个赋值回购的提交和分支时保留它们?我一直在碰壁,所以如果不可能的话,我理解。
需要明确的是,如果你愿意做出一些妥协,你想要的是可能的。首先,我们可以将所有内容捆绑到一个存储库中。
假设我有三个现有的存储库assignment1
、assignment2
和assignment3
。
我可以创建一个聚合存储库:
$ git init all-assignments
然后将三个单独存储库的历史导入到这个集合中:
$ cd all-assignments
$ git remote add work1 .../url/to/assignment1
$ git remote add work2 .../url/to/assignment2
$ git remote add work3 .../url/to/assignment3
$ git remote update
然后运行此脚本从所有远程分支创建本地分支:
git remote | while read remote; do
git for-each-ref --format='%(refname)' refs/remotes/$remote/ |
while read ref; do
name=$(sed "s|refs/remotes/$remote/||" <<<"$ref")
echo $name
git branch $remote-$name $ref
done
done
这给我们带来了这样的东西:
$ git branch
work1-master
work1-super-nifty-feature
work2-master
work2-update-before-final
work3-main
work3-quickstart
work3-hackathon
我们没有您想要的文件组织,但我们确实在一个地方拥有存储库历史记录,并且我们可以根据需要切换分支以查看内容。
如果你真的想把所有文件同时放在同一个地方,你可以用git subtree
做一些糟糕的事情。如上所述,添加所有遥控器并运行git remote update
,然后:
git remote | while read remote; do
git for-each-ref --format='%(refname)' refs/remotes/$remote/ |
while read ref; do
name=$(sed "s|refs/remotes/$remote/||" <<<"$ref")
echo $name
git subtree add --prefix $remote/$name $ref
done
done
这导致:
.
├── work1
│ └── master
│ └── super-nifty-feature
├── work2
│ ├── master
│ └── update-before-final
└── work3
├── main
├── quickstart
└── hackathon
所以现在所有的东西都在一个地方,但都在同一个分支中,以前的每个分支现在都在自己的目录中。