什么是自托管版本控制系统,它与github有何不同?我的意思是,如果我使用自托管的VCS,那么我的代码会去哪儿?我的意思是:将其上传到服务器还是将其保存在本地计算机上?如果将其上传到服务器,那么如果我重置计算机,是否可以再次访问我的代码?

评论

谢谢大家但是我不了解的一件事是,如果我使用自托管的VCS,那么我的代码又去了哪里,我的意思是它将代码上传到服务器上或保存在本地计算机上。如果它已上传到服务器上,那么如果我重置计算机,我将能够再次访问我的代码。

任何“自我托管”都意味着您要设置自己的主机(即服务器)。因此,它将托管到您的服务器,而不是云中的某些规范的“该”服务器。当下载购买的软件时,您将然后必须将其安装在某个地方;无论安装在哪里,代码都将存在于该地方。

我在自己的笔记本电脑上自行托管Subversion。 Subversion使.svn成为所有受版本控制的子目录,这就是代码的每个版本的去处

#1 楼

让我们一个字一个字地了解一下:



自我:您或您的组织拥有此东西。相比之下,GitHub.com,Azure,GitLab.com等提供的基于云的服务(请参阅Wikipedia上的此列表以获取更全面的列表)并不属于您,而是由相关服务提供商拥有。不要将代码的所有权(由其许可规定-通常由您拥有)与用于对代码执行版本控制的服务的所有权相混淆。

托管:您或您的组织对操作负责并维护这个东西。在某些情况下,这是完全相同的软件(例如,可以自行托管GitLab或在自己的数据中心内“本地”运行GitHub Enterprise的软件)。这意味着要确保其安全,对其进行任何更改,为用户的更改请求提供服务等。您还应对提供此服务所需的基础结构的某些部分负责。这可能会有所不同,具体取决于您与谁签订了服务提供协议,从一切到电源和网络,或者仅是服务的最后一层(此处是版本控制系统本身),或者介于两者之间。

“版本控制系统”(或VCS):提供控制版本所必需的功能的任何东西(软件或其他方式,但很可能是软件)。请注意,尽管Version Control和Version Control Software经常混淆,但其含义之间还是有细微的区别。

VCS一词可以指代任何版本控制系统,即使它不适用于软件,在我们的上下文中,可以假定您所引用的是适用于软件的版本控制系统。换句话说,“自托管VCS”可以被认为是:


服务及其所有组件都由您自己拥有和控制,并充当软件的版本控制系统。


通常,这可能需要形式为:


基础架构(网络/电源/服务器),
操作系统,
身份验证和授权机制,以及
VCS服务器本身(Git,SVN等)。

问题的第二部分是关于它的不同之处来自GitHub。可以进行以下对比:


在功能上,可以对GitHub进行的操作与对自托管VCS可以进行的操作之间可能存在差异。 GitHub,几乎所有由第三方托管(即不是由您托管)的VCS都是这种情况,而不仅仅是简单地进行版本控制。他们的服务中内置了协作工具,身份管理,问题跟踪等。虽然严格来说这不是VCS的一部分,但它极大地改善了使用VCS的体验,几乎达到了没有它们的情况下进行版本控制的感觉。
GitHub拥有并运营着该服务。您可能会建议更改他们的服务,API等,甚至可能会为其开放源代码产品做出贡献,但您并不拥有该服务。根据您选择的产品的SLA为您提供该产品。您无法对其进行更改。总体而言,这是一件非常好的事情,除非您自己提供VCS,但是很有可能您只是想使用该服务,而不是与其竞争。

更新以回答编辑后的问题问题:


是将其上传到服务器还是保存在我的本地计算机上?如果将其上传到服务器,那么如果我重置计算机,是否可以再次访问我的代码?


您在这里混淆了两个问题:自托管和分布式版本控制。当然,如果您自己托管在自己的计算机上,则如果计算机死机,则可能会丢失所有内容。但是,其他人只能将代码托管在一个地方,如果他们的计算机出现故障,您仍然有失去所有东西的风险。

为了解决这个问题(以及与源代码管理的集中化有关的其他几个问题),发明了分布式版本控制。 git书中有一个很好的讨论。

评论


我认为这是一个很好的答案,也许一个不错的补充就是从相反但众所周知的示例开始:“在云中”的公共服务github.com和gitlab.com并非自托管服务。

– Peter Muryshkin
19-10-30在9:09

谢谢你的建议,我会更新的

–布鲁斯·贝克尔(Bruce Becker)
19-10-30在9:10

这个答案让我有些困惑。这是否意味着由于我不拥有它或无法负责维护它而无法自托管GitLab?我知道可以自行托管GitLab,但是这个答案可能暗示没有。

–bracco23
19-10-30在14:51

是的,你有意思。可以为GitHub Enterprise提出相同的论点。我将更新答案,以明确指出我是指GitLab / GitHub.com与GitLab / GitHub产品

