SVN 中签出与导出的区别

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

据我所知,出口不包括。包含元数据的 svn 目录,并且 checkout 包含。Svn 目录。然而,我的同事最近遇到了这样一个问题: 对于从签出源编译并从 SVN repo 导出的内容,存在不同的行为。它们都编译正确,但是从 svn export编译的那个可以工作,但是签出的那个根本不能工作。

PS: 正在编译的是嵌入式设备中使用的 Linux 2.4内核。映像可以正确编译和加载,但是检出的映像无法工作。在内抑制期间会引起内核恐慌。为什么会这样?

PPS: 我们尝试了校验和和 diff 工具来检查从 SVN 导出和签出的两个目录之间的差异。它们都是一样的,除了。Svn 目录。

107245 次浏览

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

svn export只是从一个修订中提取所有文件,并且不允许对其进行修订控制。它也不会在每个目录中添加。Svn 目录。

svn checkout允许您在所建立的目录中使用版本控制,例如您的标准命令,如 svn updatesvn commit

如果您想上传(或给某人)一个项目,请使用 export。如果您正在处理一个项目,请使用 checkout。

有没有可能构建过程正在查看子目录并包含一些不应该包含的内容?顺便说一下,您可以进行合法的签出,然后删除。Svn 及其包含的所有内容。这应该和出口一样。试着在删除元数据之前和之后编译它。

更多的想法。你说的是内燃机事故。Insmod 负载模块。这些模块是在构建内核的另一个编译操作中构建的。内核和模块必须从相同的头部构建,以此类推。所有的模块都是在内核构建过程中构建的,还是“已经存在”?

另一个想法是 svn 外部性(我对此知之甚少) ,它(如果使用的话)可能会影响项目的签出内容。看看出口时是否有什么不同。

是否重新运行签出或导出到现有目录中?

因为如果是,checkout 将更新工作副本,包括删除任何文件。

但导出只是简单地将所有文件从存储库传输到目的地-如果目的地是相同的目录,这意味着在存储库中删除的任何文件都不会被删除。

因此,您导出的副本可能只有工作,因为它是依赖于一个文件已被删除在存储库?

(为了补充杰拉尔德的回答...) 另一个微妙的区别是,尽管命令:

svn checkout ...repos_location/my_dir .

my_dir中的文件放入工作目录(使用 .svn文件夹)

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

svn export ...repos_location/my_dir .

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

非常简单的区别,如果你只是想看到你的项目的结构,然后去导出。

如果您希望处理您的文件,那么您需要签出,因为它将包含。Svn 文件夹,其中包含生成工作副本的元数据,否则在导出时会出现错误。

如果你做 svn export,然后编辑一些文件,然后提交,那么你会得到一个错误:

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

如果您使用 tortoise svn client-while export-it 显示。.输出/结帐,它是混乱的,它只是输出。只查看/读使用导出,提交使用-“ checkout”