- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很早就听说过svn的合并冲突问题。
当我得知svn之前的几个版本实现了一个称为mergeinfo
的功能时,我感到放心。似乎它的引入将使svn弹出时有足够的信息来解决合并问题。直到出现以下情况:
上图的脚本示例:
SVN=${SVN:-svn}
SVNADMIN=${SVNAMDIN:-svnadmin}
rm -rf repo wc
$SVNADMIN create repo
$SVN co file://$PWD/repo wc
cd wc
# r1
$SVN mkdir trunk branches
$SVN ci -m 'structure'
$SVN up
# r2
echo 2 > trunk/t.txt
$SVN add trunk/t.txt
$SVN ci -m 'add t.txt'
$SVN up
# r3
$SVN cp trunk branches/A
$SVN ci -m 'create branch A'
$SVN up
# r4
echo 4 > branches/A/a.txt
$SVN add branches/A/a.txt
$SVN ci -m 'add a.txt'
$SVN up
# r5
$SVN cp trunk branches/B
$SVN ci -m 'create branch B'
$SVN up
# r6
echo 6 > branches/B/b.txt
$SVN add branches/B/b.txt
$SVN ci -m 'add b.txt'
$SVN up
# r7
$SVN merge ^/branches/B branches/A
$SVN ci -m 'merge branch B into A'
$SVN up
# r8
echo 8 > branches/A/d.txt
$SVN add branches/A/d.txt
$SVN ci -m 'add d.txt'
$SVN up
# r9
$SVN merge ^/branches/A branches/B
b.txt
@
branch A
保持不变?
mergeinfo
有什么实际用途?
最佳答案
Subversion中有两种合并类型:
三点合并
两点合并(也称为重新整合合并)
假设您正在处理中继,并且您需要完成一项特殊功能。您创建功能A分支。在使用功能部件时,您希望将您在主干上所做的工作包括在功能部件A中,以便您可以跟上其他所有人的工作。 Subversion将使用三点合并。
Subversion从分支发生的角度看主干和分支Feature A之间的差异。最近的共同祖先。然后,它考虑对功能A所做的所有更改(您不想触摸)以及在主干上完成的代码更改。
然后,Subversion将合并主干上的更改,而不会覆盖分支上所做的更改。标准合并过程和Subversion都做得很好。svn:mergeinfo
进入哪里?您不想合并两次相同的更改,因此Subversion使用svn:mergeinfo
属性跟踪更改。如果Subversion看到修订版5中的干线更改已被合并,则不会重新合并该更改。这很好。
现在,您已经完成了功能,并且希望将这些更改重新合并到主干中。您执行了最后一个中继到分支合并,提交这些更改,然后从Feature分支合并回到中继。
这里有点问题。我们跟踪了通过svn:mergeinfo
从主干合并到Feature分支的内容。但是,由于我们还没有从Feature分支合并到主干,因此这里没有svn:mergeinfo
。如果尝试从Feature分支到中继的正常三点合并,则中继将假定Feature分支中的所有更改都应合并回中继。但是,其中许多功能实际上是已合并的主干更改。
确实,在这一点上,我们要进行两点合并。合并后,我们希望主干和Feature分支完全匹配。毕竟,我们现在已经定期将中继合并到Feature分支中。我们要做的是将这些功能重新整合到主干中。因此,主干将与功能分支相同。
在Subversion 1.8之前,您必须通过运行svn merge --reintegration
强制进行重新集成合并。现在,Subversion将查看合并历史记录,并确定何时应该进行重新整合合并。
现在是棘手的部分。请仔细查看修订号。这些将非常非常重要!
修订版10:我对Trunk做了最后的更改,需要将这些合并到Feature分支中。
修订版11:我将中继合并到Feature分支中。 svn:mergeinfo
将显示从修订版1到修订版10的所有中继线都在Feature分支中。由于主干上的最后一个更改是修订版10,因此这很合理。
修订版12:我将功能分支的修订版11合并到了主干中。这是重新整合合并。之后,Feature分支上的内容和主干中的内容应该完全一致。
现在,这是踢脚!
修订版13:我对中继进行了另一处更改。
现在,我想将此合并到我的Feature分支中(创建修订版14)。现在,功能分支上的svn:mergeinfo
表示什么?它表示从修订版1到修订版10的中继已合并到Feature分支中。但是,主干的修订版12和修订版13尚未发布。因此,Subversion将想要将版本12和版本13合并回Feature分支。
但是请稍等!
主干的修订版12是我将Feature分支中的所有更改合并回主干的功能!也就是说,修订版12已经包含我在Feature分支中所做的所有修订版更改。如果我将版本12合并回我的Feature分支,我要说的是,版本12在主干上的所有这些更改(实际上是在功能分支上所做的更改并合并到主干中)都需要合并到功能分支上。但是,这些更改也是在Feature分支上进行的。你能说合并冲突吗?我知道你可以!
有两种处理方法:
推荐的方法:一旦将功能分支重新集成到主干中,请删除该分支。锁定它。永远不要再使用它。别碰!这并不像听起来那样糟糕。重新整合合并后,您的主干和该功能分支仍然会匹配。从主干中删除并重新创建分支不会很糟糕。
起作用的棘手方法:我们需要做的就是欺骗Subversion,使他们认为版本12(或重新集成合并更改)已经合并到我们的Feature分支中。我们可以使用svn:mergeinfo
属性来解决问题。而且,我经常这样做。在显示trunk:1-11
的地方,我将其手动更改为trunk:1-12
。
这很棘手,但又太棘手,而且很有风险,因为Subversion已经为您提供了一种无需手动更改即可操作svn:mergeinfo
的方法。
这称为仅记录合并。
$ svn co svn://branches/feature_a
$ cd feature_a
$ svn merge --record-only -c 12 svn://trunk
$ svn commit -m "Adding in the reintegration merge back into the feature branch."
svn:mergeinfo
,而不会影响文件的实际内容。没有真正的合并完成,但是Subversion现在知道主干的修订版12已经在Feature分支中。完成此操作后,就可以重用功能分支。
svn:mergeinfo
进行了跟踪。当您将分支B合并回分支A时,您已经拥有分支A中分支B的所有更改,并且您不希望将这些更改带回到分支B。您应该使用重新集成合并:
$ cd $branch_a_working_dir
$ svn merge $REPO/branches/B
$ svn commit -m "Rev 7: All of my changes on Branch B are now in A"
$ vi d.txt
$ svn add d.txt
$ svn commit -m"Rev 8: I added d.txt"
$ cd $branch_b_working_dir
$ svn merge --reintegrate svn://branch/A # Note this is a REINTEGRATION merge!
$ svn commit -m"Rev 9: I've reintegrated Branch A into Branch B
$ cd $branch_a_working_dir
$ svn merge -c 9 --record-only $REPO/branches/b
$ svn commit -m"I've reactivated Branch A and can make further changes"
svn:mergeinfo
的工作原理,为什么必须知道您使用的是普通的三点合并还是两点重新整合合并,以及如何在激活后重新激活分支。完成了重新整合合并。
关于svn - SVN对mergeinfo的实际用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917281/
我有两个维度 DimFlag 和 DimPNL 以及一个事实表 FactAmount 。我正在寻找:当 pnl 是 stat(Is Stat=1) 时:sum (Actual x FlagId)对于
我想对包含其部分内容的文本字段执行简单搜索,但我不知道从哪里开始。我基本上想要人们对“包含搜索”的期望。如果我在 issue 中搜索 345 ,我会想要这个结果: 123456 234567 3456
我在 VBE 的 C# 插件中有这段代码(强调“VBE”:它不是 MS-Office 插件): public abstract class HostApplicationBase : IHostApp
我有一个 ImageView,它显示来自资源的图像。ImageView 的宽度是固定的 (60dp)。高度设置为 wrap_content。调整图像大小以适合此宽度(节省宽高比 - 这很完美) 问题是
我正在建立一个网站,但遇到了一个问题:谷歌浏览器开发者工具中的背景以较低/较高的分辨率延伸。当我直接从手机打开网站时,背景不适合屏幕,只是“剪切”了背景。 这是网站:https://feargames
好吧,首先,这是 HTML 模板: ... ... ... ... 如您所见,页面位于标题下方,并且通过 JS 代码可见
我读到了 BK-trees (Burkhard-Keller-Trees) 几个月前,据说这是一种保存您想通过距离度量再次读取的内容的好方法。因此,在每种情况下,您都希望通过相似性检索某些内容。 然而
在 python 中,很容易根据字符数用空格填充字符串。例如: print "aaa".ljust(10) + "end" print "www".ljust(10) + "end" 输出是: aaa
我的问题不是特定于编程语言的,而是更通用的问题,以了解人们的思维方式。 通常在大型开发公司中,每项工作都有特定的角色,例如程序员和架构师。因此架构师的观点是拥有完美的架构师和解决方案设计,另一方面程序
我想将数据传递给 then 方法,但是当我通过给它 this.passedResolve 来执行此操作时,它会得到 undefined function Promises(callback){
我希望使用 Erlang/Elixir 在金融市场创建一个平台即服务。我将在金融市场提供 AWS lambda 风格的函数,但我计划向客户分发我自己的基于 ARM 的硬件终端(基于 Nvidia Je
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我已经看到很多代码,这些代码使用Runnable的循环时间来实现某些计时器/超时。问题是,如果有人决定更改此Runnable的循环时间,则计时器将不正确。 例: #define FOO_TIMER_1
当我将 WPF DataGrid 的 ColumnHeaderHeight 设置为 Auto (double.NaN) 时,如何获取列标题的实际呈现高度? 我似乎无法在 DataGrid 类中找到该属
目前最实用的png修复方法是什么?轻量级,支持背景重复和背景位置。 最佳答案 IE7.JS在我看来: IE7.js is a JavaScript library to make Microsoft
我已经进行了长时间的搜索并尝试了常见的嫌疑人,但现在是寻求帮助的时候了。 我的 Android Activity 非常愉快地从 SQLite 加载 EditText、Spinner 和 CheckBo
因此,我在 MySQL 全文中创建精确搜索时遇到了一些困难。 在我的数据库中,我正在尝试查找标题中包含特定关键字的职位。 所以我可以尝试 WHERE MATCH(jobTitle) AGAINST (
我正在尝试将 JavaScript 包含到一个表单应用程序中,该应用程序从现场收集施工数据。我已经用谷歌搜索了这个废话,但我无法弄清楚将 html 元素保存在数组中是否合法(或者我的语法是否正确)。
我知道有六种方法可以获取 session.save_path 指令的值(phpinfo()、session_save_path()等),但当值为空字符串时(默认情况下为空字符串),实际路径可以是多个位
我知道 npm 库在安装时可以在分层树中安装同一库的多个版本,如下所示: a@0.1.0 -> b@1.0 -> c@2.0 -> b@2.0 在上面,版本0.1.0的包a被拉入
我是一名优秀的程序员,十分优秀!