有没有办法在TortoiseSVN中“部分”提交文件?

我想使用TortoiseSVN只提交一个文件的一部分,有没有办法做到这一点?

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

我有一个在构build过程中被replace的一些定义的文件,如下所示:

#define SOME_PATH "[SOME_PATH]" 

这个[SOME_PATH]标记在构build过程中被replace,但是当我编码时,我必须将其更改为我的机器中的实际path。

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

有什么方法可以告诉TortoiseSVN“忽略”X,Y和Z行中的一些变化吗?

顶尖的投票答案是过时的。

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

只提交部分文件

有时您只想提交对文件所做的部分更改。 这种情况通常发生在你正在做某事的时候,但是紧急的修复需要被提交,而修复恰好在你正在处理的同一个文件中。

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

提交完成后,文件的副本将自动恢复,并且具有所有未提交的修改的文件。

没有。Subversion在文件级别工作。

没有。

最好的办法是检查一下像“build_paths.h.default”这样的文件,然后在每个构build平台上,将它复制到build_paths.h,修改它以适应,然后告诉SVN IGNORE build_paths.h。 最后#程序中包含“buiild_paths.h”。

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

更长的版本:不,如果你使用类似NANT的东西来构build,你可以使用xmlpoke或类似的方法来重写构build文件的一部分。 为我们工作:)我们重写大约6 web.config文件和各种其他应用程序configuration文件上构build(以及build立一个部署包)….

你的问题的解决scheme不是让颠覆为你做这个,而是configuration你的应用程序,以便特定于环境的细节(例如[SOME_PATH]值)被存储在被检入的代码的“外部”

不pipe你是通过一个被SVN忽略的单独文件来实现,还是将这些信息存储在一个环境variables中,都取决于你的开发语言/操作系统和其他一些因素。

无论您使用哪种解决scheme,安排某种默认设置都是明智的select,以便在没有指定值的情况下使用。

也许值得考虑的是细节是应该在构build时还是运行时应用 – 如果您能安排后者,则可以更容易地部署应用程序的新版本。

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

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

对于你的情况,我使用在构build过程中使用的模板文件来创build实际使用的文件(该文件仅从模板文件创build,没有其他的东西存在)。 我有svn中的tempalte文件,但忽略了acutal文件。 这意味着我只需要在一个新的结帐后build立一次,然后我的工作副本是确定的 – 但标签的值不会被提交。 如果我需要添加新的标签,我在tempalte文件中这样做,并重build我的工作副本。

你也可以定义:

  • 一个预先提交的钩子将照顾你的回滚,
  • 和后提交挂钩来恢复您的文件。

呃…实际上这不是一个好主意,根据SVN手册 。

  • 所有触发器都在服务器端执行(不是客户端,因为ClearCase就是这样)
  • Subversion保留了某些数据库数据的客户端caching,如果你用这种方式改变了一个提交事务,那么这些caching就变得无法检测到。 这种不一致可能导致令人惊讶和意外的行为。 而不是修改事务,你应该简单地在预提交钩子中validation事务,如果不符合所需的要求,就拒绝提交

一种可能的方法是在提交后的脚本中修改文件,然后在将文件恢复到另一个提交后的脚本之前将其作为独立更改提交。

你正在寻找的是各种分布式版本控制系统,如darcs的function 。