关于git:DVCS(DRCS)如何工作?

关于git:DVCS(DRCS)如何工作?

How do DVCSs (DRCSs) work?

我听说过很多关于DVCS系统的好消息,尤其是关于集市的消息。 除了分布式存储库的概念外,我还看到了两个主要的优点:合并可以更好地实现自动化,并且重命名可以正确处理。

有人可以指出一些说明改进工作原理的文字吗? 集市如何知道我已重命名文件? 如果我将两个文件重命名为同一提交的一部分怎么办? 当我通过将文件内容的一半放入新文件中进行重构,重新缩进所有内容并几乎在每一行中丢失一些空格时,会发生什么情况?

换句话说,我想听听在现实生活中使用集市(或其他DVCS)的人,或知道其工作原理的人(他们)的信息。 合并真的好多了吗? 以及如何实现?

相关问题,有一个有用的答案:

为什么在Mercurial中分支和合并比在Subversion中更容易?


DVCS通过跟踪合并的父修订版来实现更好的合并。在Subversion中,当您将一个分支合并到另一个分支时,您会丢失有关合并起源的信息。在像Bazaar或Git这样的DVCS中,"合并的"修订版本以两个父修订版本结束。

在DVCS之间,重命名的处理方式有所不同。例如,Git根本不跟踪重命名,因为它对Linus并不重要。 Mercurial将它们记录为"将旧文件复制到新文件,删除旧文件"。根据Canonical的创始人Mark Shuttleworth所说,Darcs和Bazaar是唯一能够正确处理文件重命名的DVCS。

How does bazaar know that I renamed a file?

重命名由用户指定,就像添加或删除文件一样。使用" bzr rename "命令标记要重命名的文件或目录。如果已经在树中重命名了文件,则可以使用" --after"选项。

What if I rename two files as part of the same commit?

然后,为每个文件键入一次" bzr rename "。 Bazaar不会尝试猜测哪些文件已被重命名。

What happens when I refactor by putting half of the file's contents into a new file, re-indenting everything and losing some whitespace in nearly every line?

然后在新文件上键入" bzr add",因为您实际上并没有重命名它。


合并在DVCS中并不是本质上更好的方法,只是如果分支/合并不能正确工作(svn可能无法正确实现分支/合并),它们实际上将很难使用,因为您不是进行检出,而是每次从现有代码开始处理项目时,都要创建一个新分支。我认为某些专有的集中式SCS确实可以正确处理合并/分支。

它对所有这些对象的工作方式是将每个提交记录在直接非循环图(DAG)中,由此您可以使用不同的合并策略。在这里您可以找到更多信息:

http://revctrl.org/CategoryMergeAlgorithm

至少hg,bzr和git可以使用外部合并实用程序。


整洁的文章阅读

http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/


以下是有关darcs(http://darcs.net)如何处理补丁程序-http://darcs.net/manual/node9.html的讨论。


我不熟悉集市,但是git不能跟踪文件重命名。对于git,这看起来像是删除和添加。但是,git足够聪明,可以看到文件的内容已存在于其存储库中,并将跟踪它们在系统中的位置。如果您将文件拆分或合并,那么它足够聪明,可以跟踪代码段(斑点)并存储该信息。


推荐阅读

    linux命令添加文件?

    linux命令添加文件?,工作,简介,数据,系统,文件,命令,操作,文件名,内容,终端,l

    linux文件输入命令?

    linux文件输入命令?,工作,系统,地址,信息,工具,位置,命令,设备,发行,首开,lin

    文件备份命令linux?

    文件备份命令linux?,网站,系统,设备,文件,软件,网络,工具,环境,数据,地址,lin

    linux文件中剪切命令?

    linux文件中剪切命令?,位置,系统,工作,命令,发行,连续,标准,终端,文件,目录,l

    linux存储文件命令?

    linux存储文件命令?,系统,地址,工作,命令,软件,电脑,标准,底部,信息,文件,lin

    linux保存命令文件?

    linux保存命令文件?,系统,状态,命令,文件,第一,管理,电脑,模式,编辑,终端,lin

    linux私有文件命令?

    linux私有文件命令?,系统,工作,工具,命令,设备,文件,目录,位置,不了,情况,Lin

    linux系统光盘命令?

    linux系统光盘命令?,系统,工作,信息,数据,地址,命令,一致,名称,盘中,传播,如

    删除linux文件命令?

    删除linux文件命令?,名称,不了,文件夹,命令,文件,目录,方法,指令,子目录,选

    linux文件录入命令?

    linux文件录入命令?,系统,命令,网络,标准,时间,密码,名字,管理,文件,文件夹,L

    文件复制命令linux?

    文件复制命令linux?,系统,地址,文件,目录,位置,工具,命令,目标,文件名,源文

    linux命令移除文件夹?

    linux命令移除文件夹?,命令,文件夹,通用,不了,数据,名称,档案,系统,文件,目

    linux文件倒序命令?

    linux文件倒序命令?,地址,工作,管理,标准,命令,基础,系统,数据,最新,代码,lin

    命令查看linux系统?

    命令查看linux系统?,系统,信息,第一,设备,名称,软件,状态,工具,电脑,命令,如

    在linux文件后加命令?

    在linux文件后加命令?,系统,工作,命令,工具,电脑,基础,管理,情况,第一,简介,L

    linux命令删除文件夹?

    linux命令删除文件夹?,系统,名称,环境,文件夹,不了,命令,文件,数据,档案,目

    linux系统ln命令?

    linux系统ln命令?,位置,信息,系统,名称,名字,发行,盘中,文件,链接,命令,如何

    linux系统命令pwd?

    linux系统命令pwd?,密码,系统,命令,目录,工作,环境,工具,位置,不了,路径,锁定

    linux命令看文件编码?

    linux命令看文件编码?,状态,系统,文件,工具,名称,数据,命令,格式,汉字,以下,L

    linux系统as命令?

    linux系统as命令?,系统,信息,管理,设备,软件,地址,命令,工具,服务,基础,Linux