0

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

我已经从所有目录中剥离了所有各种 Visual Sourcesafe 文件,删除了 SLN 文件中的 Scc 引用和所有存在的项目文件。我也删除了 SUO 文件和所有 USER 文件。Visual Studio 仍然认为其中 2 个网站仍处于源代码控制之下,它为我将 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()
4

3 回答 3

1

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

我写了一篇关于我将 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)
于 2009-01-23T02:19:56.230 回答
1

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

  1. 在文件 -> SourceControl -> 工作区下
  2. 选择 SS 位置
  3. 编辑
  4. 选择工作文件夹
  5. 消除!
于 2009-01-23T00:11:25.007 回答
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 提供者查看工作副本的常量字符串)。

我认为试图通过在多个位置缓存此信息来修复丢失的项目文件。但是,如果该文件被正确记录,那将是受欢迎的。

于 2009-02-06T12:11:59.647 回答