2016-09-16 129 views
5

我已经阅读了很多信息,但仍然无法理解。假设我们有服务器机器和客户端机器。客户端通过ssh连接到服务器。对于git,服务器上没有任何身份验证。我认为最简单的配置 - 有三个客户端和一个服务器。在服务器上的git仓库存储Git - git是否需要在服务器上?

我们需要在服务器上安装git吗?我很困惑,因为git pushgit clone命令是在客户端使用git执行的。

+0

这取决于你想用服务器上的git做什么... – deceze

+0

@deceze我认为最简单的变体三个客户端和一个服务器。在服务器上存储git repo。 –

+0

你会在这里找到一些有用的信息:https://git-scm.com/book/en/v1/Git-on-the-Server – xbonez

回答

6

正如其他人所指出的,你不需要一个“服务器”在这个意义上“一个大机器的地方在互联网上”,但如果您使用git push,您在其上运行的计算机git push在技术上是客户端计算机,而您在此操作期间推送的计算机是服务器。

当您运行git push时,Git本质上运行ssh [email protected] 'git-receive-pack /path/to/repo',即它在服务器上运行git-receive-pack。然后,本地git push通过SSH连接与远程git-receive-pack通话。

简而言之:通过SSH进行推送时,您需要服务器上的Git。不一定是完整的安装,但至少可执行git-receive-pack推和git-upload-pack取/拉。

也可以使用其他协议(例如webdav)推送到没有安装Git的远程机器,但我不会推荐它。

+0

谢谢你的回答。 git-receive-pack是否通过它与客户端git一起创建了一些套接字? –

+0

并非如此:它通过连接到SSH连接的stdin/stdout进行通信。如果你的问题是“我应该在服务器上打开哪些端口”,那么你需要的只是SSH。就网络而言,它只是一个SSH连接。 –

+0

非常感谢。你甚至无法想象我无法解决这个问题多久。 –

0

Git是分布式版本控制。你不需要有服务器。你和你的朋友可以使用git pull和git push在没有服务器的情况下使用你的2台机器(分布式版本控制的优势)。

您可以随时使用免费(小型团队)服务器一样https://bitbucket.org/

1

只是为了增加已经在这里很好的答案。

当涉及到git的'服务器'的概念是混乱。我们喜欢考虑在我们认为服务于此的技术生活中存在一些“生活”的中心点。我们觉得这个想法很舒服(对或错)

作为一个分布式系统,git-ball的每个克隆副本在技术上都是存储库。

这就是说,它仍然是一个非常好的主意,有一些“中央”控制你的仓库。

Bitbucket或github,或者甚至是你自己的盒子都可以作为'主'存储库。

git的专业用途通常是用'master'回购组织的,在bitbucket上说,它只能由pull requests写入。团队成员将分配存储库,完成他们的工作,然后在提交到他们的自己的存储库后,向“主”回购商发出拉取请求。然后可以进行同行代码审查,并将成功的请求合并到主存储库中。

这促进了很多良好的做法,也意味着你有一个很好的清理存储库备份在某人elses服务。

我们(在我的组织中)可能有超过100个以这种方式运行的项目,在许多语言中运行得非常好。

有几个工作流程以此为基础。看看here合理很好的解释。