2010-08-09 63 views
5

我與另一位開發人員在同一份工作副本中工作(我知道這是一個壞主意),我們通常會更新單個文件,現在我們在一些修訂中有文件,而另一些文件在另一個版本中。 如何查看具有各自修訂版本號的文件列表? (工作副本是在Linux系統中,我們正在使用SVN命令行。如何查看SVN工作副本中每個文件的版本號?

預先感謝任何幫助

+3

我這樣做對不起,我不能要求停止自己:?__If你知道這是一個壞主意,你爲什麼要做這個__ – sbi 2010-08-09 20:28:47

+0

問題發生在apache的生產文件夾的工作副本中運行。有時當我們需要快速解決錯誤時,我們直接使用該工作副本。 – Castro 2010-09-09 18:23:59

+2

這是一個可怕的想法。您快速創建問題的可能性與您快速修復問題的可能性相同。 – thekbb 2013-02-04 17:23:23

回答

0

最後,我使用了由Dmitry Yudakov發佈的命令和js-rhino中的litle腳本的組合解決方案。現在我可以找到具有不同版本號的所有文件,如下所示:

svn info -R> tmp_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()); 
} 
6

在你的工作拷貝試試這個

svn info * 

svn info -R * 

以遞歸方式查看所有文件和目錄

您可以鍵入svn help info查看其他選項

+0

是的,但我正在遞歸地查找所有子目錄和文件的版本。 只顯示父目錄中文件的版本。 – Castro 2010-08-09 20:09:03

+0

好的,看我的編輯 – 2010-08-09 20:25:37

1

svnversion命令可能是您所需要的,因爲它會顯示工作副本中的修訂範圍。

+0

@JonathonReinhart - 這篇文章陳述了一個答案。雖然它也包含鏈接,但該鏈接對於答案是有效的並不是必需的。這裏關鍵的難題是知道要使用什麼命令,並以獨立的方式提供這些信息。 – 2014-05-03 06:17:58

+0

@ChrisStratton同意。我對評論有點過分熱心。 – 2014-05-03 06:21:29

0

相同的節目在PHP:

SVN信息-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"; 
} 
2

svn info -R . | egrep "^Path:|^Revision:" | paste - -

這意味着

  • 遞歸讓每一個文件的信息在當前目錄
  • 根的子樹則只保留開頭的行「路徑」或「版本:」
  • 路徑/修訂線加入到一個單一的線

生成輸出是這樣的:

Path: Tools/xmlvalidator Revision: 69114 
Path: Tools/xmlvalidator/main.c Revision: 69114