相关疑难解决方法(0)

我应该使用SVN还是Git?

我正在开始一个新的分布式项目.我应该使用SVN还是Git,为什么?

svn git version-control

320
推荐指数
12
解决办法
27万
查看次数

合并:Hg/Git与SVN

我经常读到Hg(和Git和......)在合并方面比SVN更好但是我从未见过Hg/Git可以合并SVN失败的地方(或者SVN需要人工干预的地方)的实际例子.您可以发布一些分支/修改/提交/ ....-操作的逐步列表,显示SVN在Hg/Git愉快地移动时会失败的位置吗?实用,非常特殊的情况请...

一些背景:我们有几十个开发人员在使用SVN进行项目,每个项目(或一组类似项目)都在自己的存储库中.我们知道如何应用发布和功能分支,所以我们不会经常遇到问题(即,我们一直在那里,但我们已经学会克服Joel的问题 "一个程序员给整个团队造成创伤"或"需要六个开发人员两周才能重新整合分支机构").我们的发布分支非常稳定,仅用于应用错误修正.我们的中继线应该足够稳定,能够在一周内创建发布.我们还有一些开发人员或开发人员可以使用的功能分支.是的,它们在重新集成后被删除,因此它们不会使存储库混乱.;)

所以我仍然试图找到Hg/Git优于SVN的优势.我很想获得一些实践经验,但目前还没有任何我们可以移动到汞/ GIT中还没有更大的项目,所以我坚持用只含有少量由文件小型人工玩的项目.而且我正在寻找一些你可以感受到Hg/Git令人印象深刻的力量的案例,因为到目前为止我经常读到它们但却未能自己找到它们.

svn git merge mercurial dvcs

143
推荐指数
5
解决办法
2万
查看次数

真的,在Git中合并的一个具体例子比SVN更容易吗?

Stack Overflow问题如何和/或为什么在Git中合并比在SVN中更好?是一个很好的问题,有一些很好的答案.然而,它们都没有显示一个简单的例子,其中Git中的合并比SVN更好.

关于这个问题将被重复关闭的可能性是什么

  1. 具体的合并方案
  2. SVN有多难?
  3. 如何在Git中更容易合并?

几点:

  • 对于什么是DVCS而言,没有任何理念或深刻的解释.这些都很棒,但是我不希望他们的细节混淆了这个(恕我直言)的答案
  • 我现在不关心"历史性的SVN".请将现代G​​it(1.7.5)与现代SVN(1.6.15)进行比较.
  • 请不要重命名 - 我知道Git会检测重命名和移动,而SVN则不会.这很好,但我正在寻找更深层次的东西,以及不涉及重命名或移动的示例.
  • 没有rebase或其他'高级'Git操作.请告诉我合并.

svn git merge

58
推荐指数
3
解决办法
8142
查看次数

什么使DVCS中的合并变得容易?

我在Joel的软件上读到:

使用分布式版本控制,分布式部分实际上不是最有趣的部分.

有趣的是,这些系统考虑的是变化,而不是版本.

HgInit:

当我们必须合并时,Subversion会尝试查看两个版本 - 我的修改后的代码和修改过的代码 - 它会尝试猜测如何在一个大的邪恶混乱中将它们粉碎在一起.它通常会失败,产生并非真正冲突的"合并冲突"的页面和页面,只是Subversion无法弄清楚我们做了什么的地方.

相比之下,当我们在Mercurial中单独工作时,Mercurial正忙着保留一系列变更集.因此,当我们想要将我们的代码合并在一起时,Mercurial实际上有更多的信息:它知道我们每个人都改变了什么并且可以重新应用这些更改,而不仅仅是查看最终产品并试图猜测如何放置它一起.

通过查看SVN的存储库文件夹,我的印象是Subversion将每个修订版维护为变更集.据我所知,Hg正在使用变更集快照,而Git纯粹使用快照来存储数据.

如果我的假设是正确的,那么必须有其他方法使DVCS中的合并变得容易.那些是什么?

