76

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

据我所知,export 不包括包含元数据的 .svn 目录,而 checkout 包括该 .svn 目录。然而,我的同事最近遇到了这个问题,即从签出和从 SVN 存储库导出的源编译的东西有不同的行为。它们都编译正确,但是编译svn export的那个可以工作,但是签出的那个根本不起作用。

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

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

4

9 回答 9

105

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

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

于 2009-01-07T07:26:44.797 回答
11

正如您所说,结帐包括 .svn 目录。因此它是一个工作副本,并且将具有适当的信息来进行提交(如果您有许可)。如果您进行导出,则您只是获取存储库当前状态的副本,并且无法提交任何更改。

于 2009-01-07T07:26:16.670 回答
9

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

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

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

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

于 2011-02-22T11:35:49.397 回答
6

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

于 2009-01-07T08:18:14.707 回答
2

(补充杰拉德的回答......)另一个微妙的区别是,虽然命令:

svn checkout ...repos_location/my_dir .

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

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

svn export ...repos_location/my_dir .

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

于 2011-08-12T12:25:02.717 回答
2

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

于 2009-01-07T07:37:54.273 回答
1

额外的沉思。你说 insmod 崩溃了。Insmod 加载模块。这些模块是在构建内核的另一个编译操作中构建的。内核和模块必须从相同的头文件构建等等。是在内核构建期间构建的所有模块,还是它们“存在”?

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

于 2009-01-07T18:03:07.180 回答
0

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

如果你想处理你的文件,那么你需要签出,因为它将包含 .svn 文件夹,其中包含制作工作副本的元数据,否则你会在导出时遇到错误。

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

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

于 2013-10-17T06:07:49.820 回答
-1

如果您使用的是 tortoise svn 客户端 - 在导出时 - 它会显示 ..export / checkout ,这很令人困惑,它只是导出而已。仅查看/读取使用 export ,提交使用 - “checkout”

于 2019-12-11T08:49:27.577 回答