Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TFS搁置与DVCS(例如Git、Mercurial)脱机提交_Git_Mercurial_Dvcs - Fatal编程技术网

TFS搁置与DVCS(例如Git、Mercurial)脱机提交

TFS搁置与DVCS(例如Git、Mercurial)脱机提交,git,mercurial,dvcs,Git,Mercurial,Dvcs,在使用同事向我的TFS介绍DVCS概念时,我遇到了以下问题: “这些‘脱机提交’与TFS搁置有何不同?我可以 使用它备份我的更改,回滚到特定更改并比较 我对搁置变更集的当前更改。“ 我得到的唯一答案是TFS搁置要求您连接到中央服务器,而DVCS不需要连接到中央服务器 你怎么回答?DVCS的“本地提交”方法与TFS工具架相比有什么明显的优势?从未使用过TFS,但我相信我明白了要点 不同之处在于,您可以在局部执行等效操作,例如在平面上。为未完成的工作设置分支,使用标记标记开发中您可能希望稍后参考的任

在使用同事向我的TFS介绍DVCS概念时,我遇到了以下问题:

“这些‘脱机提交’与TFS搁置有何不同?我可以 使用它备份我的更改,回滚到特定更改并比较 我对搁置变更集的当前更改。“

我得到的唯一答案是TFS搁置要求您连接到中央服务器,而DVCS不需要连接到中央服务器


你怎么回答?DVCS的“本地提交”方法与TFS工具架相比有什么明显的优势?

从未使用过TFS,但我相信我明白了要点


不同之处在于,您可以在局部执行等效操作,例如在平面上。为未完成的工作设置分支,使用标记标记开发中您可能希望稍后参考的任何点。可以混合和匹配,将当前提示与另一个分支、此分支上的上一个标记、另一个分支上的标记、任意两个标记,甚至是您希望以某种方式拾取的随机提交进行比较。无需提前计划开发线上有用的“标记”。对于历史的可视化视图
gitk
是一个很大的帮助。一个很好的优势是,没有人需要了解你的笨拙和愚蠢的实验,所有这些都是你想要的隐私。您当然可以为备份目的设置远程存储库(这只需要远程端的
git
ssh
,并且有规律地将
git推送到那里),并且只发送给官方,公共存储库—您希望其他人看到的内容。

关键区别在于DVCS脱机提交更加灵活。它们允许您准备整个系列的变更集,然后可以一次性作为一个组发布。您还可以使用它们做一些聪明的事情,例如重新排列它们、组合它们、将它们分开,甚至删除其中的一些。另一方面,使用TFS搁置集时,一次只能在本地使用一个变更集

假设您已经做了10个单独的更改,编号为1到10。在DVCS中,您只需在每次更改后签入,然后在完成一次操作后推送到原点。使用TFS,您将得到十个搁置集,每个搁置集都包含您的工作与存储库中最新版本之间的差异。它们将如下所示:

  • 变化1
  • 改变1+改变2
  • 改变1+改变2+改变3
  • 等等

    这意味着您不能只使用一个命令发布一系列变更集(如在git push origin master中),您必须一次取消一个变更集的发布,然后逐个将其签入。仅此一项就已经够麻烦的了,但除此之外,第二个和后续的变更集都会给您带来合并冲突,因为您正在应用已经应用的早期变更

    此外,您控制发布哪些更改的选项非常有限。如果只想签入更改1、2、4、6-8和10,而忽略更改3、5和9,则无法执行此操作。您也无法对它们进行重新排序,也无法压缩不连续的更改范围


    这样做的结果是,在TFS中,即使有搁置,也不可能坚持每小时在本地签入几次的最佳做法,确保每次签入只进行一次更改,然后在发布更改之前进行整理。结果将是一个由更大、更臃肿的签入组成的历史记录,这些签入更难理解,而且如果您需要跟踪引入错误的修订版,那么就没那么有用。

    老实说,我喜欢使用TFS,但搁置很麻烦。它不是我第一次使用它时所期望的,而且它看起来像是后来添加的,没有提供对它的适当访问。如果你不知道去哪里找它,它很难被发现。您已经指出了搁置和索引之间的一个区别。另一个问题是,索引允许您不时提交我们拥有的内容。我没有使用TFS,只使用git。在Git中,我通常有一个本地提交的长分支(目前我有一个工作目录,有18个本地提交),我定期编辑中间的提交,以保持相关的变化,并不时地重新排序一些评论,通常累积错误,并将它们推到共享回购,同时保留其余的,这是正在进行的工作,当地人。TFS搁置可以做到这一点吗?Team Foundation版本控制的搁置集的想法类似于Git中的存储。他们缺乏忠诚的承诺。(此外,由于TFS支持Git,我们倾向于将集中式版本控制称为“Team Foundation版本控制”,而TFS是整个系统。