我想使用TortoiseSVN只提交一个文件的一部分,有没有办法做到这一点?
我会举一个例子,让我更清楚为什么要这样做。
我有一个文件,其中包含一些在构建过程中被替换的定义,如下所示:
#define SOME_PATH "[SOME_PATH]"
这个[SOME_PATH]标签在构建过程中被替换,但是当我编码时,我必须将其更改为我机器中的实际路径。
因此,每次提交时,我都需要备份一些行,还原它们,提交然后恢复备份,这有点烦人。
有没有办法告诉TortoiseSVN“忽略”X,Y和Z行的某些变化?
答案 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,这实际上并不是一个好主意。
possible way将在提交后脚本中修改您的文件,然后将该文件作为独立更改提交,然后在另一个提交后脚本中恢复...
答案 7 :(得分:0)
您正在寻找的是各种分布式版本控制系统的功能,例如darcs。