–布鲁斯·贝克尔(Bruce Becker)
19-10-30在14:54

您使世界的“自我”和“托管”变得比他们需要的更加复杂!自我=您的;主机=服务器。

– jpaugh
19-10-31在18:35

#2 楼

假设您拥有自己的IT基础架构,例如Linux服务器或旧的大型机,并在其上运行(托管)您选择的VCS软件,例如GIT或ChangeMan ZMF。在这种情况下,您将拥有一个自托管的VCS。与GitHub相比,GitHub是使用Git进行软件开发项目的基于Web的托管服务。

评论


这个答案没有错,但是我认为更冗长和明确的答案可能在这里也有位置:)

–布鲁斯·贝克尔(Bruce Becker)
19-10-30在8:35

#3 楼

一个例子可能价值一千个单词:

$ sudo apt install git
$ ssh 192.168.0.110
kub@host:~$ git init --bare repo1 
Initialized empty Git repository in /home/kub/repo1/
kub@host:~$ logout
Connection to 192.168.0.110 closed.


Voila,我们已经拥有一个自托管版本控制系统。让我们以它作为示例客户端:

$ git clone 192.168.0.110:repo1 /tmp/r
Cloning into '/tmp/r'...


评论


我看不到这是如何“自我”托管的。必须在任何自托管的git服务器上执行此操作或执行类似操作

–布鲁斯·贝克尔(Bruce Becker)
19-10-30在19:54

到目前为止,这是自托管的,因此代码存储在局域网中的其他计算机上。

– BernhardDöbler
19-10-31在8:49

是的,这是一个示例,但是它对OP和以后的访问者有什么启示?这是您正确设置自托管Git服务器的方式吗? 192.168.0.110是什么意思?如果该计算机的硬盘崩溃了怎么办?如果您知道自己在做什么,这可能会有所帮助,但是很明显,OP并没有帮助,这对他们没有帮助。

– CodeCaster
19-10-31在10:15

#4 楼


什么是自托管版本控制系统


在您控制和管理自己的位置托管的版本控制系统。

Git被设计为“分布式版本控制系统”,这意味着默认情况下,每个用户都具有历史记录的完整副本。完全没有必要甚至根本没有中央服务器,尽管通常这样做非常不方便。

至少,共享git repo可以简单地是一个大家都可以访问的共享目录。

然而,大多数人都想要一个比这更奇特的东西,他们可能想要让人们在回购协议上执行一些写操作而又不给他们完整的功能。可以做任何他们喜欢的事情。他们可能需要Web界面来浏览代码。他们可能想要与回购集成的问题跟踪,他们可能需要拉式请求系统。


,它与github有何不同?


Github主要作为云服务运行*,您的代码存储在拥有的服务器上由github控制。他们为git repos提供托管,以及一系列相关服务,例如问题跟踪和请求请求。最初,他们的模型是公共回购是免费的,而私人回购则要花钱。自从微软收购以来,他们已经开始免费提供有限的私人仓库,但是如果您想进行认真的私人协作,则必须付费。

云服务的优势在于您不需要无需花费任何精力来维护服务。缺点是云服务的运营商可以随时为您服务,您几乎无能为力。

使用git的风险要比使用其他云服务的风险要小一些,因为正如我前面提到的那样,每个客户端都保留了实际的版本控制历史记录,因此您可以设置一个新的git服务器,切换您的客户端,并切换到代码本身为止。有关的事情可以像以前一样继续。但是,您仍然可能会丢失其他问题,例如问题跟踪器,提取请求,权限设置等。

如果您想通过集成的Web界面自托管git服务,则可以进行问题跟踪和提取请求那么我知道的主要选项似乎是gitlab。

*他们确实为“ Github Enterprise”提供了一个自托管选项,但是他们的网站却没有说明它的价格.....

#5 楼

“自托管版本控制系统”是用于跟踪其自己的源代码的系统。

开发新的版本控制系统时,最初没有使用版本控制,也没有使用某些现有版本。最终,当版本控制系统足以处理其自己的源代码时,将达到一个重要的里程碑。在这一点上,开发人员有动力实际切换到它。

这与自增强型编译器类似:用自己的语言编写的编译器。您需要该编译器来编译该编译器,就像需要运行一个自托管版本控制系统的版本以检出其自身的源一样。

每个严肃的版本控制系统都是自托管的,因为如果不是,则表明作者对此没有信心;如果Git的开发依赖于Mercurial等其他工具,您会使用Git吗?

不要与“自我托管的存储库”相混淆,“自我托管的存储库”只是您自己托管的版本控制存储库在您控制的计算机上,而不是使用其他人的托管服务(如gitlab)。

评论


抱歉,我相信您的前提是完全错误的。这与谁“拥有”版本控制工具无关。它关系到谁拥有托管基础架构,以及是否与谁拥有受版本控制的IP相同。您得到的第一个陈述是正确的。

–伊恩W
20年8月24日在10:36