Subversion:防止对一个文件的本地修改被提交?

Bru*_*ine 36 svn

我有一个Subversion工作副本,我对一个文件进行了一些本地修改.修改只与我有关,我不想提交它们.(存储库中的版本包含一些适合其他用户的默认值,但不适合我,这就是我想在本地覆盖它们的原因.)

请注意,虽然我不想提交更改,但我确实希望在我这样做时收到存储库中所做的任何更新svn update.此外,只有在我的工作副本中,我不想将更改提交到该文件,其他用户不应受到影响.所以svn:ignore或者提交钩子不符合我的目的.

目前,我只是这样做:

svn commit file1 file2...
Run Code Online (Sandbox Code Playgroud)

我明确指定了包含我不想提交的特定文件的更改的文件.

然而,在我工作的时候,我养成了简单写作的习惯:

svn commit -m "Log of what I just did"
Run Code Online (Sandbox Code Playgroud)

而且我担心在我不专心的时候,我会无意中使用上面的命令提交"禁止"文件.

简而言之,我正在寻找的只是一种在工作副本中"标记"文件的方法,该方法可以防止Subversion提交该文件中的更改(即使我刚刚得到一个,也不必自动排除当我尝试提交所有文件时出错,很好).有点像标记处于"冲突"状态的文件......

这样的事情存在吗?

更新:akent,谢谢你指出这个非常相似的问题.

Bru*_*ine 17

有几个答案可以工作:

  1. 创建一个预提交钩子脚本,在添加特定属性时拒绝提交.然后,您可以将此属性添加到工作副本中的文件以防止提交.
  2. TortoiseSVN将排除特殊更改列表中的文件"ignore-on-commit".但是,这并不受SVN命令行客户端的尊重.

CoverosGene建议默认命令,例如svn commit操作默认的更改列表,这样你可以在将文件分配给另一个更改列表时排除文件,但我在文档中找不到任何引用,而在我的测试中这并不是工作.

由于SVN命令行客户端没有很好的解决方案,我在这里打开了一个增强请求.该请求表明命令行客户端也可以遵守"ignore-on-commit"更改列表.

更新:这是现在的问题2858,并且有一个功能概要来处理它与svn:hold属性.


ake*_*ent 8

我理解你遇到的问题; 可能这个"禁止"文件包含仅与您的本地构建环境相关的配置设置等.我没有找到任何方法直接告诉SVN忽略版本化文件中的更改,但这是我过去使用过的解决方法.

假设您的文件被调用,比如说"build.conf".将SVN版本化文件命名为build.conf.example.然后,在Makefile或构建脚本或其他任何内容中,您可以自动将build.conf.example复制到真正的 build.conf,它仍然是无版本的.然后你svn忽略build.conf,然后每个开发人员都可以对它进行任何本地更改.

但"必须有更好的方法"......

编辑:这里几乎完全相同的问题:SVN:有没有办法将文件标记为"不提交"?


Cov*_*ene 8

在其中创建包含该文件的更改列表,然后不要关注更改列表.该文件将等待提交,但是您的常规提交(在默认的更改列表中工作)将永远不会被提取.

svn changelist mylocal file1
Run Code Online (Sandbox Code Playgroud)

将创建一个名为的变更列表mylocal并将文件分配file1给它.

  • 变更列表看起来很酷,但你说的不太正确:当我创建一个更改列表"mylocal"时,"svn commit"仍会考虑所有修改过的文件.据我所知,文档中没有提到"默认"更改列表. (8认同)

azk*_*oki 5

说到 Tortoisesvn 和变更列表,它已经附带了一个名为ignore-on-commit 的变更列表,它可以满足您的需求。


小智 5

实际上,预提交脚本可以完成这项工作.

编写一个执行'svnlook diff'的预提交脚本,如果在更改集中设置了名为'nocommit'的属性,则拒绝提交.

然后,在您的工作副本中,您可以在任何不应提交的文件上设置'nocommit'属性.如果任何文件具有'nocommit'属性,则任何后续提交都将失败.如果您以后确实需要检查文件的更改,您所要做的就是从工作副本中删除'nocommit'属性.