版本控制系统中源代码的本地副本

local copy of source code in version control system

在使用版本控制系统时,每个协作者都在其本地计算机上拥有代码库的本地副本。

  1. 如果版本控制崩溃了,VCS 能否通过协作者的副本中的代码库恢复?如果是,Git在这方面与VCS有何不同。

  2. 当协作者从 VCS 更新源代码时,他将只获得修补到现有文件的增量更改,还是他将获得文件本身的新版本。请告诉我 Git 在这方面与 VCS 有何不同。

  3. 我的另一个观察是,如果有许多开发人员在 VCS 上从事一个软件项目,并且假设两个开发人员 Jack 和 Tim 正在研究一个共同的功能并在同一个文件上工作.在 VCS 中,如果 Tim 希望提交 Jack 的更改以便他工作,Jack 将被迫提交他的代码。如果 Jacks 的代码有一些错误,其他合作者就无法更新他们的代码库。因此,Jack 被迫通过适当的测试来检查他的更新,只有在 Tim 可以处理他的更改之后。这是一个瓶颈,而在 Git 的情况下,Jack 和 Tim 可以在 Jack 的存储库上创建的功能分支上一起工作,Tim 可以指向 Jack 的存储库并从 Jack 的存储库中获取公共功能。一旦功能是完成 Jack 可以将他和 Tim 的更改合并到 master 分支。

我的理解对吗。如果我遗漏了上述场景中的任何其他点,请更新。

为了便于比较,我们以SVN作为我们的VCS

此致, 普拉迪普

我不是一般的VCS专家,我只熟悉cvs、svn和git,所以其他人应该补充更正...

对你的观点的回答:

  1. 作为分布式 VCS,Git 使得重建服务器存储库变得简单明了,只需克隆它,就像用户可以从服务器存储库克隆的对称方式一样。这是因为任何用户的存储库都可以像服务器存储库一样完整(如果是最新的)。对于大多数其他 VCS 而言并非如此(我自己不知道任何其他分布式 VCS,除了 git)。

实际上,尝试从用户的本地副本(使用 git 以外的大多数 VCS)恢复服务器只能恢复代码库的当前状态,而不是它的历史。另一方面,使用 Git,从用户存储库恢复整个历史记录。

  1. 用户仅获取与其本地存储库中可用的最后一次父提交相关的增量更改。这也是我所知道的其他 VCS(cvs、svn)中的典型行为。

  2. 通常在提交时不检查代码验证(例如代码编译正常),所以 Jack 原则上可以随时检查他的(损坏的)代码,让 Tim 立即可用.但是,这可能对其他相关人员不利,不被视为良好做法,公司政策、编码准则和其他此类准则明确反对这样做。

作为替代方案,Jack 可以将他的代码签入开发分支,以尽量减少对主分支的干扰。