svn如何提取文件更新列表

6 篇文章 0 订阅
1 篇文章 0 订阅

eclipse svn插件site-1.10.1

Slik-Subversion-1.8.0-x64.msi  ---可以使用svn命令,如svn status 显示修改过的本地文件,如下示例:

I:\workspace70\ahdx_lcbmi70_chaxun>svn status
?       .settings
?       classes\SocketClient.class
?       classes\SocketClientShortlink.class
?       classes\com
M       config\businessconfig.xml
M       readme.txt
M       src\com\xxx\lcbmi\sockets\SocketMultiServer.java
M       src\com\xxx\lcbmi\sockets\SocketServer.java
M       src\com\xxx\lcbmk\business\Customer.java
?       src\com\xxx\lcbmk\business\Peap.java
M       src\com\xxx\lcbmk\business\Rule.java
M       src\com\xxx\lcbmk\common\ServiceList.java
M       src\com\xxx\lcbmk\core\SpecialValueProc.java
?       upline


可以使用java代码获取此列表,制作成shell脚本,用来进行代码的批量更新。

package svnkitDemo;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;

public class SvnExportModfileList {
    public static void main(String[] args) {
        callShell();
    }

    /**
     * 
     * 执行命令行命令,返回该命令的返回值
     * 
     * @author zhaigx
     */
    private static void callShell() {
        String workDir = "i:/workspace70/gzdx_wslcims80/";
        boolean isWebProject = true;
        // web应用: 去除workDir的class目录
        String classPathRmWorkDir = "WebRoot/lcbms/WEB-INF/classes";

        System.out.println("workDir: " + workDir);
        ProcessBuilder pb = null;
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;

        String line = "";
        try {
            // 创建一个进程示例
            List<String> list = new ArrayList<String>();
            list.add("cmd.exe");
            list.add("/C");
            list.add("svn status");
            pb = new ProcessBuilder(list);
            // 设置工作目录
            pb.directory(new File(workDir));
            pb.redirectErrorStream(true);
            Process p = pb.start();
            // // 将执行结果打印显示
            is = p.getInputStream();
            isr = new InputStreamReader(is, "GBK");
            br = new BufferedReader(isr);
            File file = null;
            List<String> listFile = new ArrayList<String>(3);
            while ((line = br.readLine()) != null) {
                System.out.println(line);
                String[] str = line.split("\\s+");// STAUTS PATH
                file = new File(workDir + str[1]);
                // 过滤不需要的文件
                if ((str[0].equals("?") && file.isFile())
                        || file.getName().endsWith(".class")
                        || file.getName().startsWith(".")
                        || str[1].startsWith("classes")) {
                    if (file.getName().endsWith(".class")
                            && file.getName().indexOf("$") >= 0) {
                        // 内部类
                    } else {
                        continue;
                    }
                }

                listFile.add(strReplace(line, isWebProject, classPathRmWorkDir));
            }
            int size = listFile.size();
            // for (int i = 0; i < size; i++) {
            // System.out.println("++" + listFile.get(i));
            // }
            System.out.println("=========符合条件的文件数:" + size);
            createBackupShell(listFile, workDir);
            System.out.println("\n\n");
            createUpdateShell(listFile, workDir);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("ERROR LINE: " + line);
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (isr != null) {
                    isr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static String strReplace(String line, boolean isWebProject,
            String classPath) {
        line = line.replace("\\", "/");
        if (!isWebProject) {
            line = line.replace("src/", "classes/");
        } else {
            line = line.replace("src/", classPath + "/");
        }
        line = line.replace(".java", ".class");
        return line;
    }

    public static void createBackupShell(List<String> list, String workDir) {
        int size = list.size();
        String line = "";
        String print = "";
        String data = "";
        int num = 0;
        for (int i = 0; i < size; i++) {
            line = list.get(i);
            if (StringUtils.isEmpty(line)) {
                continue;
            }
            String[] str = line.split("\\s+");// STAUTS PATH
            if (str.length < 2) {
                data = str[0];
            } else {
                data = str[1];
            }

            print = "cp $workDir/" + data + "\t $workDir/" + data + "$time";
            System.out.println(print);
            num++;
        }
        System.out.println("-------" + num);

    }

    public static void createUpdateShell(List<String> list, String workDir) {
        int size = list.size();
        String line = "";
        String print = "";
        String data = "";
        int num = 0;
        for (int i = 0; i < size; i++) {
            line = list.get(i);
            String[] str = line.split("\\s+");// STAUTS PATH
            if (str.length < 2) {
                data = str[0];
            } else {
                data = str[1];
            }
            int index = data.lastIndexOf("/");
            if (index >= 0) {
                print = "cp $sourceFileDir" + data.substring(index)
                        + "\t $workDir/" + data;
            } else {
                continue;
            }
            System.out.println(print);
            num++;
        }
        System.out.println("-------" + num);
    }


}



shell脚本:

backupFile.sh
sourceFileDir=/codedir
workDir=/gzdx_lcbmi80
time=20130717

cp $workDir/RUN/start.sh     $workDir/RUN/start.sh$time
cp $workDir/config/businessobject.xml    $workDir/config/businessobject.xml$time
cp $workDir/config/datacheck.xsd     $workDir/config/datacheck.xsd$time
。。。。。。


updateFile.sh

sourceFileDir=/codedir
workDir=/gzdx_lcbmi80
time=20130717

cp $sourceFileDir/start.sh   $workDir/RUN/start.sh
cp $sourceFileDir/businessobject.xml     $workDir/config/businessobject.xml
cp $sourceFileDir/datacheck.xsd  $workDir/config/datacheck.xsd
。。。。。。


 

ftp脚本 ftpFile.sh:


#在目标主机反ftp到中转机取代码
LOCAL_DIR=/data/lcb0/codedir
REM_DIR=/lcims/zhax

if [ ! -d "$LOCAL_DIR" ];then
mkdir $LOCAL_DIR
fi

HOST_IP='10.1.1.24'
USRNM='lci0'
PWD='&s'

sftp $HOST_IP >> ${LOCAL_DIR}/ftp.log <<! 
lcd $LOCAL_DIR
cd $REM_DIR
get *
bye
!


sftp脚本:

#在目标主机反ftp到中转机取代码
LOCAL_DIR=/data/lcb0/codedir
REM_DIR=/lcims/zigx

if [ ! -d "$LOCAL_DIR" ];then
mkdir $LOCAL_DIR
fi

HOST_IP='10.1.1.24'
USRNM='lci0'
PWD='ms'

sftp $HOST_IP >> ${LOCAL_DIR}/ftp.log <<! 
lcd $LOCAL_DIR
cd $REM_DIR
get *
bye
!

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于初学者来说,使用SVN(Subversion)来管理窗口(Window)系统的代码是一个不错的选择。以下是一些关于如何开始使用SVN的一些建议: 首先,你需要下载和安装SVN客户端软件,如TortoiseSVN。这是一个在Window操作系统上常用的SVN客户端软件,它提供了一个直观且易于使用的图形用户界面。 在安装完TortoiseSVN后,你可以右击任何一个文件夹,选择“SVN Checkout”来获取一个SVN仓库的副本。副本是你的本地工作副本,你可以对其进行修改和提交。 完成了该步骤后,你可以开始通过TortoiseSVN进行代码的版本管理。当你对项目文件进行修改后,右击该文件夹并选择“SVN Commit”来提交你的更改。这样,你的更改就会保存到版本控制系统中。 另外,如果你需要查看版本历史或回滚到之前的某一个版本,你可以使用“SVN Log”和“SVN Update”这些命令。通过这些命令,你可以浏览和恢复以前的代码版本。 此外,SVN还提供了许多其他有用的功能,如分支和合并。这些功能允许你在开发过程中创建新的分支,以便同时进行多个版本的开发。 最后,为了更好地使用SVN,建议你深入了解SVN的基本概念和命令。有关SVN的详细信息和使用指南,你可以参考官方文档或在线教程。 总的来说,作为一个初学者使用SVN来管理窗口系统的代码是一个相对简单且直观的过程。通过学习和熟悉SVN的基本概念和命令,你可以更好地进行代码版本管理,并与团队成员协同工作。 ### 回答2: 对于window的svn初学者来说,首先需要安装svn软件。可以从Subversion官方网站下载适合Windows操作系统的svn客户端软件,例如TortoiseSVN。安装完毕后,可以在文件资源管理器中右键单击文件夹,选择TortoiseSVN的选项,就可以看到关于版本控制的命令。 在开始使用svn之前,需要了解一些svn的基本操作命令。比如,要创建一个新的版本库,可以使用`svnadmin create`命令。要从版本库中提取项目的最新版本,可以使用`svn checkout`命令。编辑或添加文件后,可以使用`svn add`命令将文件添加到版本库中,并使用`svn commit`命令将更改提交到版本库。 另外,使用svn的过程中可以使用一些交互式的功能。比如,通过右键单击文件夹或文件,选择“更新”可以将版本库中的最新版本更新到本地。选择“提交”可以将本地修改提交到版本库。选择“日志”可以查看版本库的提交历史记录。选择“更新到”可以将特定版本的文件夹或文件检出到本地。 在使用svn的过程中,还应该了解一些常见问题和解决方法。比如,当遇到冲突时,需要使用“解决冲突”功能来处理。当需要撤销某次提交时,可以使用“还原到此版本”来撤销。当需要创建分支或合并时,可以使用“合并”命令。 总之,对于window的svn初学者来说,安装svn软件并掌握基本的操作命令是非常重要的。不断练习和实践,熟悉svn的各种功能和操作方法,才能更好地利用svn进行版本控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值