当前位置:  开发笔记 > 编程语言 > 正文

从Subversion签出一个文件

如何解决《从Subversion签出一个文件》经验,为你挑选了7个好方法。

"无法检出单个文件.您可以在目录级别进行最精细的检查."

使用Subversion时如何解决此问题?

我们在Subversion中有这个文件夹,我们保存所有图像.我只想查看一个文件(图像).这个文件夹真的很大,还有很多我现在不需要的东西.



1> Steve Jessop..:

简单的答案是你svn export的文件,而不是检查出来.

但那可能不是你想要的.您可能希望处理该文件并将其重新签入,而无需下载您不需要的GB垃圾.

如果你有Subversion 1.5+,那么做一个稀疏的结账:

svn checkout   --depth empty
cd 
svn up 

对于旧版本的SVN,您可能会受益于以下内容:

在遥远的过去使用修订版本检查目录,当时它不再是你不需要的垃圾.

更新所需的文件,以创建混合版本.即使您检出的修订版中不存在该文件,这也可以正常工作.

利润!

另一种方法(例如,如果目录中的垃圾邮件与创建它的版本相差太多)就是将所需文件的URL-> URL副本放入存储库中的新位置(实际上这是一个工作分支)的文件).查看该目录并进行修改.

我不确定你是否可以将修改后的副本完全合并到存储库中而没有目标的工作副本 - 我从来没有需要.如果是,那就这样做.

如果没有,那么不幸的是,您可能必须找到其他人检查完整个目录并让他们这样做.或者,当您进行修改时,其余部分将完成下载...


真正简单的解决方案是使用Web浏览器访问存储库.
@dolmen - 假设不需要修改文件,或许(并假设为该存储库运行了一个Web界面).我使用命令行SVN,所以对我来说,使用`svn export`比使用web界面更简单,如果我知道我想要什么文件.提问者已经使用了SVN,所以我猜这取决于客户端以及该客户端是否易于使用`svn export`.我发现网页界面比`svn ls`更适合浏览,但是:-)
如果您的Subversion服务器支持,SmartSVN Client将锁定单个文件。而且,有一些钩子要求在签入二进制/可执行文件之前必须先签出。要让两个人修改二进制罚款并将这些更改合并在一起并没有什么意义。这些可能是当提出此问题时不可用的新功能。

2> Mnementh..:

尝试svn export而不是svn checkout.这适用于单个文件.

限制的原因是checkout创建一个工作副本,其中包含有关存储库,修订版,属性等的元信息.元数据存储在名为".svn"的子目录中.单个文件没有子目录.


如果您只想获取特定脚本的最新版本作为部署的一部分,这是一种更好的方法.
警告:`svn`的极旧版本不会执行单个文件导出.

3> Milan Babušk..:

使用svn catsvn export.

为此,您不需要获取工作目录,但您将无法提交您所做的任何更改.如果您需要进行更改并提交它们,则需要一个工作目录,但不必完全获取它.检查目录仍然/几乎为空的修订版,然后使用'svn cat'从HEAD中提取文件.



4> GEOCHET..:

如果要查看存储库中的readme.txt而不检查它:

$ svn cat http://svn.red-bean.com/repos/test/readme.txt
这是一个README文件.你应该读这个.

提示:如果您的工作副本已过期(或者您有本地修改),并且您希望在工作副本中看到文件的HEAD修订版,则当您为其指定路径时,svn cat将自动获取HEAD修订版:

$ cat foo.c
这个文件在我的本地工作副本中,并且有我做过的更改.

$ svn cat foo.c
来自存储库的最新版本!

资源



5> Kaushik Gopa..:

接下来的答案的TortoiseSVN等效解决方案(我在新的采用SVN的情况下,我在我公司的内部文档中写了这个).我认为在这里分享也会有所帮助:

签出单个文件:Subversion不支持签出单个文件,它只支持检查目录结构.(参考:http://subversion.tigris.org/faq.html#single-file-checkout).这是因为将每个目录检出为工作副本,有关修改/文件修订的元数据将存储为内部隐藏文件夹(.svn/_svn).目前不支持单个文件(v1.6).

备选建议策略:您只需要执行一次结帐目录部分,然后您就可以直接查看单个文件.对父文件夹和目录结构进行稀疏检出.稀疏结账基本上只检出文件夹结构而不填充内容文件.所以你只检查目录结构,不需要检查所有文件,因为这是关注.参考:http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

第1步:进入存储库浏览器

步骤2:右键单击存储库中包含您要处理的所有文件的父文件夹,然后选择Checkout.

步骤3:在新的弹出窗口中,确保结帐目录指向本地PC上的正确位置.还会有一个标有"结帐深度"的下拉菜单.根据您的要求选择"仅此项目"或"即时子项,包括文件夹".建议使用第二个选项,如果要处理嵌套文件夹,可以在下次直接进行,否则必须再次对嵌套文件夹执行整个过程.

步骤4:父文件夹现在应该在您本地选择的文件夹中可用,现在正在使用SVN进行监视(现在应该存在隐藏文件夹".svn"或"_svn").现在,在存储库中,右键单击您希望单独签出的单个文件,然后选择"将项目更新为修订版"选项.现在可以处理单个文件并将其检入存储库.

我希望这有帮助.



6> 小智..:

您可以分两步完成:

    仅使用元信息签出一个空的SVN存储库:

    $ cd /tmp
    
    $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql
    

    运行svn up以更新指定的文件:

    $ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql
    



7> 小智..:

如果将文件包含在另一个文件夹的结帐中,则可以覆盖您真正需要的更新.

从SVN 1.6开始,你可以创建文件外部,一种svn链接.这意味着您可以拥有包含单个文件的另一个版本化文件夹.也可以在结帐此文件夹时提交对文件的更改.

这很简单,签出要包含文件的文件夹,只需在文件夹中添加一个属性即可

svn propedit svn:externals .

内容如下:

file.txt /repos/path/to/file.txt

提交后,该文件将出现在该文件夹的未来签出中.基本上它可以工作,但是有一些限制,如上面链接的文档中所述.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有