1

P4 から TFS に移行するプロセスの一環として、p4コマンドを呼び出すいくつかの自動化されたスクリプトを TFS に相当するものに変換する必要があります。

私のスクリプトの 1 つは、いくつかのコマンドを実行します。

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の少年ではないので、それを診断して修正する方法がわかりません. そこで、Java にgetWorkspace/createWorkspaceの部分を残して呼び出してみtf getました。ただし、更新する特定のディレクトリとファイルを指定する必要があるようです。

私は、この仕事はかなりありふれたものにちがいないと感じています。

4

1 に答える 1

1

みんなありがとう、エラーWorkspace.getは私の不注意の結果であることが判明しました。com.microsoft.tfs.sdk-11.0.0.jarとファイルのバージョンがlibnative_*.so一致しませんでした。すべてのファイルが互いに一致していることを確認したので、問題は解決しました。

于 2013-09-06T15:10:49.750 に答える