github - git里有没有办法正确合并两个仓库的代码

查看:197
本文介绍了github - git里有没有办法正确合并两个仓库的代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我从某仓库A直接download了一份代码,然后自己建立了仓库B,注意,不是fork出来的,当时图方便,结果我现在希望从仓库A里同步一下作者最新的代码,然后就发现网上的同步办法没有用
https://segmentfault.com/q/10...

我用的这个方法,先是报fatal: refusing to merge unrelated histories

google了以后我就加了--allow-unrelated-histories参数

这下倒是能跑起来,然后合并源码的结果哭笑不得,git似乎无法识别这种情况下的源码差别,比如有个代码文件我完全没改过,是源作者自己更新了
我的版本是
111
222
作者版本是
111
222
333
理论上合并应该直接把333合并到我的源码就行了,但是,git这种情况里认为我的内容和作者的内容是完全不同的两份,于是它把代码变成了这样

<<<<<<<<<head
111
222
========
111
222
333
>>>>>>>>>>aasdasfsdfsdf

为啥会这样呢,没有解决办法吗,只有fork有办法同步源仓库吗,非fork的哪怕改动不大也没法同步?

解决方案

在github上下载的源码默认不是git仓库,所以你是将下载下来的代码初始化为一个git仓库,这样的仓库是没有任何提交历史的。如果两个仓库没有相同的历史,是无法用git pull进行合并到远程仓库的,所以刚开始你用的那种方法会出现这样的错误:

refusing to merge unrelated histories

但是你使用--allow-unrelated-histories选项强制进行合并,的确是解决了这个问题。
但是,你后续出现的那个问题是很正常的,git并没有认为你的内容和作者的内容是完全不同的两份,只是二者产生了冲突,即在相同的地方出现了差异。遇到冲突,手动解决就可以了。而且据我猜测,之所以会产生冲突,很可能是windows换行符和Unix换行符不统一的原因(当然我们肉眼是看不出来的),这个就看你在git设置如何处理换行符了。也许远程仓库换行符统一使用的是Unix换行符(LF)或者windows换行符(CLF),而你恰好相反。关于在git设置如何处理换行符,可以参考github的官方帮助文档,当然网上也有很多资料。
另外,就像前面大神所说的,最好使用git clone命令直接克隆仓库,这样就可以保留仓库的历史提交,使用git pull命令就不会报错了。

这篇关于github - git里有没有办法正确合并两个仓库的代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