【问题标题】:How can I make my local repository available for git-pull?如何使我的本地存储库可用于 git-pull?
【发布时间】:2010-11-01 23:01:13
【问题描述】:

我有一个工作副本存储库,我一直在使用它没有问题;此存储库的来源在 GitHub 上。

我想让我的工作副本存储库作为我的构建机器(另一个物理主机上的虚拟机)的源,这样我对我的工作副本所做的提交就可以在构建机器上构建和测试,而无需首先通过 GitHub 去。我已经为 GitHub 存储库构建了一个版本,但我希望这是一个“黄金”存储库/构建;即,如果有东西进去,应该保证针对 GitHub 的构建通过。

我查看了有关 Git URL 的文档,发现可以选择使用 git://host.xz[:port]/path/to/repo.git/ 形式的 URL(例如,请参阅 git-clone documentation)。我想以最简单的方式,用最少的配置来做到这一点:我不想为了将它发布到我的构建机器而必须设置一个 SSH 守护程序或 Web 服务器。

我正在运行 Windows 7 x64 RC,我安装了 MSysGit 和 TortoiseGit,并且我在防火墙上打开了 Git 的默认端口 (9814)。请假设工作副本仓库位于D:\Visual Studio Projects\MyGitRepo,主机名是devbox。构建机器是 Windows Server 2008 x64。我一直在构建机器上尝试以下命令,以及相关的输出:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

我错过了什么吗?

【问题讨论】:

  • 你不能只在本地设置一个共享,然后从你的 buildmachine 执行 'git clone \\workmachine\share' 吗?不是最好/最有效的方法,而是最简单的方法。

标签: git pull git-pull working-copy


【解决方案1】:

有五种可能性可以设置用于拉取的存储库:

  • 本地文件系统git clone /path/to/repogit clone file://path/to/repo。如果您有网络文件系统,则工作最少,但网络使用效率不高。 (这几乎完全是Joakim Elofsson 提出的解决方案)
  • HTTP 协议git clone http://example.com/repo。您需要任何网络服务器,并且您还需要运行(可能是通过钩子自动运行)git-update-server-info 以生成通过“哑”协议获取/拉取所需的信息。
  • SSHgit clone ssh://example.com/srv/git/repogit clone example.com:/srv/git/repo。您需要设置 SSH 服务器(SSH 守护程序),并在客户端上安装 SSH(例如 MS Windows 上的 PuTTY)。
  • git 协议git clone git://example.com/repo。您需要在服务器上运行git-daemon;有关详细信息,请参阅文档(您可以将其作为独立进程运行,仅用于获取,不必作为服务运行)。 git-daemon 是 git 的一部分。
  • bundle:您在服务器上使用git-bundle 命令生成bundle,以任何方式(甚至通过USB)将其传输到客户端计算机,然后使用git clone file.bndl 克隆(如果克隆不起作用,您可以执行“git init”、“git remote add”和“git fetch”)。

您的示例中缺少的可能是在服务器上运行 git-daemon。那个,或者错误配置 git-daemon。

不幸的是,我无法帮助您在 MS Windows 上将 git-daemon 作为服务运行。不过,关于 git-daemon 不工作的最新版本的 msysGit 公告中没有任何内容。

【讨论】:

  • 好的,所以我需要安装 something 或每次手动将其复制到一个捆绑包中(我猜可能是通过脚本编写它。前三个选项是否需要 git-daemon也一样?
  • 只有“git 协议”选项需要在服务器上运行 git-daemon。只有“SSH”和“HTTP”选项需要额外的工具:sshd(ssh 服务器)或 web 服务器。捆绑解决方案是手动解决方案。
  • 虽然问题是关于 'pull' 的,但必须警告发布者之后不要运行 'git push',因为他要克隆的存储库不是裸露的。
  • 请你详细说明一下,@yhager?
  • 请注意尝试使用本地文件系统选项的其他人:记住要转义 UNC 路径上的前导反斜杠! :-)
【解决方案2】:

除了 Jakub Narębski 的回答之外,还有另一种方式,更符合您的原始问题。您可以像往常一样从 github 克隆,然后当您想从本地 repo 执行一次性拉取操作时,只需执行以下操作:

git pull /path/to/repo master

(除了master,你可以放任何分支名称。)

【讨论】:

  • 一个小提示(或者我是如何得到这个问题的):.. in 似乎不起作用;请改用完整路径。
  • @DmitryTimofeev 这种形式(git pull <..>)现在适用于 2.25.1。是的,在 git 上开发 12 年后,我不会确定引入它的版本 :)
  • @benaja 你是说在 2.25.1 中添加了相对路径,还是在 2.25.1 之前的其他(未知)版本中添加了?
  • @Pod 是的,相对路径引用的存储库在我的环境中工作。小修正:也许它是在过去 2 年而不是 12 年推出的,因为 DmitryTimofeev 在 19 年发表评论。但是这里只记录了绝对路径:git-scm.com/docs/git-pull#URLS 但是,git-clone page 2nd example 显示了从相对路径到另一个相对路径的克隆。您可以忽略/忽略那些棘手的标志:-l -s -n(取决于您的克隆目的):git-scm.com/docs/git-clone#_examples
【解决方案3】:

ssh 路由运行良好,但需要远程 ssh 服务器。如果你有 Windows 平台,那么 Cygwin 提供了一个与 Git 一起工作的 ssh 服务器,但如果使用 Cygwin Git,则手动升级 Git(我在 http://alecthegeek.wordpress.com/2009/01/21/top-tip-upgrade-git-on-cygwin/ 写了一些提示)。

【讨论】:

    【解决方案4】:

    我最近更改了我的一个 git 项目,以使用 sitecopy 将自身复制到 HTTP 服务器来执行实际的文件上传。

    这很简单,只需使用git update-server-info 然后将 .git 目录镜像到服务器上的某个 http 可访问目录。我使用了'project.git',这很常见。

    来自http://site/project-git 的Git pull 就像一个冠军,我不需要在服务器上安装任何东西,除了FTP 访问,虽然sitecopy 也支持webdav。

    但是,我不建议使用 sitecopy,因为它不能很好地保持多台机器的同步。对于我的项目,HTTP 存储库是只读的,黄金更新仅来自一台机器,因此运行良好。

    【讨论】:

      【解决方案5】:

      如果您的远程主机在同一个 windows 网络中,即您可以作为 \remotehost 访问它, 然后你可以在资源管理器中映射网络驱动器,比如说 z: --> \remotehost\repodir, 之后你可以使用 'git clone /z/myproject' 来克隆项目

      【讨论】:

        【解决方案6】:

        如果你有这样的路径

        C:\Project\
        

        你已经git init了,所以你也有一个文件夹

        C:\Project\.git\
        

        您现在创建一个新文件夹

        C:\.git\
        

        进入该文件夹并运行git clone --bare ..\Project很重要),
        返回您的 C:\Project\ 文件夹并执行 git remote add-url local ..\.git\Project
        现在您只需执行git add -Agit commit -m "HelloWorld"git push local master

        您可以共享Project 文件夹,将其连接到Z: 并执行git clone Z:\Project - 您现在可以使用git pull origin mastergit push origin master 将更改从一台计算机推送/拉取到另一台计算机。

        【讨论】:

          猜你喜欢
          • 2012-03-29
          • 1970-01-01
          • 2012-06-29
          • 1970-01-01
          • 2019-12-07
          • 2023-03-20
          • 2020-10-10
          • 2014-09-06
          • 2016-01-11
          相关资源
          最近更新 更多