我几周前从他们的主页上下载了CakePHP 2.0 zip包,并开始使用它编写一个网站。现在我想将它升级到CakePHP 2.0.4。我知道我可以下载类似的软件包并手动替换文件,但我认为我应该合并GitHub的版本,以免将来给我带来麻烦。我试过了
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 :(得分:0)
我假设您下载了CakePHP 2.0.0,解压缩后再运行git init
,git add .
,git commit
等内容来创建存储库。也许你做了一些编辑(如果你没有,只是抛出它,克隆github repo并从中工作)。
重要的是你有一个从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
然后做转折。
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
想想一个rebase,比如将每个提交保存为补丁并将它们重新应用到另一个分支。你取a1和b1之间的差异,并在w1之上提交一个新的提交b2。然后diff b1 vs 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)是查看回购的绝佳方式。