gpt4 book ai didi

svn - 确定本地文件夹(Subversion 或 TFS)使用的源代码管理系统

转载 作者:行者123 更新时间:2023-12-02 23:32:16 25 4
gpt4 key购买 nike

摘要:如何确定本地文件夹的 TFS 源代码控制配置。

解释:

在我们的软件工厂中,我根据源控制系统中的代码所在的本地文件夹自动创建 CruiseControl.NET 配置文件。我目前只想支持 Subversion 和 TFS。使用 svn.exe info 命令可以轻松确定 Subversion 用作源控制系统,并确定存储库的位置,如下面的 PowerShell 代码所示。但是当使用 TFS 时我该怎么做呢?

“问题”之一是当前登录的用户无权访问 TFS 服务器。我们不能使用集成安全,因为开发机器没有加入域。

我得到的最接近的是 tf dir ,我必须在弹出框中输入凭据。找不到用于指定用户和密码的命令行参数。 tf 属性看起来也很有希望,但您必须经过身份验证才能执行调用。 Subversion 可以在没有身份验证的情况下提供信息。

我当前在 PowerShell 中的代码与 SubVersion 的工作代码,缺少 TFS 代码;-)
请注意,对于 CruiseCOntrol.NET 块的实际创建,我们在全局变量中提供了一个已配置的源代码控制用户名和密码。

#
#
#
# https://svn.mycompany.nl/svn/Acme.Intranet
#
#
#
# 如果在源代码控制下返回 CruiseControl.NET 源代码控制配置块
# 以下格式:
#
# https://svn.mycompany.nl/svn/Acme.Intranet
# c:\project\Acme.Intranet.Build\WorkingDirectory\$configuration
# acmebuild
# 最高密码
#
#.参数配置
# “调试”或“发布”
# .返回
# 带有配置块的字符串,如果不在 Subversion 源代码控制下,则为 $null。
##>
函数 GetSubversionSourceControlBlock
{
参数
(
$配置
)

$svn_exe = Join-Path -Path $productfolder -ChildPath "tools\DotNet2\svn-win32-1.5.2\svn.exe"
$svnProductInfo = [xml](& $svn_exe info `"$productFolder`"--xml)
$trunkUrl = $svnProductInfo.info.entry.url
如果($trunkUrl -ne $null)
{
@"

$trunkUrl
$buildfolder\WorkingDirectory\$configuration
$MastConfigurationGlobal_SourceControlUserName
$MastConfigurationGlobal_SourceControlPassword

"@
详细“在 Subversion 源代码控制下。主干网址:$trunkUrl”
}
别的
{
详细“不受 Subversion 源代码控制”
$null
}
}

#
# tfs.mycompany.nl
# $/Acme.Intranet
# c:\project\Acme.Intranet.Build\WorkingDirectory\$configuration
# acmebuild
# 最高密码
#
#.参数配置
# “调试”或“发布”
# .返回
# 带有配置块的字符串,如果不在 Tfs 源代码控制下,则为 $null。
##>
函数 GetTfsSourceControlBlock
{
参数
(
$配置
)

$null
}

最佳答案

故事还在继续:

如果您从 cmd 提示符执行 tf 命令,一切都会如上一个答案中所述。如果您从 PowerShell 命令提示符执行此操作,您会得到以下信息:

PS C:\> & tf.exe 工作文件夹 c:\projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk/login:macaw\serge,Trasimeno5
TF10125: 路径“c:\projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk”必须以 $/开头

它给出了一个错误!

我已经尝试了一切,但无济于事。我什至通过 TFS 对象模型尝试过它,但这变得非常复杂。要获取本地文件夹的工作区,您首先需要 tfs 服务器的名称。可能可以迭代所有当前映射的工作区并迭代在那里定义的服务器(这可能是 tf.exe 所做的)以测试本地文件夹是否属于该工作区。

我终于想出了以下解决方案:

我使用以下代码创建了一个简单的批处理文件 ExecTfWorkprodCommand.bat:

@回声关闭
rem 这是一种奇怪的批处理文件,需要,因为在 PowerShell 中执行此命令会出错。
rem 此脚本使用以下命令检索有关本地文件夹的 TFS 源代码控制信息:
rem tf 工作文件夹/login:domain\user,password
rem %1 是 tf.exe 可执行文件的路径
rem %2 是本地路径
rem %3 是域\用户 [可选,如果省略则使用集成安全]
rem %4 是密码 [可选,如果未指定 %3]
rem 输出格式为:
rem ================================================== ==============================
rem 工作区:Macaw.SolutionsFactory@VS-D-SVDOMOSS-1 (Serge)
远程服务器:tfs.macaw.nl
rem $/Macaw.SolutionsFactory/FactoryIdeTools/trunk: C:\Projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk

如果 [%3]==[] 转到集成安全性
%1 工作文件夹“%2”/登录:%3,%4
转到结束

:综合安全
%1 工作文件夹“%2”

:结尾

我从 PowerShell 调用这个批处理脚本。从我想解析的结果中:

  • Tfs 服务器名称
  • 服务器上的文件夹

  • 关于如何解决这个问题的示例代码:

    $tfsProductInfo = & "ExecTfWorkprodCommand.bat "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\TF.exe""c:\projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk"域\用户密码
    如果 ($tfsProductInfo -eq $null)
    {
    写输出“无法确定本地文件夹上的 Tfs 源代码控制信息”
    }
    别的
    {
    $tfsserver = [Regex]::Split($tfsProductInfo[2], ":")[1].Trim()
    $serverpath = [Regex]::Split($tfsProductInfo[3], ": ")[0].Trim()
    $localpath = [Regex]::Split($tfsProductInfo[3], ": ")[1].Trim()
    写输出“服务器:$tfsserver”
    写输出“服务器路径:$serverpath”
    写输出“本地路径:$localpath”
    }

    关于svn - 确定本地文件夹(Subversion 或 TFS)使用的源代码管理系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/612956/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com