2009-06-10 179 views
76

我有一个工作副本存储库,我一直在正常工作;此存储库的来源位于GitHub上。如何使我的本地存储库可用于git-pull?

我想使我的工作副本存储库可用作我的构建机器(另一个物理主机上的虚拟机)的原点,这样可以在构建机器上构建和测试我对工作副本的提交,而无需必须先通过GitHub。我已经为GitHub存储库构建了一个构建,但我希望这是一个“黄金”存储库/构建;也就是说,如果有内容出现,那么针对GitHub的构建应该保证通过。

我查看了关于Git URL的文档,并看到可以使用表单git://host.xz[:port]/path/to/repo.git/(请参阅,例如git-clone documentation)的URL。我希望以最简单的方式完成此操作,并且配置最少:我不想设置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) 

我这么想吗?

+0

难道你不能只在本地设置一个共享,然后从你的buildmachine做'git clone \\ workmachine \ share'吗?不是最好/最有效的方法,但最简单的做法。 – 2009-06-11 15:15:25

回答

111

五种可能性存在建立一个资料库从拉:

  • 本地文件系统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 protocolgit clone git://example.com/repo。您需要在服务器上运行git-daemon;有关详细信息,请参阅文档(您可以将其作为独立进程运行,仅用于提取,不必作为服务运行)。 git-daemon是git的一部分。
  • :您在使用git-bundle命令服务器生成包,将其转移到客户机上以任何方式(甚至通过USB),并使用git clone file.bndl克隆(如果克隆不工作,你可以做“git的初始化”, “git remote add”和“git fetch”)。

你在示例中缺少的东西可能是在服务器上运行git-daemon。这或者错误地配置了git-daemon。

不幸的是,我无法帮助您在MS Windows上运行git-daemon作为服务。尽管如此,最后版本的msysGit没有任何关于git-daemon无法正常工作的消息。

+0

好吧,所以我需要安装* something *或者每次手动将它复制到一个bundle上(我猜可能是通过脚本编写的。前三个选项是否需要git-daemon? – alastairs 2009-06-10 23:29:21

15

除了JakubNarębski的回答之外,还有另外一种方式,更符合您的原始问题。你可以从GitHub克隆就像你通常做,那么当你想从你的本地仓库进行一次性拉,只是这样做:

git pull /path/to/repo master 

(而不是主人,你可以把任何分支的名称。)

1

最近,我改变了我的Git项目之一使用sitecopy做实际的文件上传到其自身复制到一个HTTP服务器。

这是很容易,只需使用git update-server-info那么.git目录镜像到您的服务器上的HTTP访问的目录。我使用了'project.git',这很常见。

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

但是,我不推荐使用sitecopy,因为它不能让多台机器保持同步。对于我的项目,HTTP存储库是只读的,而黄金更新只来自一台机器,所以它工作得很好。

0

如果你的远程主机是相同的Windows网络中,也就是说,你可以访问它作为\远程主机, 那么你可以映射在资源管理器中的网络驱动器,比方说Z: - > \远程主机\ repodir, 之后你可以使用 'git的克隆/ Z/myproject的' 克隆项目

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 -A,git commit -m "HelloWorld"git push local master

您可以共享文件夹Project,它连接到Z:,做git clone Z:\Project - 您现在可以使用git pull origin mastergit push origin master推/从一台计算机拉动切换到另一个。

相关问题