首页 文章

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

提问于
浏览
44

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

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

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

#define SOME_PATH "[SOME_PATH]"

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

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

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

8 回答

  • 1

    最高投票的答案是过时的 .

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

    仅提交部分文件有时您只想提交对文件所做更改的部分内容 . 这种情况通常发生在您正在处理某些事情但随后需要提交紧急修复时,并且该修复恰好位于您正在处理的同一文件中 . 右键单击该文件并使用上下文菜单→提交后恢复 . 这将按原样创建文件的副本 . 然后你可以编辑文件,例如在TortoiseMerge中,撤消您不想提交的所有更改 . 保存这些更改后,您可以提交该文件 . 提交完成后,将自动恢复该文件的副本,并且您拥有包含未提交的所有修改的文件 .

  • 4

    不.Subversion在文件级别工作 .

  • 7

    没有 .

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

  • 5

    总的来说是的!最新版本的torroise svn中添加了功能(1.8)请参阅release notes不幸的是,这是一个手动过程,可能不太适合您的特定用例 - 对于"I'm in the middle of a new feature and have noticed a bug and want to commit just the bug fix"情况更有用 .

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

  • 4

    简短版:没有 . Subversion是一个全有或全无系统(我所知道的所有源控制系统都是如此)

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

  • 0

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

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

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

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

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

  • 12

    你也可以定义:

    • 一个预提交钩子,它将为你处理回滚,

    • 和一个用于恢复文件的提交后挂钩 .

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

    • 所有触发器都在服务器端执行(不是客户端,因为ClearCase就是这种情况)

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

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

  • 66

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

相关问题