我需要一个服务器才能使用git吗?

6

如果我需要从工作场所或其他地方访问家用电脑上的文件,我需要拥有网络服务器并在那里签入文件吗?

如果我正在使用git,我是否仍然需要拥有服务器或者实际上是将文件保存在他们的服务器上?


你的问题有点模糊。如果你能提供你理想的工作流程,我们可能会更好地回答你的问题。 - Scott
到目前为止,我得到的答案正是我所需要的。unfuddle才是正确的选择。 - jDeveloper
如果你有一台旧电脑闲置着,那么你完全可以下载Ubuntu光盘并搭建一个小型服务器。 - Sneakyness
7个回答

17

首先,Git是一种分布式版本控制系统。这意味着在使用Git时,您在工作场所拥有完整的代码库,并且在家中计算机上也有完整的副本(称为克隆)。您可以在家中计算机上工作,提交更改,阅读提交消息,查看差异,切换分支等,无需不断访问工作计算机。

您的问题是如何在工作和家里同步代码库。有很多可能性:

  • 您可以在可移动存储介质上创建裸仓库(即没有工作目录),例如USB磁盘(闪存驱动器)上的代码仓库克隆。您可以通过这个仓库进行同步,从一个地方推送到它,在另一个地方拉取(fetch/pull)它。

  • 您可以使用Git托管服务,例如提到的GitHub,并使用它来同步您的代码库。但请记住,通常免费计划需要将您的代码库公开;如果要拥有私人代码库,则必须使用付费计划(付费服务)。请检查您想使用的网站提供什么。

  • 您可以使用git-bundle命令:在一侧使用“git bundle”命令生成捆绑包,然后在另一侧使用捆绑包文件而不是代码库URL进行克隆/拉取。例如:git fetch file.bndl。您可以以任何方式传输捆绑包,可以通过USB闪存驱动器传输,通过HTTP下载它(纯网页服务器就足够了),也可以通过FTP或SCP。

  • 你可以通过SSH提供你的存储库。为此,你需要在工作和家用电脑上都安装git,在服务器上安装ssh守护程序(你要从哪一边获取/推送),以及客户端上的ssh客户端。Git不需要在服务器上全局安装所有用户; 你可以通过相关选项告诉git在哪里找到适当的git二进制文件(请参阅git文档)。在Git Wiki的技巧页面中,你会找到“如何通过ssh将主机推/拉到网关后面?”提示。

  • 最后,你可以通过HTTP提供你的存储库,使用简单的Web服务器,就像发布网页一样。你需要记住运行git update-server-info来生成帮助信息。通常这是从post-update挂钩(如果存储库是非裸体的,即如果你在其中创建提交,则为post-commit)完成的; 查看示例挂钩并阅读githooks文档,以了解如何完成这个操作。

  • 另请参见我在如何使我的本地Git存储库可用于git-pull?中的回答 SO问题。


    8

    有许多托管Git存储库的解决方案,包括GitHubUnfuddle

    你提问的措辞表明你可能误解了Git(以及分布式版本控制系统)的全部内容。你可能需要阅读Unfuddle的Git介绍或类似这里的Git入门介绍。


    据我目前的理解,Git的作用类似于SourceSafe/Subversion。但是,如果我想要为这些代码进行签入,我需要一个集中式服务器。那么,GitHub是我正在寻找的集中式服务器吗? - jDeveloper
    它可以达到那个目的,绝对没问题。GitHub没有免费的私有仓库,但Unfuddle有。 - mmc

    2
    我喜欢Dropbox。 www.getdropbox.com

    丹,你真的在使用 Dropbox 同步两个 Git 存储库吗?如果家里和工作机器上的存储库都有更改,我无法相信这会起作用。这种解决方案似乎注定会破坏你的存储库。 - Nick Haddad
    不,不是同步两个git仓库。我正在将一个仓库在多台机器上同步。 - Dan Lorenc
    1
    我这里也是,在我的Dropbox中有一个裸仓库,运行良好。不过再说一遍,我是唯一访问它的人... - sebastiangeiger
    我们曾经尝试使用DropBox作为git仓库的集中位置,但是遇到了很多问题。在多次损坏后,我们意识到这是由于不同用户同时推送代码所导致的,而Dropbox无法处理这种情况。不过,我认为对于个人使用来说,DropBox是一个更好的解决方案。 - Hareen Laks

    2

    GIT是分布式版本控制系统,每个系统上都有完整的代码库副本。这使您可以采用适合自己的同步代码库的工作流程。鉴于您在问题中提到的情况,我建议选择以下两种方案之一。

    通过ssh同步家庭和工作代码库

    如果您的家用计算机和工作计算机都可以从互联网访问,则可以直接从其中一个计算机的ssh连接到另一个计算机,并将更改推送到每个本地代码库。

    1. SSH连接到您的其他计算机(“other”指代工作或家庭)
    2. 拉取任何远程代码库更改
    3. 推送任何本地代码库更改。

    通过中央代码库同步家庭和工作代码库

    此方法涉及将工作和家庭代码库的更改与第三个代码库位置同步,该位置可以是托管服务(如UnfuddleGitHub),也可以是任何提供ssh访问权限的Web托管服务。

    我更喜欢第二种方法,因为它在另一个离线位置提供了第三个代码库的副本。


    1

    Git类似于subversion/sourcesafe,但它的设计是分布式的。你可以将其作为集中式服务器来使用,也可以在同事之间进行工作。你可以使用一些其他模型,有关更多信息请参阅mmc的链接。

    GitHub可以在Web上使用,但我猜您需要在工作中托管某个东西并且不对外开放。


    0

    0

    尽管中央服务器可能会使事情变得更加容易,但您并不需要它。

    在工作中,我使用一些围绕着git-bundle的脚本,在无法相互访问的机器之间同步我的git存储库。为了移动这些捆绑包,我使用电子邮件或USB闪存驱动器。 (涉及的机器甚至无法通过IP连接访问共同的第三台机器)。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接