如何只签出源文件?

时间:2011-06-16 10:52:51

标签: svn

我想使用Subversion并仅检出源文件(例如:仅检出.c.cpp.h文件。这可能吗 ?如果是这样,我该怎么做?

我正在尝试从以下网址获取webkit源代码:

http://svn.webkit.org/repository/webkit/releases/WebKitGTK/

我真的不想更改代码并再次检入或构建它。我只想要源文件,因为下载整个版本大约是每个版本3GB。

部分解决方案:

现在我要下载我想要的目录。但我可以递归遍历目录,然后下载遵循我想要的模式的文件。

这是我将调用的 python代码

GetAllSourceFiles('http://svn.webkit.org/repository/webkit/releases/WebKitGTK/')

def GetAllSourceFiles(directoryName):
list = svn ls directoryName
for name in list:
    if name is a file of type c,cpp or h:
       do svn export directoryName + name      
    else if name is directory:
         do GetAllSourceFiles(name)

2 个答案:

答案 0 :(得分:3)

如果您知道存储库的结构,则可以签出特定文件夹。我从未尝试过使用文件。但是你需要单独检查每个文件夹。对于典型的svn存储库

,您需要像这样编写它

for trunk

svn co  repository_url/trunk/path_to_folder checkout_destination/

for branch

svn co  repository_url/branches/name_of_branch/path_to_folder checkout_destination/

发布

svn co repository_url/releases/name_of_releases/path_to_folder checkout_destination/

修改

您可以尝试编写一个在循环中工作的脚本

使用

svn ls repository_url/releases/name_of_releases/path_to_folder

检查文件夹是否包含源文件。

如果文件夹包含源文件,则使用

下载
svn co repository_url/releases/name_of_releases/path_to_folder --non-recursive

检查下一个文件夹

答案 1 :(得分:1)

只是一个小小的修正,我知道这是一个细节,但也可能是相同的波长。当你说每个版本下载3 GB时,这不是正确的方式来看它。首次结账将是一个很大的下载。代码库到头部甚至后退版本的后续更新将大约是2个修订版之间的差异大小。

现在,我们假设您可能在驱动器空间不足或想要保存一些带宽。我正在思考你的问题,我唯一能想到的就是使用Externals definitions来检查你自己的存储库中的外部存储库。这是我能想到的唯一方法,你可以在没有第三方帮助的情况下挑选你想要的文件。但这是很多手工工作,不是很好。

另一种解决方案是以编程方式获得这些,更多的工作,但如果做得好,可以为任何项目提供更多的灵活性。我从你的配置文件中看到你似乎喜欢Java,有client libraries out there允许你获取svn ls,你解析结果只能获取这些.c和.ccp文件。但这会很慢,因为它会单独检出文件。虽然,一旦你能做到这一点,你也可以generate your External definitions in a file,从而拥有两全其美。你有svn的速度,能够灵活选择和 最好的 自动化。

Svn可以非常灵活,但是对于某些特殊需求,你必须自己一起使用该工具,并且谢天谢地在大多数语言中都有相当不错的客户端库。

祝你好运:)

<强>更新

根据this post

  

如果你有幸使用   颠覆1.6,你可以拥有外部   目录和文件的链接