Subversion忽略合并

时间:2015-06-08 13:29:40

标签: svn tortoisesvn

合并另一个分支时是否可以忽略对单个本地文件的更改?

我所拥有的是一个批处理文件,它对单个文件进行更改,然后在TortoiseSVN中启动提交对话框。这会导致每次合并时与该文件冲突,但在每种情况下,我都希望该文件的服务器版本不会干扰所有其他文件的正常冲突过程。

据我所知,在谷歌搜索或文档中我没有找到任何有希望的东西。我可能不是在寻找正确的术语,或者只是做一些非常罕见的做法。

我正在处理的项目的要求是检查当前工作副本的修订号是否显示在页脚中。我发现这样做的最简单方法是使用包含要替换的关键字的文件version.txt。我们使用只更新此文件的批处理文件,然后启动TortoiseSVN对话框,以便我们可以像以前一样使用GUI进行提交。本地工作副本和开发服务器的工作方式如下。 Production使用部署脚本来清理一些内容,以便我们可以导出特定的标记版本。

3 个答案:

答案 0 :(得分:3)

我们已经确定您的功能要求是将工作副本的当前版本合并到那里完成的任何构建中(在某些文档的页脚中)。

您当前的方法

您有一个文件version.txt,其中包含$Revision$关键字,如果启用了Subversion,则替换为Keyword Substitution 1 下的手册中所述(我的重点)

  

这...描述了...... 此文件更改了...的修订版,并且看起来像$ Revision:144 $。

在每次提交之前用脚本更新version.txt(以某种方式或其他方式),以确保此文件的最后一个修订版是工作副本所基于的分支的最新修订版。从version.txt派生修订号的过程可能对您用于确保最新修订的任意更改不敏感。

您的问题

您观察到的缺点是,当您从一个分支合并到另一个分支时,在两个分支中对version.txt进行的任意更改意味着version.txt始终存在冲突。在这样的合并之后,您需要首先解决冲突(您的提交脚本将照常自动应用新的任意更改)。

因此,您要求一种方法来忽略您的本地更改,并自动使用您要合并的存储库中的version.txt

建议的Subversion方法

您对version.txt的任意更改是您在本手册的the same page 1 的“Where $GlobalRev$?”下的框中描述的问题:< / p>

  

新用户经常被... $ Rev $混淆......由于存储库有一个全局...版本号......,很多人都认为......这......反映在... $ Rev $ .... ...经常会感到沮丧 - 没有... ...关键字......,你怎么能......得到全球修订版号??

     

... Subversion附带了一个名为svnversion的工具......用于此目的。它会抓取您的工作副本并生成它找到的修订的输出。您可以使用此...将该修订版嵌入到您的文件中。有关更多信息......,请参阅svnversion Reference 1

svnversion的输出显示工作副本中的修订范围,以及它是混合,修改和/或稀疏,例如。 41684123:4168MSP

其他方法和观察

  • 您可以继续使用当前的方法,并在合并时使用svn resolve 1 --accept theirs-full {{自动解决冲突1}} 的。
    • 您可能会发现首先合并<WC-path>更方便version.txt --accept theirs-full 1 svn merge
    • 您是否使用<Source-URL>/version.txt <WC-path>/version.txt mine-full或其他任何内容并不重要,因为您只提取修订号并忽略任意更改(只要该过程仍然有效)。
  • 您可以转换theirs-full info 1 svn 的输出。我之所以提到这是因为它是我过去使用的方法,但您可能会发现<WC-path>更合适。
  • 构建代码时,通常不会出现问题:创建和签出代码会产生svnversion代码的修订号。
  • 如果您构建在多个平台上,其中一些平台没有version.txt / svn info,那么您可以通过多个平台进行复制。 svnversion,您可以•在复制前生成ftp - 输出,•使用svn*关键字,或•在该平台上省略修订。

脚注

1 请注意,引用的是本手册的1.8版本,截至2018-12-27,该版本仍然是最新的;如有疑问,请检查http://www.svnbook.com/

<强>编辑
2015-06-16处理非$Revision$平台
2018-12-27手册的国家版本

答案 1 :(得分:1)

我不确定你的用例是什么。用户/计算机特定的文件不应该是SVN存储库的一部分。也许您可以尝试参数化批处理文件?

关于合并:原则上,应该总是合并到 clean 工作目录中。

如果您真的必须继续当前的工作方式,可以在命令行合并svn resolve之后修复工作目录(参见svn help resolve):

svn resolve --accept theirs-full <your file>

答案 2 :(得分:1)

  

批处理文件,对单个文件进行更改,然后在TortoiseSVN中启动提交对话框

糟糕的想法(tm)的共同点。 Bat文件也可以使用SVN的CLI静默提交

  

我想要那个文件的服务器版本

糟糕的不洁期限。所有节点(分支)中的所有提交文件都是&#34;服务器版本&#34;。你必须写&#34;我的&#34;或者&#34;另一个&#34;已更改文件的版本必须存储在&#34; my&#34; &#34;另一个&#34;合并后分支以获得完整答案。

简短回答现在将是:

  • 在合并完整树之前将单个(您已更改的)文件与另一个分支文件合并,使用--accept选项和所需的ARG来获取请求的结果
  • 合并完整分支