【SHELL】一个非常有趣的问题
2016-06-02 10:23
615 查看
使用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..."
好了,大功告成!!!
相关文章推荐
- 错误:-bash: phpstudy: command not found(linux phpStudy)
- MySQL错误信息:-bash:mysql:command not found(linux mysql 登录MYSQL)
- bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
- shell脚本里面一个很经典的调试方法
- 6 操作文件和目录
- linux shell脚本中读取文件内容的方法(含效率测试)
- 使用bash工具创建ssh key
- linux raid while、until循环 bash组合测试条件
- Hbase教程(二) Hbase数据库Shell命令
- 检查mysql是否成功启动的方法(bat+bash)
- 怎样把shell terminal 分为多窗口
- Powershell学习之道-文件夹共享及磁盘映射
- 【原】Java程序调用远程Shell脚本
- linux shell wget下载远程目录
- 使用bash工具创建 ssh key
- shell(十三)参数代换
- 内核、操作系统、Shell
- Linux操作系统基础解析之(七)——Bash(Shell)基础知识(1)
- Linux Shell系列教程之(七)Shell输出
- Linux Shell系列教程之(六)Shell数组