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

时间:2008-11-24 13:30:23

标签: svn tortoisesvn

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

我会举一个例子,让我更清楚为什么要这样做。

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

#define SOME_PATH "[SOME_PATH]"

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

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

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

8 个答案:

答案 0 :(得分:66)

最高投票回答是过时的。

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

  

仅提交部分文件

     

有时您只想提交您对a所做的部分更改   文件。这种情况通常发生在你工作的时候   然后需要提交紧急修复,然后修复   碰巧在你正在处理的同一个文件中。

     

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

     

提交完成后,将恢复文件的副本   自动,并且您拥有包含所有修改的文件   没有回复。

答案 1 :(得分:12)

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

答案 2 :(得分:7)

没有

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

答案 3 :(得分:5)

一般来说是的!最新版本的torroise svn中添加了功能(1.8)请参阅release notes不幸的是,这是一个手动过程,可能不太适合您的特定用例 - 对于“我正处于中间状态”更有用新功能,并注意到一个错误,并希望只提交错误修复“情况。

根据您的情况,我使用模板文件,该模板文件在构建过程中用于创建使用的实际文件(此文件仅从模板文件创建,不存在任何其他文件)。我在svn中有tempalte文件但忽略了acutal文件。这意味着我只需要在新的结账后建立一次,然后我的工作副本就可以了 - 但是标签的值没有提交。如果我需要添加新标签,我会在tempalte文件中执行此操作并重建我的工作副本。

答案 4 :(得分:4)

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

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

答案 5 :(得分:4)

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

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

无论您使用哪种解决方案,安排某种默认值都是明智之举,以适应没有指定值的情况。

也许值得考虑是否应该在构建时或运行时应用细节 - 如果您可以安排后者,则可以更轻松地部署新版本的应用程序。

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

答案 6 :(得分:1)

你也可以定义:

  • 一个预先提交的挂钩,它将为您处理回滚,
  • 以及用于恢复文件的提交后挂钩。

哎呀...根据SVN Manual,这实际上并不是一个好主意。

  • 所有触发器都在服务器端执行(不是客户端,就像ClearCase一样)
  • Subversion保留了某些存储库数据的客户端缓存,如果以这种方式更改提交事务,那些缓存就会变得无法检测到。这种不一致可能导致意外和意外的行为。您应该只是在预提交挂钩中验证事务,而不是修改事务,如果它不符合所需要求,则拒绝提交

possible way将在提交后脚本中修改您的文件,然后将该文件作为独立更改提交,然后在另一个提交后脚本中恢复...

答案 7 :(得分:0)

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