48

我想使用 TortoiseSVN 提交文件的一部分,有什么方法可以做到吗?

我将举一个例子来说明我为什么要这样做。

我有一个文件,其中包含一些在构建过程中被替换的定义,如下所示:

#define SOME_PATH "[SOME_PATH]"

这个 [SOME_PATH] 标记在构建过程中被替换,但是当我编码时,我必须更改它,以便我机器中的实际路径。

所以每次我提交时,我都需要备份一些行,恢复它们,提交然后恢复备份,这有点烦人。

有没有办法告诉 TortoiseSVN “忽略” X、Y 和 Z 行的一些变化?

4

8 回答 8

74

票数最高的答案已过时。

来自 tortoiseSVN 网站: http ://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-commit.html

仅提交部分文件

有时您只想提交对文件所做的部分更改。这种情况通常发生在您正在处理某事但需要提交紧急修复程序时,并且该修复程序恰好位于您正在处理的同一文件中。

右键单击文件并使用上下文菜单→提交后恢复。这将按原样创建文件的副本。然后您可以编辑该文件,例如在 TortoiseMerge 中并撤消您不想提交的所有更改。保存这些更改后,您可以提交文件。

提交完成后,文件的副本会自动恢复,您将拥有所有未提交的修改的文件。

于 2014-01-15T23:18:56.117 回答
12

不,Subversion 在文件级别工作。

于 2008-11-24T13:32:20.210 回答
7

不。

最好的方法是检查一些文件,如“build_paths.h.default”,然后在每个构建平台上,将其复制到 build_paths.h,修改它以适应,然后告诉 SVN IGNORE build_paths.h。最后在你的程序中#include "buiild_paths.h"。

于 2008-11-24T13:33:39.863 回答
6

一般来说是的!最新版本的 torroise svn (1.8) 中添加了功能 请参阅发行说明 不幸的是,这是一个手动过程,可能不太适合您的特定用例 - 对于“我正在使用新功能和已经注意到一个错误并只想提交错误修复”的情况。

对于您的情况,我使用在构建过程中使用的模板文件来创建实际使用的文件(此文件仅从模板文件创建,没有其他内容)。我在 svn 中有模板文件,但忽略了实际文件。这意味着我只需要在新结帐后构建一次,然后我的工作副本就可以了——但标签的值没有提交。如果我需要添加新标签,我会在模板文件中添加并重建我的工作副本。

于 2013-06-27T13:02:15.843 回答
4

短版:没有。Subversion 是一个全有或全无的系统(就像我所知道的所有源代码控制系统一样)

更长的版本:不,但是如果您使用 NANT 之类的东西来构建,您可以使用 xmlpoke 或类似的东西在构建时重写部分文件。为我们工作:) 我们在构建时重写了大约 6 个 web.config 文件和各种其他应用程序配置文件(好吧,在构建部署包时)......

于 2008-11-24T13:33:16.450 回答
4

您的问题的解决方案不是让 subversion 为您执行此操作,而是配置您的应用程序,以便将环境特定的详细信息(例如 [SOME_PATH] 值)“外部”存储到签入的代码中。

您是通过标记为被 SVN 忽略的单独文件执行此操作,还是将此信息存储在环境变量中,取决于您的开发语言/操作系统和其他一些因素。

无论您使用哪种解决方案,安排某种默认值可能是明智的,以允许未指定值的情况。

是否应该在构建时或运行时应用细节也可能值得考虑 - 如果您可以安排后者,它会使应用程序的新版本的部署更加容易。

在 Web 应用程序中可以找到一个典型示例,其中需要数据库连接,但实际使用的数据库实例在开发环境和生产环境之间是不同的。在这种情况下,数据库配置是在 Web 服务器上定义的(不在应用程序中,它只是向 Web 服务器询问具有给定名称的数据库连接),开发和生产服务器具有不同的配置。然后可以将相同的Web 应用程序部署到两台服务器,并让每个应用程序实例访问适当的数据库。

于 2008-12-03T08:19:23.290 回答
2

您还可以定义:

  • 一个预提交钩子,它将为您处理回滚,
  • 和一个 post-commit 挂钩来恢复您的文件。

哎呀...实际上这不是一个好主意,根据SVN 手册

  • 所有触发器都在服务器端执行(不是客户端,ClearCase 就是这种情况)
  • Subversion 保留存储库数据的某些位的客户端缓存,如果您以这种方式更改提交事务,这些缓存将变得无法检测到陈旧。这种不一致会导致令人惊讶和意外的行为。而不是修改事务,您应该简单地在 pre-commit 钩子中验证事务,如果它不满足所需的要求,则拒绝提交

一种可能的方法是在提交后脚本中修改您的文件,然后将该文件作为独立更改提交,然后在另一个提交后脚本中恢复它......

于 2008-11-24T13:43:37.410 回答
0

您正在寻找的是各种分布式版本控制系统的功能,例如darcs

于 2008-11-24T13:57:49.253 回答