(编辑问题:)
我在github中有2个存储库,这些存储库是http://github.com/abc.git和http://github.com/xyz.git。
现在,存储库“abc.git”是该项目的主要回购。经过大约一个月的开发,我们发现通过制作可重复使用的代码可以做得更好。所以我们决定为一个可重用的通用代码库创建一个新的repo,即xyz.git。所以我们现在有了
现在我们重新使用的代码基本上是我们添加了一些新文件,删除了一些旧文件并在xyz.git中进行了修改。此代码最初来自abc.git的“我们要重写”代码。
到目前为止,我希望如此好:)
现在我们有2个选项
创建一个新的repo说project.git,添加一个新的远程仓库,即xyz.git,并合并并从abc.git中选择我们需要的文件。所以在命令方面如下
现在我们已经用xyz.git + README填充了project.git,并开始从abc.git中挑选樱桃的艰苦工作(我想避免,但我也错过了所有旧历史)
我认为我可以做的是删除abc.git中的所有文件并带回xyz.git。在代码方面有以下方式。
git push origin master(现在abc.git没有文件,但它有.gitmodules和.git)
git remote add xyz git@github.com:xyz.git
这是冲突开始的地方..有两种类型的冲突(外部模块,因为一些常见的外部模块和一些文件)。
我考虑过第三个选项,即只需执行git log -l并将其转储到文本文件中,然后使用一些查看器来获取历史记录。
坦率地说,我只想尽可能地保存历史,樱桃采摘很无聊,但它可以做到。另一个问题是,如果您需要删除回购,如何保存回购日志?唯一的理由是我希望保持一个已经废弃的回购活动,这是因为历史和变化。
感谢。
答案 0 :(得分:0)
我完全猜测,因为你很难准确地说出你在做什么。但我的猜测是你的删除与远程repo的更改历史冲突。线路在遥控器中被修改并在您的线路中被删除。 Git不知道该怎么做,所以它把它标记为冲突。
如果我们知道你的目标是什么,我认为你的问题会更容易回答。
答案 1 :(得分:0)
您的编辑效果更好,但很难知道您想要做什么。例如:如果xyz是一个有效的(完全功能)进化而不是abc,我仍然不清楚为什么你要挑选樱桃。
如果您想要的是合并两个存储库,那么没有历史丢失,那么......就这样做。你可以在那里住两个独立的分支,而不会在另一个脚上留下任何标记。例如(考虑到这两个因为它们位于github的repo页面之上):
$ git clone git://github.com/rails/rails.git monster
$ cd monster
$ git fetch git://github.com/madrobby/scriptaculous.git master:old
$ git branch
* master
old
$ ls
[ looks like rails ]
$ git checkout old
$ ls
[ looks like scriptaculous ]
$ git checkout master
[ looks like rails again ]
如果你想要的是合并历史基线,即使xyz成为abc的后代,它在git filter-branch
手册页(搜索--parent-filter
)中有具体记载,你只想使用你的abc “老”分支作为嫁接点。
谈到嫁接点,看起来他们可能会直接用它来做这件事,但我对这个概念并不熟悉。有关详细信息,请查看this discussion。