考虑以下存储库:
你可以看到我们有7个修订版(计算C0,初始回购状态)。这就是我要完成的任务:我们想要复制存储库,但只包括修订版C0到C3。
从概念上讲,这对我来说就像一个git clone操作,但仅限于前4个版本。我们想要一个新的存储库,它保留有关提交C0,C1,C2和C3的历史信息,但在此之后排除所有内容。
我最初认为使用“深度”参数的git clone会起作用,但是这可以让你从最新版本开始并向后工作,对吗?我想做的是从最早的版本开始,然后进行3次修订。
那么,我认为可以将git clone与revision selection一起用于一系列提交。我尝试了一些不同的范围选择,包括git clone {url} c0...c3
。但是git只是将范围解释为目标文件夹,可以创建一个名为c0...c3
的文件夹,并将存储库克隆放在该文件夹中。
是否可以复制存储库,只能通过 n 获取修订0?就我而言,没有分支可以处理,它只是一个直线回购。
我们将从C3的回购代码开始创建一个新产品。它永远不会被合并回源项目,因为它将完全分化。如果两个项目之间存在任何代码共享,就git而言,它将是“离线”。
我知道我们可以分拆掉C3,但我们非常希望将回购分开。话虽如此,也许分支是创建一个干净回购的解决方案的一部分?分支,克隆分支,然后删除不在祖先分支中的所有内容?但我不确定我们是否可以或如何完成删除。
背景:知识产权纠纷。我们知道C3和之前的所有内容都是“干净的”IP,并且有关C4和前进的所有权的问题。我们希望保留当前项目(并让各方对此提出异议),然后从已知的“干净”提交中继续前进。如果我们只是分支并继续在同一个回购中工作,那对于知识产权纠纷来说有点“太贴近了”。我们可以做的就是将自己从C4和前进中分离出去对我们有益。
答案 0 :(得分:1)
您始终可以通过任何特定提交创建新分支。
git checkout -b new_branch <sha-of-C3>
现在,这个new_branch
完全干净。
创建一个新的仓库很简单 - 只需在github上创建一个新的仓库(比如说https://github.com/Josh/newrepo
),然后在现有仓库中将此仓库添加为远程仓库,如下所示:
git remote add newrepo https://github.com/Josh/newrepo
现在,在此new_branch
new_repo
git push newrepo new_branch:master
这将在master
上创建一个分支newrepo
,与new_branch
相同。
一旦您确认一切顺利,您就可以删除现有的仓库,并从newrepo
的新克隆开始。