*更新:

  • 我对技术角度更感兴趣,但从非技术角度来看是可以接受的
  • 更正:
    1. Git的概念模型纯粹基于快照.快照可以存储为其他快照的差异,只是差异纯粹用于存储优化.- 拉法洛·道格尔德评论
  • 从非技术角度来看:
    1. 它只是文化:如果合并困难,DVCS根本不会工作,因此DVCS开发人员投入大量时间和精力使合并变得容易.CVCS用户OTOH习惯于糟糕的合并,因此开发人员没有动力让它工作.(为什么当你的用户为你的垃圾付出​​同样的代价时能做些好事?)
      ......
      回顾一下:DVCS的重点是拥有许多分散的存储库并不断地来回合并变化.如果没有良好的合并,DVCS根本就没用.然而,CVCS仍然可以通过糟糕的合并来生存,特别是如果供应商可以调整其用户以避免分支.- JörgWMittag回答
  • 从技术角度来看:
    1. 录制真实DAG的历史确实有帮助!我认为主要区别在于CVCS并不总是将合并记录为与几个父母的变更集,从而丢失了一些信息.- tonfa评论
    2. 因为合并跟踪,以及每个修订都知道其父母的更基本的事实....当每个修订(每次提交),包括合并提交,知道其父项(对于合并提交,意味着拥有/记住多个父项,即合并跟踪),您可以重建图(DAG =直接非循环图)的修订历史.如果您知道修订图,则可以找到要合并的提交的共同祖先.当您的DVCS知道如何找到共同的祖先时,您不需要将其作为参数提供,例如在CVS中.
      .
      请注意,两个(或更多)提交可能有多个共同的祖先.Git利用所谓的"递归"合并策略,它合并了合并基础(共同的祖先),直到你留下一个虚拟/有效的共同祖先(在一些简化中),并且可以做简单的3路合并.- JakubNarębski回答

检查在Git中合并和/或为什么在SVN中的合并更好?

svn git version-control mercurial dvcs

48
推荐指数
4
解决办法
3546
查看次数

故事板和SVN冲突

这是我们在故事板介绍之前从未处理过的问题 - 只要UI中存在冲突的可能性,我们就确保没有2个开发人员同时处理同一个XIB文件.我们避免解决XIB冲突的原因是可能存在有问题的副作用(XIB以XML格式表示,因此没有合并2个版本的"好"方法).

现在我们面临这个问题,因为我们所有的UI元素都在同一个.storyboard文件中 - 防止同时处理项目中的任何2个UI元素使得并行工作变得非常困难.

有关如何解决这个问题的任何建议?在此先感谢您的努力.

svn storyboard ios

43
推荐指数
1
解决办法
1万
查看次数

SVN和Git之间的合并有什么区别?

正如标题所暗示的那样,我很好奇为什么有这么多人吹捧Git作为分支/合并SVN的优秀替代品.我主要是好奇,因为SVN合并很糟糕,我想要一个替代解决方案.

Git如何更好地处理合并?它是如何工作的?

例如,在SVN中,如果我有以下行:

你好,世界!

然后user1将其更改为:

Hello World!1

然后user2将其更改为:

Hello World!12

然后user2提交,然后user1提交,SVN会给你一个冲突.Git可以解决这个简单的问题吗?

svn git

24
推荐指数
2
解决办法
2万
查看次数

git的具体示例合并在SVN中不起作用

我正在寻找可以在git中工作的具体示例合并,但会导致SVN中的冲突.除此之外,您在Git中从未尝试过的艰难/痛苦的SVN合并样本也没问题.

我可以识别出与我的问题相关的四类合并:

  1. 大爆炸合并
  2. 重命名/移动相关合并
  3. 在两个分支中创建目录/相同文件
  4. 纵横交错

我在这里错过了任何场景吗?

找到1-3的样本是微不足道的(在评论中找到2的样本,3作为我的答案的一部分,1几乎是任何rebase).没有人为一个成功的纵横交叉合并提供样本(看起来不是学术上的),这会在SVN中失败?

svn git merge

12
推荐指数
2
解决办法
1239
查看次数

更好,更简单的"语义冲突"的例子?

我喜欢从版本控制系统(VCS)中区分出三种不同类型的冲突:

  • 文本
  • 句法
  • 语义

一个文本的冲突是一个由合并或更新过程中检测到.这是由系统标记的.在冲突解决之前,VCS不允许提交结果.

一个句法冲突不是由VCS标记,但结果将无法编译.因此,即使是一个稍微小心的程序员也应该这样做.(一个简单的例子可能是左边的变量重命名和一些使用右边的变量添加的行.合并可能有一个未解析的符号.或者,这可能会通过变量隐藏引入语义冲突.)

