【SHELL】一个非常有趣的问题

原创 2016年06月02日 10:23:03

使用SHELL解决的一个问题

现在需要代码合并,从SVN上合并到GIT上,GIT上的代码头文件和源文件分布在不同的文件夹下,直接使用Beyond compare来比较的话,不是什么好的体验,非常麻烦。于是我在想有什么好办法能更快速的解决这个问题。

问题梳理:
- 文件夹名称发生变化
- 文件内容可能有变化,需要对比同步
- 文件名保持不变


终于想到一个相对简便的方法,先分别把需要对比的.h/.c/.cpp/.java全部从svn和git找出来,复制到其他文件夹下。

使用shell命令查找所有的源文件

使用下命令分别将git和svn上的代码,复制到不同的文件夹下:

#查找当前目录下所有的.c/.h/.cpp/.java文件,然后复制到test目录下
cd git
find . -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name ".java" | xargs -i cp {} ../testgit/

#复制svn代码
cd ../svn
find . -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name ".java" | xargs -i cp {} ../testsvn/

手工合并

使用Beyond Compare比较testgit vs testsvn,将testsvn中的修改合并到testgit中去

替换合并后的文件

将文件合并好后存于testgit中,而原文件位于git文件夹中的不同的目录下,如何合并进去呢?这里用到了shell脚本。如下所示:


#!/bin/sh

#同上,查找git中所有的源文件和头文件,将其重定向到文件/tmp/1.txt中,其中保存的是类似信息
#./resource_manager/bus/server/resourcemanager_bus_server.c
#./app_manager/am_main.c
#./app_manager/inc/am_api.h
#./app_manager/src/am_api.c

find . -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name ".java" 1>/dev/null > /tmp/1.txt

echo "now porcess 1.txt..."

#根据1.txt中的文件绝对路径,提取文件名,将对比后位于testgit中的文件复制到1.txt中指定的绝对路径处,实现文件替换
while read line
do
    #echo $line
    #获取文件名如am_api.c
    filename=${line##*/}

    #对比后更新的文件位置
    toCompareFile=../gcode/$filename
    #echo $toCompareFile

    #对比git 和 testgit中的代码,如果有差异则拷贝过去
    diff $line $toCompareFile 2>&1 1>/dev/null
    rc=$?
    #echo $rc

    if [ $rc -eq 1 ]
    then
        echo "$line is different, then copy it"
        cp -f $toCompareFile $line
    fi
done < 1.txt

rm -f /tmp/1.txt

echo "process finished..."

好了,大功告成!!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【SHELL】一个非常有趣的问题

使用SHELL解决的一个问题现在需要代码合并,从SVN上合并到GIT上,GIT上的代码头文件和源文件分布在不同的文件夹下,直接使用Beyond compare来比较的话,不是什么好的体验,非常麻烦。于...

一个非常有趣的QTcpServer多线程编程问题

Qt 4.6自带的threaddedfortuneserver是个简单明了的 Qt C/S网络编程server端程序的例子, 该例子演示了 QTcpServer与QThread配合的方法。 代码不多,...

一个非常有趣的显示文字程序

  • 2012年05月07日 22:09
  • 7KB
  • 下载

一个非常有趣的qt小实例

  • 2013年05月08日 22:50
  • 28KB
  • 下载

关于继承和接口的一个非常有趣的比喻

关于继承和接口的一个非常有趣的比喻   当使用继承的时候,主要是为了不必重新开发,并且在不必了解实现细节的情况下拥有了父类我所需要的特征。   但是很多时候,一个子类并不需要父类的所有特征,它可能...

海航陈峰回忆创业史:那是一个非常有趣的时代!

大家都知道创业是非常不容易的,创业成功后再守住成果那是难上加难,海航陈峰就做到了。其实,就我们旁观者想也会很艰难,海航陈峰回忆却说:那是一个有趣的时代!   在上世纪90年代,全国掀起了一股...

一个有趣的问题:ls -l显示的内容中total到底是什么?

当我们在使用ls -l的命令时,我们会看到如下类似的信息。 很多人可能对于第一行的total 12的数值并不是很在意,但是你是否想过,它究竟是什么意思? man中的说明,我们可以看出total的意...

一个关于浮点数的有趣的问题

问    Java表达式1/0和1.0/0.0的值是什么? 答      在计算机内部,整数的表示使用补码表示,当被除数为0时,执行该操作的处理器会产生除零异常,在Java语言层面,         ...
  • wzzhust
  • wzzhust
  • 2017年07月26日 10:17
  • 79

一个有趣的遭遇:dubbo超时追踪出来的httpclient超时问题

开完早会,像往常一样打开我的SecureCRT,一个个点开线上的日志~惊!!!!全是bug: 按理说,...

一个有趣的编号问题的C语言实现

题目来自网友分享:腾讯算法面试题 算法与代码 题目如下: 给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数。要求下排每个数都是先前上排对应那个数在下排十个数中出现的次数。 ...
  • hzhaoy
  • hzhaoy
  • 2011年11月06日 19:01
  • 469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【SHELL】一个非常有趣的问题
举报原因:
原因补充:

(最多只允许输入30个字)