Python 如何从VS网站中删除VSS挂钩?
我有一个VisualStudio2008解决方案,其中包括7个不同的项目。其中3个“项目”是网站(没有项目文件的项目) 我已从所有目录中剥离了所有各种Visual Sourcesafe文件,删除了SLN文件中的Scc引用以及所有存在的项目文件。我删除了SUO文件和所有用户文件。VisualStudio仍然认为其中两个网站仍处于源代码控制之下,它为我将Scc条目添加回SLN文件中 有人知道VS是如何知道旧的源代码管理的吗? 编辑: 我没有提到的另一件事是,我试图从中删除VSS挂钩的文件已被复制到VSS的已知工作目录之外,在VS 2008或VS 2005中打开解决方案之前运行python脚本并对文件进行手动编辑(我两者都有问题) 下面是一个python脚本,我用它删除这些文件,并告诉我哪些文件需要手动编辑Python 如何从VS网站中删除VSS挂钩?,python,visual-studio,visual-sourcesafe,Python,Visual Studio,Visual Sourcesafe,我有一个VisualStudio2008解决方案,其中包括7个不同的项目。其中3个“项目”是网站(没有项目文件的项目) 我已从所有目录中剥离了所有各种Visual Sourcesafe文件,删除了SLN文件中的Scc引用以及所有存在的项目文件。我删除了SUO文件和所有用户文件。VisualStudio仍然认为其中两个网站仍处于源代码控制之下,它为我将Scc条目添加回SLN文件中 有人知道VS是如何知道旧的源代码管理的吗? 编辑: 我没有提到的另一件事是,我试图从中删除VSS挂钩的文件已被复制到V
import os, stat
from os.path import join
def main():
startDir = r"C:\Documents and Settings\user\Desktop\project"
manualEdits = []
for root, dirs, files in os.walk(startDir, topdown=False):
if '.svn' in dirs:
dirs.remove('.svn')
for name in files:
os.chmod(join(root,name), stat.S_IWRITE)
if name.endswith(".vssscc") or name.endswith(".scc") or name.endswith(".vspscc") or name.endswith(".suo") or name.endswith(".user"):
print "Deleting:", join(root, name)
os.remove(join(root,name))
if name.endswith("sln") or name.endswith("dbp") or name.endswith("vbproj") or name.endswith("csproj"):
manualEdits.append(join(root, name))
print "Manual Edits are needed for these files:"
for name in manualEdits:
print name
if __name__ == "__main__":
main()
它可能只是试图将它添加到你的VS实例上。你必须删除缓存,以便VS认为它不再在SS下
那些东西是有害的!VisualStudio在任何地方都会将指向SourceSafe的链接粘贴到构成sln文件的XML中 我写了一篇关于我将sourcesafe转换为subversion的经历的文章,其中包括我用来清除垃圾的python脚本。请注意: 1) 这是非常容易测试的。进行备份,以免弄乱sln/*项目文件。在测试之前和之后运行您的测试套件,以确保它没有出错(怎么可能?谁知道!但奇怪的事情发生了。) 2) 这可能是考虑到sourcesafe和visual studio的不同版本,因此您可能需要对其进行调整。不管怎样,不用再麻烦了:
import os, re
PROJ_RE = re.compile(r"^\s+Scc")
SLN_RE = re.compile(r"GlobalSection\(SourceCodeControl\).*?EndGlobalSection",
re.DOTALL)
VDPROJ_RE = re.compile(r"^\"Scc")
for (dir, dirnames, filenames) in os.walk('.'):
for fname in filenames:
fullname = os.path.join(dir, fname)
if fname.endswith('scc'):
os.unlink(fullname)
elif fname.endswith('vdproj'):
#Installer project has a different format
fin = file(fullname)
text = fin.readlines()
fin.close()
fout = file(fullname, 'w')
for line in text:
if not VDPROJ_RE.match(line):
fout.write(line)
fout.close()
elif fname.endswith('csproj'):
fin = file(fullname)
text = fin.readlines()
fin.close()
fout = file(fullname, 'w')
for line in text:
if not PROJ_RE.match(line):
fout.write(line)
fout.close()
elif fname.endswith('sln'):
fin = file(fullname)
text = fin.read()
fin.close()
text = SLN_RE.sub("", text)
fout = file(fullname, 'w')
fout.write(text)
在%APPDATA%目录中,Visual Studio保存Visual Studio中使用的网站列表,以及该网站的一些设置: 在我的Vista计算机上,文件的确切位置是
C:\Users\{name}\AppData\Local\Microsoft\WebsiteCache\Websites.xml
此文件包含如下项
<?xml version="1.0" encoding="utf-16"?>
<DesignTimeData>
<Website RootUrl="e:\Documents\Visual Studio 2008\WebSites\WebSite\"
CacheFolder="WebSite" sccprovider="SubversionScc" scclocalpath="Svn"
sccauxpath="Svn" addnewitemlang="Visual Basic" sccprojectname="Svn"
targetframework="3.5" vwdport="60225"
_LastAccess="11-11-2008 10:58:03"/>
<Website RootUrl="E:\siteje.webproj\" CacheFolder="siteje.webproj"
_LastAccess="11-6-2008 14:43:45"/>
<!-- And many more -->
</DesignTimeData />
如您所见,它包含的Scc引用也是解决方案文件的一部分。
(在本例中,SCC提供程序是AnkhSVN 2.0,因此它不包含实际的SCC映射;只包含一些常量字符串,告诉SCC提供程序查看工作副本)
我想我试图通过在多个位置缓存这些信息来修复丢失的项目文件。但是,如果这个文件有适当的文档记录,那将是受欢迎的。奇怪的是,为什么您通过python脚本而不是仅仅使用Visual Studio中的内置源代码管理来删除源代码管理绑定?我只能为自己说;但是对大量文件这样做是愚蠢的;你的另一个选择是尝试用visualstudio编写脚本,我宁愿用勺子把我的眼球挖出来。或者只是写一个python脚本。这个特殊的项目,我只需要手动编辑5个文件,所以这不是一个巨大的壮举。无论如何,你可以看看llimllib的脚本,它应该自动执行我脚本中的“手动”部分。这基本上就是我在“手动编辑”中所做的,但是Visual Studio中没有“网站”的项目文件,所以我试图弄清楚VS如何“知道”它是VSS项目的一部分,即使在VSS工作目录之外“清理”文件。hmmm。。。对不起,我从来没有遇到过。我会尝试对“scc”或“source”进行grepping,但我相信您已经尝试过了。我在VSS“知道”的工作目录之外制作了一个本地文件副本,而VS仍然认为这些网站是VSS项目的一部分,只有天知道如何。