温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
嗨,淡兄,周杰伦都出新专辑了,你咋还不更新啊?真的打算半年一更啊,好像确实是这样,要不择日不如撞日,今天聊聊好啊,那聊些啥呢?最近搞的事情需要实现两个应用项目的代码合并,逻辑就完全参照git me的基本原则,那就聊聊GI me get mark我道时经常用,不过却从未关心过他内部是怎么实现的,那你跟我讲一下它的工作原理呗。的基本原则是微微三条路啥东东?简单讲就是有三个分支,假设就叫AOB,其中N和B都来自于用,然后呢,现在和B要进行合并,假设你当前在意分制,然后运行bit me,那么合并结果是根据AOB之间的内容比较结果分析得出的。比较逻辑是什么呢?非常简单,只要AOB任意两个的内容一致。
01:06
就放弃熬的内容如果都不一样,就冲突,只要我还是列举下所有的场景,然后你就会明白。懂了,就是以O为基准来判断该保留哪个分支的内容,如果判断不了,就提示冲突自行解决。没错,前面是假设三个分支要对比的文件都存在,那如果某个分支的文件被删除过,有新文件该怎么处理呢?你可以把缺少的文件当做空内容文件来处理,这样说好像也不太准确,我还是再列举一下场景吧,假设要比较各分支的DXT文件。
02:21
漂亮,这下我完全搞懂了合并逻辑了,但我还有一个疑问,对比文件内容的时候,是一行一行内容对比的吧?那是当然,那如果我加多一行故意错开,岂不是都对不上了?当然是不会犯这样低级的错误的。在实现div的时候,是利用了最长公共子序列的算法,叫CS。假设有两个字符串SD和S2,那它们的最长公共词序列就是abcd,但这只是字符串哦,该怎么应用到文件内容的Di上呢?把头转一转,每个方块代表文件的一行内容是不是就一样?是哦,通过LCS的算法,就算我故意错开了行,也不影响比较,因为相同内容的行总是能对得上是的。
03:15
不过这里只是两个文件的比较,而fe UA是三个文件内容的比较,要稍微多做点,是能讲的具体一点吗?假设我们要合并和B分支的DT文件,先使用o yes来计算三个分支该文件内容最长公共子序列,然后以这些子序列对各个文件的内容行进行分割,分割的块就是不相同的部分,对于这些块的内容进行垂位分析,即可得出这些内容款合并后的结果。嗯,这么一演示就全明白了。要不是我买了周杰伦的专辑才想起你,也好久没更新了,也就不会有今天这一出了。感谢提醒,合作愉快,真快,又到了说再见的时候了,长得最好看的你要不点赞成关注加收藏支持一下呗。
我来说两句