如何从命令行提交内容更改而不是属性?

时间:2013-06-04 05:34:03

标签: svn commit

开发人员修复了从trunk创建的分支中的错误。然后我测试分支并重新整合回主干。

最近我也在进行财产变更。有三个文件我一遍又一遍地提交回主干。我使用svn比较了修订版之间文件的内容,它们是相同的。只有一些财产改变了。

Q1:有什么办法,所以只有当我M时才会从第一列中只有svn st的命令行提交文件?

Q2:我们有什么方法可以清理主干或如何摆脱一遍又一遍地提交这三个文件?

----编辑 svn st给了我

 M      .
 M      controllers/database/udfs/searchForNameContSrch.sql
 M      controllers/eduMoodleInterface
 M      controllers/main
 M      controllers/teaching
 M      lib/utils/EduMail.php
 M      lib/views/learning/progress/reverse_template_converter.php
M       pages/carer/carer_basepage.php
M       pages/common/contact_list_detail_basepage.php
M       pages/contact/contact_basepage.php
M       pages/staff/staff_basepage.php
M       pages/student/student_basepage.php

当前的解决方案是在提交之前恢复第二列中包含M的文件。它工作但很耗时。还有其他想法吗?

2 个答案:

答案 0 :(得分:7)

我更倾向于弄清楚属性发生了什么并解决了这个问题,而不是试图忽略它们。也就是说,在这个答案的最后,有一个单行程序,如果你在Linux上,它将加速你的恢复过程。

为了这个答案,我在一个文件(window.c)上设置了一个属性,并修改了另一个文件(window.h)。

svn status
 M      window.c
M       window.h

svn用于属性的主要命令是:

svn propset answer 42 window.c
property 'answer' set on 'window.c'

将文件window.c上的'回答'设置为值42.你可能不想使用它。

svn proplist window.c
Properties on 'window.c':
  svn:keywords
  svn:eol-style
  answer

列出文件中的所有属性(没有值)。

svn propget answer window.c
42

获取特定属性的值。

svn propedit answer window.c
Set new value for property 'answer' on 'window.c'

打开一个编辑器(在我的机器上它是所有东西的纳米)并允许你编辑属性,然后在给定文件上设置它。

svn propdel answer window.c
property 'answer' deleted from 'window.c'.

删除指定的属性(这可能无法解决您的问题,我猜)。

您还可以执行svn diff以找出不同的属性:

svn diff window.c
Index: window.c
===================================================================
--- window.c    (revision 35712)
+++ window.c    (working copy)

Property changes on: window.c
___________________________________________________________________
Added: answer
## -0,0 +1 ##
+42
\ No newline at end of property

这基本上说这里唯一的变化是添加了属性'回答',值为42(并且没有换行符)。

所以我要做什么svn diff开始,找出更改内容:

svn diff controllers/database/udfs/searchForNameContSrch.sql
svn diff controllers/main

让Google知道正在更改的属性,看看你是否可以找出设置它的工具并将其关闭。

您可以尝试使用svn propdelete放弃属性,但我认为这不会有所帮助。

失败 - 快速恢复脚本

否则,如果你正在使用linux,这个内核将恢复具有属性修改但不修改内容的文件。

请在第一时间对非关键更新进行测试,是吗?!?!?

svn status | grep "^ M" | sed "s/^.\{8\}//" | while read rv; do svn revert $rv; done

那是:

  • svn status

  • 通过grep管道并过滤仅以'M'开头的行(因此它会忽略'MM' - 重要)。

  • 通过sed管道并删除前8个字符(这是文件名前的所有状态列)。

  • 将其传入循环并恢复给定的文件名。

这是在行动:

svn status
 M      window.c
M       window.h
svn status | grep "^ M" | sed "s/^.\{8\}//" | while read rv; do svn revert $rv; done
Reverted 'window.c'
svn status
M       window.h

答案 1 :(得分:1)

您写道,当重新集成回主干时,这些属性会发生变化,因此我猜更改的属性为svn:mergeinfo,但您需要验证该属性。

假设上述内容,请查看以下来源,了解mergeinfo是什么以及为什么 想要提交这些更改。此外,如果您坚持更严格的合并过程 - 即始终在trunk / branch根目录上运行合并,则可以清理这些属性并且不再使它们再次出现。这种方式mergeinfo将仅记录在那些目录上,而不是单个文件上。这样做的好处是不会在散布着mergeinfo的情况下污染您的仓库,并且还可以使您的提交差异更清晰。

来源: