如何使我的本地存储库可用于git-pull?

时间:2009-06-10 20:45:42

标签: git pull git-pull working-copy

我有一个工作副本存储库,我一直在工作没有问题;此存储库的原点位于GitHub上。

我想让我的工作副本存储库可用作我的构建计算机(另一个物理主机上的VM)的原点,因此我可以在构建计算机上构建和测试我对工作副本的提交,而无需首先通过GitHub。我已经有了GitHub存储库的构建,但我希望这是一个“黄金”存储库/构建;即,如果有东西进入那里,应保证对GitHub的构建通过。

我查看了有关Git网址的文档,并看到可以选择使用git://host.xz[:port]/path/to/repo.git/形式的网址(请参阅,例如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)

我错过了什么吗?

6 个答案:

答案 0 :(得分:120)

为拉出来设置存储库有五种可能性:

  • 本地文件系统git clone /path/to/repogit clone file://path/to/repo。如果你有网络文件系统,但没有非常有效地使用网络,那么最少的工作。 (这几乎是Joakim Elofsson提出的解决方案)
  • HTTP协议git clone http://example.com/repo。您需要任何 Web服务器,并且还需要运行(可能是自动地,从挂钩)git-update-server-info来生成通过“哑”协议获取/拉取所需的信息。
  • SSH git 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的一部分。
  • 捆绑:您使用git-bundle命令在服务器上生成捆绑包,以任何方式将其传输到客户端计算机(甚至通过USB),并使用git clone file.bndl进行克隆(如果克隆不起作用,你可以做“git init”,“git remote add”和“git fetch”)。

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

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

答案 1 :(得分:16)

除了JakubNarębski的答案之外,还有另外一点,更符合你原来的问题。您可以像往常一样从github克隆,然后当您想从本地仓库执行一次性拉动时,只需执行以下操作:

git pull /path/to/repo master

(而不是master,你可以放任何分支名称。)

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:1)

如果你有像

这样的路径
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来推/拉更改从一台计算机到另一台计算机。

答案 5 :(得分:0)

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