我正在使用Visual Studio 2010和git(git svn)。我的同事使用纯svn和Ankhsvn插件。
当我尝试在启用Git源代码控制提供程序的情况下打开文件时,Visual Studion会抱怨:
源控制插件
活动解决方案或项目由adifferen源代码控制插件控制,而不是您选择的插件。如果更改源控件插件,则将关闭活动解决方案或项目 你想继续吗?
当我单击是时,将打开一个空的解决方案。 当我单击否时,解决方案项旁边的所有git特定图标都会丢失(我仍然会在解决方案资源管理器中看到分支名称),每次打开解决方案时都会收到有关源控件插件的提示。
当我克隆我的同事创建的svn存储库时,解决方案sln文件包含以下
GlobalSection(SubversionScc)= preSolution
Svn-Managed = True
Manager = AnkhSVN - Visual Studio的Subversion支持
EndGlobalSection
我已经删除了这一部分,现在解决方案在Git源代码控制提供程序被激活时没有问题,但是当您选择Ankhsvn提供程序时会抱怨 - 情况正好相反。
我想告诉git在pull(git svn fetch)中删除这部分.sln文件,并在我提交时添加它(git svn dcommit)。这可以通过gitattributes以及如何实现吗?
编辑:
我现在已添加
solutionname.sln filter = ankhsvn
到$ GIT_DIR / info / attributes
和
[filter "ankhsvn"]
clean=sed '/^Global$/ r ../ankhsvnsection '
smudge=sed '/GlobalSection(SubversionScc)/,/EndGlobalSection/d '
到我的.git / config文件。
ankhsvnsection包含涂抹操作删除的部分。 我似乎什么也没做?!
答案 0 :(得分:6)
我不知道如何在Windows上完全执行此操作,但我知道如何在* nix上执行此操作。
我会编写一个sed / bash脚本(称为myscript),当使用git "smudge" filter通过git签出时,它会从文件中删除这些行。
所以在“$ 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'
这可能是你可以在windows中使用git bash接管的。
要检查文件的更改时要小心,因为它会检查“污迹”版本。您可以为此定义一个“干净”过滤器,它会再次添加svn语句。