如何使我的本地存储库可用于 git-pull?
我有一个工作副本存储库,我一直在使用它,没有任何问题; 该存储库的来源位于 GitHub 上。
我想让我的工作副本存储库作为我的构建机器(另一个物理主机上的虚拟机)的来源,以便我对工作副本所做的提交可以在构建机器上构建和测试,而无需通过首先是 GitHub。 我已经为 GitHub 存储库构建了一个版本,但我希望这是一个“黄金”存储库/构建; 也就是说,如果那里发生了一些事情,那么针对 GitHub 的构建应该可以保证通过。
我查看了有关 Git URL 的文档,发现可以选择使用 git://host.xz[:port]/path/to/repo.git/ 形式的 URL
(例如,请参阅 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)
我错过了什么吗?
I have a working copy repository that I've been working in no problem; the origin for this repository is on GitHub.
I'd like to make my working copy repository available as the origin for my build machine (a VM on another physical host), so that commits I make to my working copy can be built and tested on the build machine without having to go via GitHub first. I already have a build for the GitHub repository going, but I'd like this to be a "golden" repository/build; i.e., if something goes in there, the build against GitHub should be guaranteed to pass.
I've looked at the documentation on Git URLs, and see that there's the option of using a URL in the form git://host.xz[:port]/path/to/repo.git/
(see, e.g., git-clone documentation). I want to do this in the simplest possible way, with the minimum of configuration: I don't want to have to set up an SSH daemon or web server just to publish this to my build machine.
I'm running Windows 7 x64 RC, I have MSysGit and TortoiseGit installed, and I have opened Git's default port (9814) on the firewall. Please assume working copy repo is at D:\Visual Studio Projects\MyGitRepo
, and the hostname is devbox
. The build machine is Windows Server 2008 x64. I have been trying the following command on the build machine, with the associated output:
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)
Am I missing something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
设置用于拉取的存储库有五种可能性:
git clone /path/to/repo
或git clone file://path/to /repo
。 如果您有网络文件系统,但网络使用效率不高,则工作量最少。 (这几乎正是 Joakim Elofsson 提出的解决方案)git 克隆 http://example.com/repo
。 您需要任何 Web 服务器,并且还需要运行(可能通过挂钩自动运行)git-update-server-info 到通过“哑”协议生成获取/拉取所需的信息。git clone ssh://example.com/srv/git/repo
或git clone example.com:/srv/git/repo
>。 您需要设置 SSH 服务器(SSH 守护进程),并在客户端上安装 SSH(例如 MS Windows 上的 PuTTY)。git克隆git://example.com/repo
。 您需要运行 git-daemon; 有关详细信息,请参阅文档(您可以将其作为独立进程运行,仅用于获取,不必作为服务运行)。 git-daemon 是 git 的一部分。您的示例中缺少的可能是在服务器上运行 git-daemon 。 那,或者错误配置 git-daemon。
不幸的是,我无法帮助您在 MS Windows 上将 git-daemon 作为服务运行。 不过,在最新版本的 msysGit 公告中,没有任何关于 git-daemon 无法工作的信息。
Five possibilities exist to set up a repository for pull from:
git clone /path/to/repo
orgit clone file://path/to/repo
. Least work if you have networked filesystem, but not very efficient use of network. (This is almost exactly solution proposed by Joakim Elofsson)git clone http://example.com/repo
. You need any web server, and you also need to run (perhaps automatically, from a hook) git-update-server-info to generate information required for fetching/pulling via "dumb" protocols.git clone ssh://example.com/srv/git/repo
orgit clone example.com:/srv/git/repo
. You need to setup SSH server (SSH daemon), and have SSH installed on client (e.g. PuTTY on MS Windows).git clone git://example.com/repo
. You need to run git-daemon on server; see documentation for details (you can run it as standalone process only for fetching, not necessary run as service). git-daemon is a part of git.git clone file.bndl
(if clone does not work, you can do "git init", "git remote add" and "git fetch").What you are missing in your example is probably running git-daemon on server. That, or misconfiguring git-daemon.
Unfortunately I cannot help you with running git-daemon as service on MS Windows. There is nothing in announcement for last version of msysGit about git-daemon not working, though.
除了 Jakub Narębski 的答案之外,还有另一种更符合您原来问题的答案。 您可以像平常一样从 github 克隆,然后当您想从本地存储库执行一次性拉取时,只需执行以下操作:(
您可以输入任何分支名称,而不是 master 。)
In addition to Jakub Narębski's answers, there is anotherway, more in-line with your original question. You could clone from github like you usually do, then when you want to perform a one-off pull from your local repo, just do this:
(instead of master you can put any branch name.)
如果您有类似的路径
并且您已经执行了 git init ,那么您还有一个文件夹
您现在创建一个新文件夹
进入该文件夹并运行 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 master
和git push origin master
将更改从一台计算机推送/拉取到另一台计算机。If you have a path like
and you did
git init
already, so you also have a folderYou now make a new folder
Go into that folder and run
git clone --bare ..\Project
(bare is important),go back to your
C:\Project\
folder and do agit remote add-url local ..\.git\Project
.Now you just do
git add -A
,git commit -m "HelloWorld"
andgit push local master
.You may share the
Project
folder, connect it toZ:
and dogit clone Z:\Project
- you can use nowgit pull origin master
andgit push origin master
to push/pull changes from one computer to another.ssh 路由运行良好,但需要远程 ssh 服务器。 如果您有 Windows 平台,那么 Cygwin 提供了一个可与 Git 配合使用的 ssh 服务器,但如果使用 Cygwin Git,请手动升级 Git(我在 http://alecthegeek.wordpress.com/2009/01/21/top-tip-upgrade-git-on-cygwin/ )。
The ssh route works well but does require a remote ssh server. If you have Windows platform then Cygwin provides a working ssh server that works with Git, but manually upgrade Git if using Cygwin Git (I wrote some hints at http://alecthegeek.wordpress.com/2009/01/21/top-tip-upgrade-git-on-cygwin/).
我最近更改了我的一个 git 项目,使用 sitecopy 将自身复制到 HTTP 服务器来执行实际的文件上传。
这非常简单,只需使用 git update-server-info 然后将 .git 目录镜像到服务器上的某个可通过 http 访问的目录即可。 我使用了相当常见的“project.git”。
来自 http://site/project-git 的 Git pull 工作起来就像冠军一样,我不需要尽管 sitecopy 也支持 webdav,但服务器上除了 FTP 访问之外还有其他任何内容。
但是,我不建议使用 sitecopy,因为它不能很好地保持多台计算机同步。 对于我的项目,HTTP 存储库是只读的,并且黄金更新仅来自一台机器,因此它运行良好。
I recently changed one of my git projects to replicate itself to an HTTP server using sitecopy to do the actual file uploads.
It's pretty easy, just use
git update-server-info
then mirror the .git directory to some http-accessible directory on your server. I used 'project.git', which is fairly common.Git pull from http://site/project-git works like a champ, and I don't have to have anything on the server except FTP access, though sitecopy supports webdav as well.
I don't recommend using sitecopy, however, as it doesn't keep multiple machines in sync well. For my project, the HTTP repository is readonly, and gold updates come from just one machine, so it works well enough.
如果您的远程主机位于同一个 Windows 网络中,即您可以通过 \remotehost 访问它,
然后你可以在资源管理器中映射网络驱动器,比方说 z: --> \remotehost\repodir,
之后您可以使用“git clone /z/myproject”来克隆项目
If your remote host is in the same windows network, i.e. you can access it as \remotehost,
then you can map network drive in explorer, let's say z: --> \remotehost\repodir,
after that you can use 'git clone /z/myproject' to clone project