如何在SVN工作副本中查看每个文件的修订号?

如何在SVN工作副本中查看每个文件的修订号?,svn,version-control,version,Svn,Version Control,Version,我和另一个开发人员在同一个工作副本中工作(我知道这是个坏主意),我们通常会更新单个文件,现在我们有一些版本中的文件,另一些版本中的文件。 如何查看文件列表及其各自的修订号?(工作副本在linux中,我们正在使用svn命令行 提前感谢您的帮助在您的工作副本中尝试此功能 svn info * 或 以递归方式查看所有文件和目录 您可以键入svn help info查看其他选项该命令可能是您所需要的,因为它将显示工作副本中的修订范围。最后,我使用Dmitry Yudakov发布的命令和js rhino

我和另一个开发人员在同一个工作副本中工作(我知道这是个坏主意),我们通常会更新单个文件,现在我们有一些版本中的文件,另一些版本中的文件。 如何查看文件列表及其各自的修订号?(工作副本在linux中,我们正在使用svn命令行


提前感谢您的帮助

在您的工作副本中尝试此功能

svn info *

以递归方式查看所有文件和目录


您可以键入
svn help info
查看其他选项

该命令可能是您所需要的,因为它将显示工作副本中的修订范围。

最后,我使用Dmitry Yudakov发布的命令和js rhino中的litle脚本使用组合解决方案。现在,我可以找到具有不同修订号的所有文件比如:

svn信息-R> tmp|u info rhino read-svn.js | grep-v 295

/* The script */ 
lines = readFile("tmp_info").split("\n");  
lines.pop();
String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,"");
}
var idx = 0;
var files = [];
files[0] = {};
var line;
for (i in lines) {
  line = lines[i].toString();
  if(line.length) { 
    key = line.split(':')[0];
    if(key == 'Name' || key == 'Revision' || key == 'Path')
      files[idx][key] = line.split(':')[1];
  } else {
    idx++;
    files[idx] = {};
  }
}

print( 'files : ' + files.length + "\n");
for (i = 0; i< files.length ; i++) {
  var file = files[i];
  if(typeof(file.Name) !== "undefined")
    print(" REVISION: " + file.Revision.trim() + ' -  ' + file.Path.trim() +'/' + file.Name.trim() );
}
/*脚本*/
行=读取文件(“tmp_信息”).split(“\n”);
line.pop();
String.prototype.trim=函数(){
返回此值。替换(/^\s+|\s+$/g,”);
}
var-idx=0;
var文件=[];
文件[0]={};
var线;
对于(i行){
line=line[i].toString();
如果(行长度){
key=line.split(“:”)[0];
如果(键=='Name'| |键=='Revision'| |键=='Path')
files[idx][key]=line.split(':')[1];
}否则{
idx++;
文件[idx]={};
}
}
打印('files:'+files.length+“\n”);
对于(i=0;i
php中的相同程序:

svn info-R>tmp_info&&php versions.php

<?php
$lines = explode("\n",file_get_contents("tmp_info"));
array_pop($lines);

$idx = 0;
$files = array();
$files[] = array();

foreach($lines as $i => $line) {
  if(!empty($line)) { 
    $spl = explode(':',$line);
    $key = $spl[0];
    if($key == 'Name' || $key == 'Revision' || $key == 'Path')
      $files[$idx][$key] = $spl[1];
  } else {
    $idx++;
    $files[$idx] = array();
  }
}


echo  'files : ' . count($files) . "\n";
foreach($files as $file) {
  if(isset($file["Name"]))
    echo " REVISION: " . trim($file["Revision"]) . ' -  ' . trim($file["Path"]) .'/' . trim($file["Name"]) . "\n";
}

svn信息-R.| egrep“^Path:| ^Revision:|粘贴--

也就是说

  • 递归地获取当前目录下的子树中每个文件的信息
  • 仅保留以“路径:”或“修订:”开头的行
  • 将路径/修订线连接到一条线上
产生如下输出:

Path: Tools/xmlvalidator    Revision: 69114
Path: Tools/xmlvalidator/main.c Revision: 69114
它将给出这样的输出

109 authorname 3818 2012年11月20日JSON/xyz.JSON


是的,但我会递归地查找所有子目录和文件的版本。这只会显示父目录中文件的版本。很抱歉这样做,但我无法阻止自己问:如果你知道这是个坏主意,为什么要这样做?问题发生在apache运行.Som的生产文件夹的工作副本中有时,当我们需要快速解决一个错误时,我们直接使用工作副本。这是一个糟糕的想法。你很可能会快速制造问题,就像你很快解决问题一样。@JonathonReinhart-这篇文章陈述了一个答案。虽然它也包含一个链接,但链接不是答案有效的必要条件。这里的关键谜题是“使用什么命令,这以一种独立的方式提供了信息。”克瑞斯特拉顿同意。我对这篇评论有点过于热心了。
Path: Tools/xmlvalidator    Revision: 69114
Path: Tools/xmlvalidator/main.c Revision: 69114
svn -R list --verbose