使用 Subgit 和 Powershell 脚本将 SVN 自动迁移到 Git 时出现问题

Problem while automating SVN to Git migration using Subgit and Powershell Scripting

我正在尝试编写一个 powershell 脚本,使用 Subgit 自动将 svn 迁移到 git。我是 Powershell 的新手。我已经弄清楚如何使用单独的命令来执行此操作,但是当我尝试将这些命令放在脚本中时出现问题。

具体来说,

subgit configure --layout auto $SVN_PROJECT_URL $GIT_REPO_PATH 
subgit import $GIT_REPO_PATH

这 2 个命令触发了一个外部进程,因此 powershell 不会等待这 2 个命令执行完才继续执行下一部分,这会导致错误。我试图将这两行放在它们单独的进程中并等待这些进程完成,但是 powershell 中的 Wait-ProcessWait-Job 命令都不起作用,而不是等待行完成执行,它没有完成执行并立即转到下一行。我尝试了以下方法,但没有结果,

$job1 = Start-Job { subgit import $GIT_REPO_PATH }
Wait-Job $job1
Receive-Job $job1

 $sb = Start-Job -ScriptBlock {
     subgit configure --layout auto $SVN_PROJECT_URL $GIT_REPO_PATH 
 }
 Wait-Job $sb.Name

我认为问题可能是我使用 subgit 的方式引起的,但我不确定。

我也不是 PowerShell 专家,但对 SubGit 有一些经验。我没有看到你使用 SubGit 的方式有任何问题,除了 'subgit configure' 和 'layout auto' 需要一些交互性,因为 'auto' 布局意味着 SubGit 将连接到 SVN 服务器,阅读它的历史并尝试根据历史创建合适的映射配置;为此,SubGit 总是要求提供 SVN 凭据,这可能会导致错误和后续任务切换?

避免交互(至少检查)的一种可能方法是省略 'layout' 选项——在这种情况下,SubGit 将只创建一个 'standard' 布局映射,因此不需要连接到SVN 服务器,不需要任何交互。

我试过用 PS 脚本做同样的事情,它在我的机器上或多或少地工作正常:它启动了第一个命令,停止询问凭据,一旦我提供用户名和密码继续配置,完成后切换到'import'。在 运行 我的脚本之前,我唯一需要更改的是执行策略,我必须将其从默认限制更改为不受限制,以便能够 运行 脚本。所以对我来说,你遇到的问题看起来更像是一个 PS 问题,可能与 PS 设置(执行策略,也许?)有关。

我发现解决方案是通过 argumentlist

传递参数,以下列方式使用 precess
$procConfigure = Start-Process subgit -ArgumentList "configure
--layout auto $SVN_PROJECT_URL $GIT_REPO_PATH" -PassThru 
$procConfigure.WaitForExit()