无法单独检出一个文件。您可以进行的最精细级别的检出是在目录级别。
使用Subversion时,我该如何解决这个问题?
我们在Subversion中有一个文件夹,用于存放所有的图片。我只想从中检出一个文件(图像)。这个文件夹非常大,还有很多其他我现在不需要的东西。
无法单独检出一个文件。您可以进行的最精细级别的检出是在目录级别。
使用Subversion时,我该如何解决这个问题?
我们在Subversion中有一个文件夹,用于存放所有的图片。我只想从中检出一个文件(图像)。这个文件夹非常大,还有很多其他我现在不需要的东西。
svn export
导出文件而不是检出文件。但这可能不是您想要的。您可能希望在不必下载您不需要的大量垃圾文件的情况下,在文件上进行操作并将其检入。如果您使用的是Subversion 1.5+,则可以进行稀疏检出。svn checkout <url_of_big_dir> <target> --depth empty
cd <target>
svn up <file_you_want>
对于旧版的SVN,你可能会从以下内容中获益:
另一种选择(例如,如果目录从创建时就包含了太多垃圾)是将所需文件从URL->URL进行复制,放入存储库中的新位置(实际上这是文件的工作分支)。检出该目录并进行修改。
我不确定是否可以在没有目标工作副本的情况下完全将修改后的副本合并回存储库-我从未需要这样做过。如果可以,那么就这样做。
如果不行,那么不幸的是,你可能需要找到其他人已经检出整个目录并让他们来完成它。或者当你完成你的修改时,其余部分可能已经下载完了......
尝试使用svn export
代替svn checkout
。对于单个文件有效。
限制的原因是checkout
会创建一个工作副本,其中包含有关存储库、修订版本、属性等元信息。这些元数据存储在名为“.svn”的子目录中。而单个文件没有子目录。
svn
无法进行单个文件的导出。 - Mladen Jablanovićsvn cat $url_to_file_in_repo > $local_file_name
命令。 - cprnsvn export
而不是先使用svn checkout
再跟着使用svn up
,因为使用svn export
时不会检出任何元数据。 - mihca使用svn cat
或svn export
命令。
这样做,您无需获取工作目录,但将无法提交所做的任何更改。如果您需要进行更改并提交它们,则需要一个工作目录,但您不必完全获取它。检出目录仍然/几乎为空的修订版本,然后使用“svn cat”从HEAD中提取文件。
svn cat svn://.../my_file.txt
正是我所需要的。我在一个只有svn://
(没有http://
)的代码库中工作,最新的websvn界面似乎不提供原始文件下载(或者我们配置错误或者我太瞎了)。这种方式比为了下载一个文件而进行checkout
+up
更加简单。 - ribamar您可以分两步来完成:
检出一个只有元信息的空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
如果您所需要的内容可以通过将文件包含在另一个文件夹的检出中来实现,那么可以进行更新。
从 SVN 1.6 开始,您可以使用“文件外部定义”(file externals) ,这是一种 svn 链接。这意味着您可以有另一个带有单个文件的版本化文件夹。在此文件夹的检出中提交更改到该文件也是可能的。
很简单,检出您想要包含文件的文件夹,然后向文件夹添加一个属性即可。
svn propedit svn:externals .
带有这样内容的代码:
file.txt /repos/path/to/file.txt
cd C:\path\dir
svn checkout https://server/path/to/trunk/dir/dir/parent_dir--depth empty
cd C:\path\dir\parent_dir
svn update filename.log
(编辑filename.log)
svn commit -m "this is a comment."
做这样的事情:
mkdir <your directory>/repos/test
svn cat http://svn.red-bean.com/repos/test/readme.txt > <your directory>/repos/test/readme.txt
svn cat
命令并将输出重定向到同名文件。默认情况下,cat会将信息转储到stdio。Steve Jessop的回答对我没用。我查看了SVN的帮助文件,如果你只有一张图片,你可能不想再次将其检入,除非你正在使用Photoshop,因此导出是比检出更好的命令,因为它是无版本控制的(但这是小问题)。
--depth参数不应该是空的,而是文件,以获取立即目录中的文件。所以你会得到所有的字段,而不仅仅是一个,但是空的会从存储库返回nothing。
svn co --depth files <source> <local dest>
或者
svn export --depth files <source> <local dest>
至于其他答案,cat 只能读取文本内容,对于图片等其他内容不适用。
svn cat
的输出重定向到一个文件中。例如:svn cat svn://path/image.png >image.png
。 - undefined
svn up
命令。 - Neocortex