Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从VS网站中删除VSS挂钩?_Python_Visual Studio_Visual Sourcesafe - Fatal编程技术网

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

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

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

我已从所有目录中剥离了所有各种Visual Sourcesafe文件,删除了SLN文件中的Scc引用以及所有存在的项目文件。我删除了SUO文件和所有用户文件。VisualStudio仍然认为其中两个网站仍处于源代码控制之下,它为我将Scc条目添加回SLN文件中

有人知道VS是如何知道旧的源代码管理的吗?

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

下面是一个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()

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

  • 在文件->源代码控制->工作空间下
  • 选择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项目的一部分,只有天知道如何。