直到最近,通过阅读存储在.svn子目录中的一些文本文件,读取所有SVN:Subversion工作副本中引用的外部因素很简单。通过使用mysql表更改为新的磁盘结构,这已不再那么简单了。
我想更新一个内部使用的工具,用于读取该外部列表以使用新结构。该工具是用Delphi 2007编写的,所以我更喜欢用Delphi编写的代码。
sourceforge上有Version Insight for RAD Studio可能包含一些代码来处理这个技巧但是我想知道是否有其他人已经完成了从该项目中提取所需部分的工作或者有其他选择。
答案 0 :(得分:11)
您也可以使用Subversion客户端DLL以编程方式执行此操作。这是用Delphi XE编写的最小例子:
program svnext;
{$APPTYPE CONSOLE}
uses
SysUtils,
SvnClient;
procedure Main;
var
SvnClient: TSvnClient;
SvnItem: TSvnItem;
begin
// Subversion client DLL directory; here I simply use the .exe's directory
// (I copied the DLLs there manually.)
BaseDllDir := ExtractFilePath(ParamStr(0));
SvnClient := nil;
SvnItem := nil;
try
SvnClient := TSvnClient.Create;
SvnClient.Initialize;
SvnItem := TSvnItem.Create(SvnClient, nil, ParamStr(1));
Writeln(SvnItem.PropValues['svn:externals']);
finally
SvnItem.Free;
SvnClient.Free;
end;
end;
begin
try
Main;
except
on E: Exception do
begin
ExitCode := 1;
Writeln(Format('[%s] %s', [E.ClassName, E.Message]));
end;
end;
end.
你可能不得不调整Delphi 2007的代码。似乎Version Insight在此期间已经发展并且失去了(某些)向后兼容性。
答案 1 :(得分:5)
如果你可以调用svn可执行文件,很容易找到你的存储库中存储的所有外部代码:
svn propget -R svn:externals .
将返回:
first/path/to/external - name_of_first_external http://first_repos/that/is/in/external
second/path/to/external - name_of_second_external http://second_repos/that/is/in/external
答案 2 :(得分:2)
像其他人说的那样,调用SVN可执行文件。您可以使用以下技术将其与Delphi Tools菜单集成: http://delphi.wikia.com/wiki/Adding_TortoiseSVN_to_the_Tools_menu
要添加到该文章,在此处打开“打开文件夹”条目非常方便,该条目为正在编辑的文件的文件夹打开Windows资源管理器。这是“工具属性”:
如果你有这个,那么你就可以轻松获得所有的TortoiseSVN。