如何从VS网站删除VSS挂钩?

时间:2009-01-22 22:56:35

标签: python visual-studio visual-sourcesafe

我有一个Visual Studio 2008解决方案,其中包含7个不同的项目。其中3个“项目”是网站(没有项目文件的项目类型)。

我从所有目录中删除了所有各种Visual Sourcesafe文件,删除了SLN文件中的Scc引用以及所有存在的项目文件。我也删除了SUO文件和所有USER文件。 Visual Studio仍然认为其中两个网站仍然受源代码控制,并且它会将Scc条目添加回SLN文件中。

是否有人知道 VS仍然知道旧的源代码管理?

编辑: 我没有提到的另一件事是我正在尝试删除VSS挂钩的文件已被复制到VSS的已知工作目录之外,python脚本运行和手动编辑在VS 2008中打开解决方案之前制作的文件或VS 2005(我遇到了问题)。

这是一个python脚本,我用它来清除这些文件,让我知道需要手动编辑哪些文件。

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()

3 个答案:

答案 0 :(得分:1)

它可能只是尝试将其添加到您的VS实例上。您必须删除缓存,以便VS认为它不再位于SS

之下
  1. 在档案下 - > SourceControl - >工作区
  2. 选择SS位置
  3. 修改
  4. 选择工作文件夹
  5. 移除<!/ LI>

答案 1 :(得分:1)

那些东西是有害的! Visual Studio在任何地方都会链接到SourceSafe,包括组成sln文件的XML。

我写了一篇article关于我将sourcesafe转换为subversion的经历,并附带了我用来清除垃圾的python脚本。请注意:

1)这是非常轻微的测试。进行备份,这样就不会搞砸sln / * proj文件。在之前和之后运行你的测试套件以确保它没有搞砸了什么(怎么可能?谁知道!但是发生了奇怪的事情。)

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)

答案 2 :(得分:0)

在%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提供程序查看工作副本)。

我想通过在多个位置缓存此信息来尝试修复丢失的项目文件。但是如果这个文件被正确记录下来会很受欢迎。