如何将SiteCore的序列化树检入TFS

时间:2009-06-23 06:11:41

标签: version-control tfs sitecore

我们正在使用Sitecore并在开发人员之间共享内容,我们将内容树序列化到文件系统,然后将其检入源代码控制。这在上一个使用SVN的项目中运行良好,但是这个新项目正在使用TFS。

不幸的是,TFS不会接受带有美元符号的路径,即

\serialization\master\sitecore\templates\Branches\Calendar\Agenda View Settings\$name.item

这是Sitecore序列化结构的一个非常常见的文件名。有没有办法解决?是否可以将Sitecore更改为不将$放在文件名前面,还是我们必须切换到SVN?

3 个答案:

答案 0 :(得分:2)

哦,还有一件事。

http://www.hhogdev.com/products/team-development-for-sitecore.aspx

我自己还没有机会测试这个工具,但它看起来很有趣,可能是你的源代码控制挑战的答案。

答案 1 :(得分:0)

答案 2 :(得分:0)

我做了一些挖掘。这是可行的,但不能立即直接前进。

在序列化树时,Sitecore会调用:Sitecore.Shell.Framework.Commands.Serialization.DumpTreeCommand。这在/App_Config/Commands.config中定义。反序列化时,调用等效的.LoadTreeCommand。

这些命令的作用不过是调用:

protected override void Dump(Item item)
{
    Sitecore.Data.Serialization.Manager.DumpTree(item);
}

不幸的是,为了获得您需要覆盖的功能,看起来您将不得不1)覆盖commands.config中的命令,然后创建自己的序列化管理器(继承自Sitecore)。

我不完全确定这会有多容易,因为这个类中的大多数方法都是静态成员。您需要覆盖/重新实现的方法是:

public static void DumpItem(string path, Item item)
{
    Assert.ArgumentNotNullOrEmpty(path, "path");
    Assert.ArgumentNotNull(item, "item");
    Directory.CreateDirectory(Path.GetDirectoryName(path));
    using (new SecurityDisabler())
    {
        TextWriter writer = new StreamWriter(File.Create(path));
        try
        {
            ItemSynchronization.WriteItem(item, writer);
        }
        catch
        {
        }
        writer.Close();
    }
}

如您所见,文件名完全基于Item的路径。假设是,您可能会使用.Replace(“$”,“!dollartoken!”)之类的东西,并在您的反序列化器中实现反向。

不幸的是,似乎有很多工作。