git 历险记

来源:互联网 发布:米德尔顿 知乎 编辑:程序博客网 时间:2024/03/29 01:43

我要总结一下这两天遇到的一个案例,让我郁闷了两天呀。

第一天前半部分还是顺利的,我通过自己掌握的git 知识完成了3笔提交。nice.

开始编译,编译报错了。shit

请教其他人。检查结果是没有完全按照patch的说明操作。即patch里面还需要删除一些文件。OK,继续。

我作了一个选择,通过rebase的方法将2笔commit amend了。不错呀,终于知道怎么结合rebase和 amend来修改历史commit了。nice,happy.

之后呢,我将本地修改过的commit dcommit到 svn,结果是不幸的,好像是报了conflict,而且怪怪的。解决不了。先放放吧。

我先作重点工作,将vendor的往trunk上作cherry-pick,也不行。干脆trunk上把原来提的三笔清干净了。把新的三笔合过来了。编译也过了。OK。

现在我又回头来处理vendor这边 local 和 svn 同步的问题了。哼,哼。

尝试git svn rebase, git svn fetch 都不行。 git svn rebase 报了一些莫名的conflict,与我的修改不一样呀。 git svn fetch则报 svn 莫名error, "SVN报错:方法 REPORT 失败于 /svn/products/!svn/vcc/default : 200 OK",查看了网络的文章,说是svn 库文件有问题,需要删除svn的指定的文件和目录。妈妈呀,这么麻烦,况且我也没有svnadmin的权限。

整理思路,我有三个选择,方法一是网络上找方法,方法二是把svn上的三笔老的删掉,方法三是把svn上的重新取下来,新增commit的方式修改一遍,再重新dcommit.

第1种方法是到stackoverflow上提了问题。可能是奥运会吧,等了老一活儿才有人答复。

回复如下:

First thing, never rebase commits that you have pushed back to repository when using git. Although you are working with git-svn,rebase these commits is not a good idea. Why? Becauserebase alters the commit history, this is ok when you just work in local.

In your case, you can run git svn fetch/rebase and resolve any conflict, thendcommit it back

需要警醒呀,以后别随便rebase了,因为rebase会引起commit号的变化,这样导致远程和本地对不上号,就等着折腾吧。但他说的方法我用下来不适合。


第2种方法涉及到svn的历史操作,也要svnadmin的权限,而我对svn的操作不熟悉,为下下策。

只能选择第3种方法了。

但第3种方法我用mt6577_verify目录的git fetch后结果报了上述莫名的错。

怎么办呀,于是我想重新clone一个吧。我去打了2个多小时球,回来一看还是没有clone好,等到下午6点钟还没好,实在等不下去了。现在clone服务器上一个东西的代码太大了。服务器上有太多的代码。terrible..

走投无路之下,我请教了同事。

同事的建议还是git svn fetch 或 git svn rebase,在之前可以reset 到一个老的节点。

这个给了我启发,是不是我想当然以为mtk6577_verify目录是老的?我仔细看了 mtk6577_verify下面的git log,妈呀,果然有一笔新的commit在里面,之前没认真看,以为都是老的。那之前报的错应该是因为这个原因吧。omg,粗心害死人呀!

赶紧reset回老的,rebase svn,终于没报错了。然后把我的修改单独提了一笔并dcommit到svn.终于好了。哈哈哈。

还有点小担心,现在vendor和trunk上的补丁commit不同,后续会不会出问题呀?

但不管怎样,以后真得注意local 和 remote的 commit号问题了,尽量保证他们可以轻松rebase。

折腾了一天多,压力很大呀。总结一下吧:

1)还是要细心,不细心可能会耗费大量的时间在一个小细节上 !

2)对git的一些知识和原理还是不够清晰,有空还是得好好了解下 git svn , rebase的内部过程。

3) 还有要有强大的信心,我一定可以找到解决方案的。

4)遇事不急,想好方案和思路,试下去。

最后表扬一下自己:自己做事情还是有思路的,有压力时要为自己加油鼓劲哦!