当我想从git repo中删除所有文件然后添加新文件时,如何避免冲突

时间:2009-09-08 13:52:52

标签: git

(编辑问题:)

我在github中有2个存储库,这些存储库是http://github.com/abc.githttp://github.com/xyz.git

现在,存储库“abc.git”是该项目的主要回购。经过大约一个月的开发,我们发现通过制作可重复使用的代码可以做得更好。所以我们决定为一个可重用的通用代码库创建一个新的repo,即xyz.git。所以我们现在有了

  1. abc.git(我们想重写的非常项目特定代码+外部模块+代码“)
  2. xyz.git(代码“我们可以重复使用”+外部模块)
  3. 现在我们重新使用的代码基本上是我们添加了一些新文件,删除了一些旧文件并在xyz.git中进行了修改。此代码最初来自abc.git的“我们要重写”代码。

    到目前为止,我希望如此好:)

    现在我们有2个选项

    1. 创建一个新的repo说project.git,添加一个新的远程仓库,即xyz.git,并合并并从abc.git中选择我们需要的文件。所以在命令方面如下

      • 整个github新的repo创建过程并添加一个README文件。 (这是我的project.git来源)
      • git remote add xyz git@github.com:xyz.git
      • git checkout -b xyz
      • git pull xyz master
      • git status
      • git checkout master
      • git merge xyz
      • git commit -a
      • git push origin master
    2. 现在我们已经用xyz.git + README填充了project.git,并开始从abc.git中挑选樱桃的艰苦工作(我想避免,但我也错过了所有旧历史)

      1. 我认为我可以做的是删除abc.git中的所有文件并带回xyz.git。在代码方面有以下方式。

        • git rm -r *(这是我的abc.git来源)
        • git commit -m
        • git push origin master(现在abc.git没有文件,但它有.gitmodules和.git)

        • git remote add xyz git@github.com:xyz.git

        • git checkout -b xyz
        • git pull xyz master
      2. 这是冲突开始的地方..有两种类型的冲突(外部模块,因为一些常见的外部模块和一些文件)。

        我考虑过第三个选项,即只需执行git log -l并将其转储到文本文件中,然后使用一些查看器来获取历史记录。

        坦率地说,我只想尽可能地保存历史,樱桃采摘很无聊,但它可以做到。另一个问题是,如果您需要删除回购,如何保存回购日志?唯一的理由是我希望保持一个已经废弃的回购活动,这是因为历史和变化。

        感谢。

2 个答案:

答案 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