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


89

我有一个工作副本存储库,我一直在正常工作;该存储库的来源位于GitHub上。

我想将我的工作副本存储库用作构建机器(另一台物理主机上的虚拟机)的源,这样我对工作副本所做的提交就可以在构建机器上构建和测试,而无需经过GitHub首先。我已经有一个用于GitHub存储库的构建,但是我希望这是一个“黄金”存储库/构建;也就是说,如果有什么问题,应该保证针对GitHub的构建能够通过。

我查看了有关Git URL的文档,并发现可以使用表单中的URL git://host.xz[:port]/path/to/repo.git/(例如,参见git-clone文档)。我想用最简单的方法,用最少的配置就可以做到这一点:我不想只为了将它发布到我的构建机器上而建立一个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'吗?不是最好/最有效的方法,而是最简单的方法。
Joakim Elofsson,2009年

Answers:


133

存在五种可能性来建立用于从中提取的存储库:

  • 本地文件系统git clone /path/to/repogit clone file://path/to/repo。如果您已将文件系统联网,则工作最少,但是对网络的使用效率不是很高。(这几乎完全是Joakim Elofsson提出的解决方案)
  • HTTP协议git clone http://example.com/repo。您需要任何 Web服务器,还需要运行(也许是自动从钩子运行)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命令在服务器上生成捆绑,以任何方式(甚至通过USB)将其传输到客户端计算机,并使用进行克隆git clone file.bndl(如果克隆不起作用,则可以执行“ git init”,“ git remote add ”和“ git fetch”)。

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

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


好的,所以我需要每次手动安装某些东西或将其复制到捆绑包中(我想可能是通过脚本编写脚本。前三个选项也需要git-daemon吗?)
alastairs

1
只有“ git protocol”选项需要在服务器上运行git-daemon。仅“ SSH”和“ HTTP”选项需要额外的工具:sshd(ssh服务器)或Web服务器。捆绑软件解决方案是手动解决方案。
2009年

尽管问题是关于“拉动”的,但必须警告张贴者此后不要运行“ git push”,因为他要克隆的存储库是非裸露的。
yhager

请您详细说明一下,@ yhager?
alastairs

1
其他尝试使用本地文件系统选项的人请注意:切记在UNC路径中转义前导反斜杠!:-)
alastairs

17

除了JakubNarębski的答案外,还有另一种方式更符合您的原始问题。您可以像平常一样从github克隆,然后当您想从本地存储库执行一次性提取时,只需执行以下操作:

git pull /path/to/repo master

(您可以输入任何分支名称来代替master。)


一个小技巧(或我如何解决这个问题):..在<path / to / repo>中似乎不起作用;请改用完整路径。
德米特里·季莫菲耶夫


1

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

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

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

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


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 master,并git push origin master以推/拉的变化从一台计算机到另一台。


0

如果您的远程主机位于同一Windows网络中,即您可以以\ remotehost身份访问它,则可以在资源管理器中映射网络驱动器,假设z:-> \ remotehost \ repodir,然后可以使用'git clone / z / myproject'来克隆项目

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.