“不可能只签出一个文件。你能做的最好的签出级别是在目录级别。”
在使用Subversion时,我如何解决这个问题?
我们在Subversion中有这个文件夹,用来保存所有的图像。我只是想从其中找出一个文件(图像)。这个文件夹真的很大,里面有很多我现在不需要的东西。
“不可能只签出一个文件。你能做的最好的签出级别是在目录级别。”
在使用Subversion时,我如何解决这个问题?
我们在Subversion中有这个文件夹,用来保存所有的图像。我只是想从其中找出一个文件(图像)。这个文件夹真的很大,里面有很多我现在不需要的东西。
当前回答
你可以分两步完成:
只使用元信息检出一个空的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
其他回答
在Subversion 1.5中,可以检出目录中的(所有)文件,而无需检出任何子目录(各种——depth标志)。不是你想要的,而是一种“比所有都少”的形式。
此问题由第823期“svn检出单个文件”覆盖,最初由Eric Gillespie[1]于2002年7月27日报道。
附带的Perl脚本[2]允许您从svn签出单个文件,进行更改,并将更改提交回存储库,但是不能运行“svn up”来签出目录的其余部分。它已经在svn-1.3、1.4和1.6上进行了测试。
注意,最初托管在tigris.org上的Subversion项目被转移到了apache.org。第823期的原始URL在tigris.org上,这个不存在的URL[3]。互联网档案时光倒流机有这个原始链接[4]的副本。
1 - https://issues.apache.org/jira/browse/SVN-823?issueNumber=823
2 - https://issues.apache.org/jira/secure/attachment/12762717/2_svn-co-one-file.txt
3 - http://subversion.tigris.org/issues/show_bug.cgi?id=823
4 - https://web.archive.org/web/20170401115732/http://subversion.tigris.org/issues/show_bug.cgi?id=823
简单的答案是导出文件,而不是签出它。
但这可能不是你想要的。您可能希望处理该文件并将其签入,而不必下载不需要的GB垃圾文件。
如果你使用的是Subversion 1.5+,那么执行稀疏签出:
svn checkout <url_of_big_dir> <target> --depth empty
cd <target>
svn up <file_you_want>
对于较旧版本的SVN,您可能会从以下方面受益:
使用很久以前的修订版签出目录,那时它没有那么多你不需要的垃圾。 更新您想要的文件,以创建混合修订。即使该文件在您签出的版本中不存在,这也可以工作。 利润!
另一种选择(例如,如果目录有太多来自创建它的修订的垃圾)是将您想要的文件的URL->URL复制到存储库中的新位置(实际上这是文件的一个工作分支)。检查该目录并进行修改。
我不确定是否可以在没有目标的工作副本的情况下将修改后的副本完全合并到存储库中—我从来没有必要这样做。如果是,那就这么做。
如果没有,那么不幸的是,你可能不得不找到其他人谁有整个目录检查,并让他们做。或者当你完成修改的时候,剩下的部分已经下载完成了……
我想将单个文件签出到一个目录,而该目录不是工作副本的一部分。
让我们通过以下URL获取该文件:http://subversion.repository.server/repository/module/directory/myfile
svn co http://subversion.repository.server/repository/module/directory/myfile /**directoryb**
因此,我签出了包含目标文件的给定目录,我想要获得一个虚拟目录,(以/etc结尾的URL为etcb)。
然后,我从目标目录中我不需要的所有文件中清空文件.svn/entries,只留下我想要的文件。在这个.svn/entries文件中,每个文件都有一个带有其属性的记录,因此只保留关于您想要获取和保存的文件的记录。
现在你只需要复制。”到目录,这将是一个新的“工作副本”。然后你只需要:
cp .svn /directory
cd /directory
svn update myfile
现在目录目录处于版本控制之下。不要忘记删除目录directoryb,它只是一个“临时工作副本”。
你可以分两步完成:
只使用元信息检出一个空的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