最后,VCS不会标记语义冲突,结果会编译,但代码可能会出现问题.在轻微的情况下,会产生不正确的结果.在严重的情况下,可能会引发崩溃.即使是这些也应该在非常谨慎的程序员提交之前通过代码审查或单元测试来检测.

我的语义冲突的例子使用SVN(Subversion)和C++,但这些选择与问题的本质并不相关.

基本代码是:

int i = 0;
int odds = 0;
while (i < 10)
{
    if ((i & 1) != 0)
    {
        odds *= 10;
        odds += i;
    }
    // next
    ++ i;
}
assert (odds == 13579)
Run Code Online (Sandbox Code Playgroud)

Left(L)和Right(R)更改如下.

''优化'(改变循环变量的值):

int i = 1; // L
int odds = 0;
while (i < 10)
{
    if …
Run Code Online (Sandbox Code Playgroud)

svn version-control conflict

11
推荐指数
1
解决办法
2126
查看次数

Git rebase提交选择

我有一个如下所示的git树:

在此输入图像描述

由于我们使用的审核工具,我们选择改变而不是合并它们.这给我们留下了一些逻辑重复,我的分支只是删除.例如,在dev中也可以看到ssl_tests"Modification:Changing name ..."下面的更改.

现在,也许这是我对樱桃选择缺乏了解,但是那些提交有不同的哈希值,所以不同的提交是对的吗?即使它们在逻辑上是相同的.

然而,当我去修改devs ssl_tests到dev时,git设法弄清楚那些樱桃挑选的提交是上游的,然后只从ssl_tests重新定义"新功能:单元测试......"提交.

按照惯例,使用git,这太棒了!这正是我想要的!我的问题是,git如何确定如果它们有不同的哈希值,它不需要重新设置其他提交?

谢谢!斯蒂芬

git

5
推荐指数
1
解决办法
256
查看次数

Mercurial或git比svn对分支/合并有什么好处?

我听说过,例如将分支与git或mercurial合并比使用svn更容易.

在软件博客上阅读Joel的最后一篇,我并没有明白为什么.你能提供一个具体的例子,与svn相比,与git/mercurial合并导致更少的合并冲突吗?

svn git merge mercurial

4
推荐指数
2
解决办法
2142
查看次数

SVN 1.8如何与像Git和Mercurial这样的DVCS进行比较?

3年前我问过一个问题:如何和/或为什么在Git中合并比在SVN中更好?

当时我认为我们在SVN 1.6上,但现在我们已经达到了1.8,看起来合并是他们已经做了大量工作的一个领域.

那么鉴于这些变化,SVN 1.8是否赶上了像git这样的DVCS中更好的合并和分支支持?

svn git version-control mercurial dvcs

4
推荐指数
1
解决办法
567
查看次数

如果你仍然需要完成相同的步骤,那么git如何比svn merge更好地合并?

在阅读了如何和/或为什么在Git中合并比在SVN中更好? 我还是不明白.假设我有多个版本我正在维护(我需要维护所有版本,所有版本都在生产中):

  • V1.0
  • V1.1
  • V1.2
  • V1.3
  • V1.4

现在我提交了一个错误修复到v1.0(我需要在所有下一个版本中修复此错误).

现在在git和svn中我必须执行以下逻辑操作

  1. X = 1
  2. 合并到下一个分支v1.(x)
  3. 为v1检查一切正常(测试,构建).(x)
  4. x ++ goto(2)直到最后一个分支

使用git(或gerrit)的主要好处是什么?合并到下一个分支,提交,测试的逻辑操作是一样的!那有什么不同呢?(如果它只是次要的合并算法改进,对我来说并不重要.我在Subversion中有一个相当不错的自动合并解决冲突.另外我不介意检查分支v1.1在subversion中进行合并因为我有一些实用程序可以帮助我这样做,所以我没有时间投入其中).

svn git merge gerrit

2
推荐指数
1
解决办法
1242
查看次数

标签 统计

svn ×11

git ×10

merge ×5

mercurial ×4

version-control ×4

dvcs ×3

conflict ×1

gerrit ×1

ios ×1

storyboard ×1