SVN中签出与导出之间的区别


74

SVN结帐和SVN导出之间的确切区别是什么?

据我所知,导出不包括包含元数据的.svn目录,而签出包含.svn目录。但是,我的同事最近遇到了一个问题,即从checkn并从SVN repo导出的从源编译的东西有不同的行为。两者都可以正确编译,但是其中一个是从svn export工程编译而来的,但是被检出的那个根本不起作用。

PS:正在编译的东西是嵌入式设备中正在使用的Linux 2.4内核。图像可以正确编译和加载,但是检出的图像不起作用。在insmod期间会导致内核崩溃。为什么会发生这种情况?

PPS:我们尝试了checksumming和diff工具来检查从SVN导出和签出的两个目录之间的差异。除了.svn目录外,它们都相同。


6
不幸的是,您的问题标题引起了许多关于结帐和导出之间差异的解释。提到崩溃可能会带来更好的帮助。
gbarry

Answers:


103

svn export只是从修订中提取所有文件,并且不允许对其进行修订控制。它也不会将每个目录都带有.svn目录。

svn checkout允许您在所创建的目录中使用版本控制,例如,标准命令(例如svn update和)svn commit


16
请注意,这确实不是他需要知道的。
gbarry

11

如您所述,签出包括.svn目录。因此,它是一个工作副本,将具有适当的信息以使提交(如果您有权限)。如果执行导出操作,则只是获取存储库当前状态的副本,并且将没有任何方式来提交任何更改。


9

您是在重新运行结帐还是将其导出到现有目录中?

因为如果需要,检出将更新工作副本,包括删除任何文件。

但是导出只会将所有文件从储备库转移到目的地-如果目的地是同一目录,这意味着不会删除存储库中删除的任何文件。

那么您导出副本可能只起作用,因为它依赖于已在存储库中删除的文件?


谢谢,这对我有用,因为我删除的文件甚至在提交后仍在显示,因为我使用的是svn export而不是svn checkout。
useranon '16

6

编译过程是否有机会调查子目录并包含不应包含的内容?顺便说一句,您可以进行法律检查,然后删除.svn及其包含的所有内容。那应该给你和出口一样的东西。尝试在删除元数据之前和之后进行编译。


之前我们已经尝试过了,但是它对我们没有用,这对我们俩来说都是令人沮丧的。
andycjw

您是将新签出与出口还是曾经签出并更新为出口的存储库进行比较?如果是后者,则可能会有一些杂物,这些杂物会被拉入构建中。

等待...!“无效”是什么意思?该构建工作正常,因此实验失败,或者该构建失败并因此证明了元数据是什么引起混淆?
gbarry

这里的“不工作”意味着合法结帐,并使用“ find”删除了.svn。名称.svn | xargs rm -rf',该构建与导出不完全一样,因为众所周知,导出只是签出而没有用于版本控制的.svn元数据
andycjw 2009年

所以,现在,如果你要删除部分的.svn(或者只是有一个空的.svn文件),你可以“分而治之”,最终发现是什么原因导致它失败。无论如何,给定无限的时间。您是否区分了两个内核映像?(以及模块图片?)
gbarry

2

(作为对Gerald的回答的补充...)另一个细微的区别是,尽管命令是:

svn checkout ...repos_location/my_dir .

将文件my_dir放入当前目录(与.svn文件夹一起)

在某些版本的svn中,命令:

svn export ...repos_location/my_dir .

my_dir在当前目录中创建一个名为的文件夹,然后将导出的文件放入其中。


2

如果要上传(或交给某人)项目,请使用导出。如果您正在处理项目,请使用checkout。


1

其他沉思。您说过insmod崩溃。Insmod加载模块。这些模块是在构建内核的另一个编译操作中构建的。内核和模块必须从相同的标头构建,依此类推。是否在内核构建过程中构建了所有模块,或者它们是否“存在”?

另一个想法,我不太了解,是svn externals,它(如果使用)会影响检出到项目中的内容。查看并查看导出时是否有任何不同。


0

非常简单的区别,如果您只想查看项目的结构,请进行导出。

而且,如果您要处理文件,则需要签出,因为它将包括.svn文件夹,该文件夹包含构成工作副本的元数据,否则在导出时会出错。

如果这样做svn export,然后编辑一些文件然后提交,则将出现错误:

../../xxx不是您的工作副本。


-1

如果您正在使用Torvise svn客户端-在导出时-它显示..export / checkout,这很令人困惑,仅是导出。仅查看/读取使用导出,提交使用-“结帐”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.