4

我正在使用 Visual Studio 2010 和 git (git svn)。我的同事使用带有 Ankhsvn 插件的纯 svn。

当我尝试在启用 Git 源代码控制提供程序的情况下打开文件时,Visual Studion 抱怨:

源代码控制插件
活动的解决方案或项目由与您选择的不同的源代码控制插件控制。如果您更改源代码管理插件,活动的解决方案或项目将被关闭。
你想继续吗?

当我单击是时,将打开一个空解决方案。当我单击否时,解决方案项目旁边的所有 git 特定图标都丢失了(我仍然在解决方案资源管理器中看到分支名称),并且每次打开解决方案时都会提示我源代码管理插件。

当我克隆我的同事创建的 svn 存储库时,解决方案 sln 文件包含以下内容

GlobalSection(SubversionScc) = preSolution
Svn-Managed = True Manager = AnkhSVN - Visual Studio EndGlobalSection
的 Subversion 支持

我已删除此部分,现在解决方案在激活 Git 源代码控制提供程序时打开没有问题,但在您选择 Ankhsvn 提供程序时会抱怨 - 情况正好相反。

我想告诉 git 在拉取(git svn fetch)期间删除 .sln 文件的这一部分,并在我提交时添加它(git svn dcommit)。这是否可以通过 gitattributes 以及如何做到这一点?

编辑:

我现在添加了

解决方案名称.sln 过滤器=ankhsvn

到 $GIT_DIR/info/attributes

[filter "ankhsvn"]
  clean=sed '/^Global$/ r ../ankhsvnsection '
  smudge=sed '/GlobalSection(SubversionScc)/,/EndGlobalSection/d '

到我的 .git/config 文件。

ankhsvnsection 包含被涂抹操作删除的部分。我好像什么都没做?!

4

1 回答 1

10

我不知道如何在 Windows 上完全做到这一点,但我知道如何在 *nix 上做到这一点。

我会编写一个 sed/bash 脚本(称为 myscript),当 git 使用git "smudge" filter签出这些行时,它会从文件中删除这些行。

所以在“$GIT_DIR/info/attributes”中我会添加:

{sln filename} filter=myfilter

并在“$GIT_DIR/config”文件中定义过滤器的涂抹部分:

[filter "myfilter"]
    smudge={path to myscript}

对于 Linux,我什至会像这样直接调用 sed:

[filter "myfilter"]
    smudge=sed '/GlobalSection(SubversionScc)/,/EndGlobalSection/ d'

这也许是您可以使用 git bash 在 Windows 中接管的东西。

当您要签入对文件的更改时要小心,因为它会签入“污迹”版本。您可以为此定义一个“干净”过滤器,再次添加 svn 语句。

于 2011-03-11T12:10:56.067 回答