【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来比较的话,不是什么好的体验,非常麻烦。于...
  • keepthink2rich
  • keepthink2rich
  • 2016年12月05日 10:34
  • 148

一个好玩的Linux shell脚本

一个好玩的Linux shell脚本,基本死调用cowsay
  • huangjinqiang
  • huangjinqiang
  • 2014年04月28日 19:37
  • 2699

连号区间数 小明这些天一直在思考这样一个奇怪而有趣的问题:

package org.bluebridge.topics; /* * 连号区间数 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间...
  • u013091087
  • u013091087
  • 2015年02月12日 12:46
  • 742

一些有趣的算法

本文专门记录一些有趣的算法。计算二进制数中1的个数这道题目的一个解决方案是通过%2来计算,这个比较简单。现在推荐一个快速算法,利用n=n&(n-1);来计算,可以这么解释这个运算的作用:一个数减1以后...
  • linshijun33
  • linshijun33
  • 2016年08月04日 23:54
  • 1037

【蓝桥杯】【基础训练05】【特殊回文数】

题目:特殊回文数 问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式...
  • bear_huangzhen
  • bear_huangzhen
  • 2016年04月10日 14:26
  • 910

一些特别有趣的C++面试题(持续更新中)

一、根据C++11标准,以下程序输出什么? #include using namespace std; class A { public: A() { cout ...
  • ZSGG_ACM
  • ZSGG_ACM
  • 2016年04月01日 21:43
  • 2431

有趣的C++算法_(:з」∠)_

摘要在刷算法题的过程中,被一些大神的想法折服,方知天外有天,山外有山_(:з」∠)_...
  • LeYOUNGER
  • LeYOUNGER
  • 2017年04月08日 14:54
  • 485

[算法]有趣算法合辑[1-10]

最近在网上看到一些不错的C语音算法。枚举一些,供自己学习使用。有些有意思的算法会附上C#的不同实现。 题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分...
  • wzhiu
  • wzhiu
  • 2014年06月16日 16:41
  • 1606

双栈排序(codevs 1170)题解

【问题描述】 Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序。 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b...
  • PbTfcLx
  • PbTfcLx
  • 2016年01月10日 18:41
  • 598

【中山市选2011】辽哥游戏

Description:  张辽是一个长发飘飘的非常聪明的男孩,人人都称他为“辽哥”。辽哥喜欢玩一个有趣的电脑游戏。这个游戏开始的时候有n个碉堡,每个碉堡拥有一个防御值和一个附加值。玩家拥有一个初始...
  • Cold_Chair
  • Cold_Chair
  • 2018年01月05日 18:44
  • 75
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【SHELL】一个非常有趣的问题
举报原因:
原因补充:

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