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
ました。ただし、更新する特定のディレクトリとファイルを指定する必要があるようです。
私は、この仕事はかなりありふれたものにちがいないと感じています。