作为从P4转换到TFS的过程的一部分,我需要将一些调用p4
命令的自动脚本转换为它们的TFS等价物。
我的一个脚本执行了几个命令:
p4 <server-and-login-options> -c <wksp_name> client -i < <definition>
p4 <server-and-login-options> -c <wksp_name> sync [-f]
在Perforce中,这足以(可选)更改并完全同步特定工作区。这可以在Windows和Linux上无缝地工作。
在MSDN文档中闲逛了几个星期之后,似乎我没有在TFS中发现一个等价物。
我尝试使用TFS Java SDK来完成这项工作:
...
WorkingFolder[] workingFolders = ...;
Workspace wksp = null;
try
{
wksp = vcs.getWorkspace(workspaceName, VersionControlConstants.AUTHENTICATED_USER);
wksp.update(null, WORKSPACE_COMMENT, workingFolders, true);
}
catch (WorkspaceNotFoundException ex)
{
wksp = vcs.createWorkspace(
workingFolders,
workspaceName,
WORKSPACE_COMMENT,
WorkspaceLocation.SERVER,
WorkspaceOptions.NONE);
}
final VersionSpec versionSpec = LatestVersionSpec.INSTANCE;
GetOptions getOptions = GetOptions.NONE;
if (force)
getOptions = getOptions.combine(GetOptions.GET_ALL);
final GetStatus getStatus = wksp.get(versionSpec, getOptions);
...
这适用于Windows。
但不是在Linux上。 getWorkspace
/ createWorkspace
部分可以正常工作,效果可由tf workfold
验证。但是,在Workspace.get
内,程序崩溃并显示以下消息:
Exception in thread "main" java.lang.NoSuchMethodError: <init>
at com.microsoft.tfs.jni.internal.filesystem.NativeFileSystem.nativeGetAttributes(Native Method)
at com.microsoft.tfs.jni.internal.filesystem.NativeFileSystem.getAttributes(NativeFileSystem.java:74)
at com.microsoft.tfs.jni.FileSystemUtils.getAttributes(FileSystemUtils.java:39)
at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processOperation(GetEngine.java:1800)
at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processOperationsInternal(GetEngine.java:1163)
at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processOperations(GetEngine.java:957)
at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processGetOperations(GetEngine.java:782)
at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2429)
at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2307)
at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2295)
at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2271)
at TfsGet.main(TfsGet.java:181)
好吧,我不是一个Unix男孩,也不知道如何诊断和修复它。所以我尝试将getWorkspace
/ createWorkspace
部分保留在Java中并调用tf get
。但是,我似乎需要指定要更新的特定目录和文件。
我觉得这份工作必须相当普遍,不能相信没有人能完成它。
答案 0 :(得分:1)
谢谢大家,Workspace.get
中的错误原因是我自己的注意力不集中。 com.microsoft.tfs.sdk-11.0.0.jar
和libnative_*.so
文件的版本不匹配。现在我确保所有文件都相互匹配,问题就解决了。