2011-09-26 30 views
1

我正在研究和学习分布式版本控制系统的基础知识,特别是Git。在观看关于Git的Linus' Tech Talk之后,我有几个问题我没有完全理解。需要注意的是,我来自SVN,基于Windows的背景,所以我的所有问题都是从该环境构建的。关于Git的一些(基础)问题和说明

  1. 如何合并到其他人的分支处理?也就是说,Joe和Jane都是从主管/主管分支出来的,而Joe想合并Jane在分支中所做的更改,这是如何完成的?为了让我的问题更具体 - 如果乔在阿根廷,简在俄罗斯,这是如何完成的?每个Git分支是否都有一台能够完成这些任务的服务器?或者是一个中央服务器仍然负责跟踪所有当前分支机构和他们居住的地方? Git如何知道所有这些(可能有数千个)分支机构在哪里生活? (特别是在Windows环境下!)

  2. Linus谈到没有备份,说这是不必要的,因为每个人都有他的代码副本。但是,如果他克隆一个存储库,做几十行更改,提交,但不会推送......如果他的机器死亡,他是否不会损失所有的更改?我认为我正确理解这个概念(所有提交本地直到被推),但他似乎对这个问题非常讨厌,所以我很好奇。

回答

0
  1. multiple protocols混帐可以用它来存储库之间传输数据:
    • 哑HTTP - 客户端真的只是下载所需的git的目标文件,所以任何HTTP服务器的作品。但是,这浪费了带宽。
    • Smart HTTP
    • 取包通过SSH
    • 取包过了Git

最后三个都是“聪明”,在客户端和服务器合作,以避免不必要的数据传输。

您也可以使用git bundle导出一个包含您的更改的二进制文件,然后将其手动传输到其他人的计算机。

您的回购并不需要知道所有其他分支的所有位置。通常情况下,您将以remote的方式添加您推送或拉出的少数(或一个)。这基本上是存储库URL的快捷方式。但是,您仍然可以从其他网址进行推送。不管你如何获取数据

,你最终用git merge给它合并。

2.  是,莱纳斯意味着他不需要的,他已经被推东西备份。据推测(如果他真的没有备份),他经常承诺和推动。你不应该从字面上理解他,因为他通常会在他的公开声明中发挥戏剧效果。

0

我会给你一个简短的答案。让我们从2)开始。是的,你会失去数据。他意味着你不需要传统意义上的备份(每次都要制作完整目录的副本)。如果你推“备份”。如果你没有,你只会失去自上次推送以来的数据。推送与复制/粘贴不同。

1)如何合并到其他人的分支机构处理?

本质上,你的计算机上有一个git仓库,可以是一个克隆的仓库,也可以是一个全新的仓库。然后,你需要一个远程位置,你可以推送(你只需创建一个'裸'的存储库然后推送到它),或者你必须有读取其他人对你的文件的访问权限(也许在LAN上,但推送到服务器是更传统的) 。有了这个裸露的回购或其他人的阅读权限,他们可以将你的代码“拉”回到他们的回购中,并且你也可以这样做。即使人们不认识彼此并从你不知道的体力劳动中抽身,你也可以以任何顺序从任何人那里拉。 git中的魔法将会找出把所有东西放在哪里,而不是两次合并。它很好地识别冲突。

0

1)合并在本地处理 - 服务器只是执行线性时间线。

为了合并本地和远程,您的Joe将'git pull'Jane的分支(通过任何支持的协议 - 一些像文件系统访问一样简单,一些更像git + ssh混淆),解决任何冲突,以及然后可能会将他的更改推送给主人(如果他有写权限),或者将其发布给Jane以获取。如果Jane在此期间没有改变任何东西,她可以在没有任何手动合并的情况下,将Joe的合并后代码混合起来。

它是如何知道的 - 它不,你告诉它远程分支在哪里。有git(github.com)托管服务提供商,您可以在您的网络服务器上推出自己的服务,并通过任何方式告诉Joe/Jane网址

2)备份很少比每天更频繁。 Linus可能比备份更频繁 - 事实上,我使用git作为代码的备份,无论 - 多个远程,我有一个远程的我自己的代码,在每次有意义的提交后自动推送。

1

1)你将不得不公开你的repo,以便使用任何一种可用的传输机制(ssh,git-daemon等)来完成对等的push/pull操作。在Git中没有真正的服务器/客户端的概念,但一般的做法是建立一个中央存储库,人们可以像SVN中的回购一样进出。除了工作副本以外,您还可以在本地完成回购。作为一个DVCS,Git可以让您直接与团队中的其他人进行协作,然后推送到中央仓库。你将不会有这样一个中央回购站是非常罕见的。

2)莱纳斯必须一直在谈论的备份推代码并在其中驻留在本地存储库,类似于你将如何在SVN中你的工作目录更改进度无法正常工作。另外请注意,他一定是在Linux的代码,其中有数百个合作者,因此他必须提到的是,他们不必担心信息库的备份,因为每个人都有一个副本背景说话。但是,当然,除非您推送,否则您可能会失去本地更改/提交。