2011-12-01 80 views
0

几周前我从他们的主页下载了CakePHP 2.0 zip包,并开始用它编码一个网站。现在我想升级到CakePHP 2.0.4。我知道我可以下载类似的软件包并手动替换文件,但认为我应该合并GitHub的版本以便在将来为我节省麻烦。我试图在Git中合并文件

git remote add github git://github.com/cakephp/cakephp.git 

然后

git merge tags/2.0.4 

但没有奏效。所有文件都有冲突。例如:

Auto-merging lib/Cake/View/Scaffolds/form.ctp 
CONFLICT (add/add): Merge conflict in lib/Cake/View/Scaffolds/form.ctp 

你能告诉我如何正确地做到这一点吗?我是git,CakePHP和MacOSX的新手!谢谢。

+0

你说你从一个zip文件中下载了CakePHP,但后来谈到了合并到一个git仓库。这个存储库是什么?它是如何形成的? – Schwern

+0

你自己对你的蛋糕版本做了什么改变吗?如果不是,我只是做一个'git fetch; git checkout 2.0.4'(如果你有一个git克隆与cakephp在第一位)。 –

回答

0

我打算假设您下载了CakePHP 2.0.0,解压缩后运行如git init,git add .,git commit来创建一个存储库。也许你在上面做了一些编辑(如果你没有,就把它扔掉,克隆github回购,并从中工作)。

重要的是你有一个从zipball开始的仓库。

现在,当你添加github remote并获取时,github简要地警告你“警告:没有共同的提交”。这意味着Github上的存储库和本地存储库之间没有提交根。

a1 -- b1 -- c1 -- d1 -- e1 -- f1  master 

r1 -- s1 -- t1 -- u1 -- v1 -- w1  github/tags/2.0.4 

当它进行合并时,两个存储库之间没有关系。冲突是因为他们似乎添加具有不同内容的相同文件。

最简单的方法就是rebase您在2.0.4标签之上的工作。您可以通过重新绑定一切,除了第一次提交您添加zip文件。假设你的第一个提交是a1,你的分支是主控。

首先,在你的主人制作一个标签。如果出现可怕的错误,您可以恢复到该标签。

git tag tmp/master master 

然后做rebase。

git rebase --onto tags/2.0.4 a1 master 

每个提交将被重写为2.0.4版本的提交。

a1 -- b1 -- c1 -- d1 -- e1 -- f1  tmp/master 

r1 -- s1 -- t1 -- u1 -- v1 -- w1  github/tags/2.0.4 
           \ 
           - b2 - c2 - d2 - e2 - f2 - g2 - h2 master 

想像一个基调像将每个提交保存为一个补丁并将它们重新应用到另一个分支。你取a1和b1之间的差异,并在w1之上提交一个新的提交b2。然后比较b1与c1,并在b1顶部作出c2。等等。

如果您的第一次提交不是未改变的zip文件,则全部不会丢失。你可以使用相同的程序,但你必须恢复第一个工作。首先,您需要在第一次提交和干净的2.0.0之间提取差异。

git diff tags/2.0.0 a1 > first_commit.patch 

然后关闭2.0.4标签的新分支来保存您的新作品。

git checkout tags/2.0.4 
git checkout -b newmaster 

应用并提交该补丁。

git apply first_commit.patch 
git commit -a 

现在newmaster包含2.0.4加上你的第一点工作。

现在rebase掌握像以前一样,但在newmaster之上,而不是直接在2.0.4上。

git tag tmp/master master 
git rebase --onto newmaster a1 master 

您可以删除newmaster。

git branch -d newmaster 

PS这一切都变得更加清晰,如果你能想象的仓库。在OS X上,GitX(L)是查看回购的绝佳方式。

+0

看起来这是答案。我不知道“rebase”命令。我会试试这个,稍后再回来。谢谢! – pckben

+0

@pckben'rebase'是Git最强大的命令之一。这也是对新来者最有争议和最迷惑的命令之一。保持你的脚趾,并使用Gi​​tX视觉上遵循它在做什么。 – Schwern