如何在局域网中从其他计算机上克隆Git仓库?

48

我有一个Git仓库"c:/xampp/htdocs/**" 存在于我的主PC上,其IP地址为192.168.0.6。现在我想从运行在Vmware Player上的Ubuntu服务器中克隆这个仓库。

我尝试了以下命令:

 git clone \\192.168.0.6\c:\xampp\htdocs\****

 git clone //192.168.0.6/c:/xampp/htdocs/****

从 Ubuntu 服务器中尝试,但都没有成功。

fatal: could not create work tree dir '****'.: Permission denied

我做错了什么?我应该怎么办?

7个回答

40

您应该使用命令 git daemon 来托管您的代码库,如下所示:

在充当服务器的计算机上:

git daemon --base-path=<path_to_folder_containing_project_folder> --export-all

(请注意,path_to_folder_containing_project 是包含您的项目文件夹的文件夹,它将提供该文件夹下所有的项目)

在您的客户端中:

git clone git://<local ip>/<project name>

克隆的代码库将其源指向您的局域网服务器,因此您可能希望使用 git remote set-url origin 将其指向原始源。

如果遇到问题,您可能希望使用 --verbose 选项运行 git daemon 以获取更多详细信息。


2
对我来说运行得很完美。为了更清晰,您可以考虑将<path_to_projects_folder>重新表述为<包含项目的文件夹路径> - wgwz
我在修剪/更新所有分支后仍然遇到以下问题,在接收所有对象后:fatal: read error: Invalid argumentfatal: error in sideband demultiplexer - jaques-sam
@DrumM 你尝试过使用 https://stackoverflow.com/questions/23647179/git-daemon-clone-is-not-working-in-local-area-network 这个链接吗? - Roberto
如果只需要共享一个存储库,请传递 --base-path=.。在客户端,URL 中不要给出任何子路径;只需为克隆的存储库提供一个目录名称:git clone git://<LOCAL_IP>/ DIR_NAME(注意 / 和目录名称之间的空格)。 - legends2k
1
非常感谢!运行得非常完美。需要注意的是,对于 Windows 中的“path_to_folder_containing_project”,我使用了类似于“C:/folder1/subfolder2”等的 Windows 路径语法,它完美地工作了。在实际尝试之前,我不确定是否需要在那里使用 Linux 风格或 Windows 风格的路径。 - mar10
您可以使用源计算机的网络名称,而不是 <LOCAL_IP> - Valentin Safonnikov

26

请确保在Windows中共享了您的c:/xampp/htdocs文件夹(或其子文件夹),以便您可以通过以下地址在网络上导航:

\\192.168.0.6\htdocs

然后您可以使用 file://// 进行克隆。请注意,有四个斜杠:

git clone file:////192.168.0.6/htdocs/somerepo.git

23

要访问该仓库,您必须将其共享在192.168.0.6上,或者必须是与在192.168.0.6上拥有该文件的用户相同的域用户。

如果您在192.168.0.6上共享了目录(例如使用共享名称myrepo),则可以使用//192.168.0.6/myrepo进行访问。

如果您在计算机上使用已知于192.168.0.6上的用户账户登录,则可以尝试通过管理共享来访问该仓库:

//192.168.0.6/c$/xampp/htdocs/...

始终使用正斜杠。

另一个选择是使用SSH访问远程计算机。


3
要在Windows本地网络上创建git仓库,您需要执行以下操作:
  1. 创建新的仓库

    git init --bare projectName.git

  2. 与需要的用户共享此文件夹(projectName.git)

  3. 使用ipconfig命令查找您计算机的IP地址(例如192.168.2.101)
  4. 从某个用户的计算机上运行以下命令

    git clone //192.168.2.101/projectName.git

注意:打开finder中的\\192.168.2.101,以查看projectName.git的正确路径(例如//192.168.2.101/some/path/projectName.git)


感谢您包含了 --bare 参数,现在这很有意义。我唯一的问题是,如果您已经设置了“远程”仓库,那么是否可以在“本地”机器上使用此命令 git clone //192.168.2.101/.git - tisaconundrum
@tisaconundrum 远程仓库在哪?在网络驱动器上还是在您希望运行“git clone”的同一台计算机的某个文件夹中? - MTV
1
如果在网络驱动器上,请使用“ping [network drive name] -4”获取网络驱动器的IP地址,然后从要克隆“GitBareRepo”的位置使用“git clone [networkdriveIP]\Path\To\GitBareRepo”。我正在使用Windows shell,因此有双反斜杠--如果您在Unix系统上,则将其替换为正斜杠。 - MTV
1
如果要克隆远程仓库并且该远程仓库位于包含所需克隆位置的计算机上(即,远程仓库和即将创建的本地仓库位于同一台计算机上),请使用“ file://C:\Path\To\GitBareRepo ”。 - MTV
1
感谢 @MTV 的帮助。我最终通过尝试这个方法自己回答了我的问题。即使在 .git 的开头没有名称,它确实会克隆存储库的副本。 - tisaconundrum
@MTV 非常感谢。我在 Windows 服务器上像这样克隆了一个 Git 存储库:git clone \\CompanyServer\Users\Gilbert\Documents\Projects\Myapp myapp-local-copy 可以通过从文件管理器的网络选项卡开始导航到存储库文件夹来获取整个路径。克隆用户还必须具有该文件夹的权限。因此,您可以右键单击文件夹,转到“属性”->“安全性”,然后添加用户。 - Gilbert

3
使用资源管理器(smb)将远程仓库挂载为网络共享是最简单的方法。我不能完全确定,但我认为您的路径可能有误。请尝试使用 file:///192.168.0.6\c:\xampp...

有两件事可能会出问题:
  • 您没有读取远程仓库的权限
  • 您没有在要创建仓库的位置拥有写入权限(当前工作目录或作为第二个参数传递给git clone的目录)
同时,请检查您的samba服务器是否正常工作以进行普通文件访问。

2
最近在尝试将远程计算机中的存储库克隆到同一局域网内的本地计算机时,我遇到了这个错误。 解决方法是首先确保远程计算机上的驱动器位置对于本地计算机具有正确的访问权限(可以使用Windows共享选项进行设置,读/写)。 复制远程存储库的路径。在本地计算机上,将路径粘贴到Windows资源管理器窗口中。然后复制其目录地址并将其粘贴到任何浏览器中。 现在,您应该获得一个带有主机名和正确克隆URL格式的链接。 使用此链接在本地计算机中克隆存储库。
希望这可以帮助您。 干杯。

-2

我在家里有几台不同的电脑,我想设置GIT,以便我可以从任何一台电脑访问我的代码。这花了我一点时间,因为我太习惯于使用客户端-服务器模型,其中我指定一台机器作为“服务器”,保存存储库,其他所有内容都是客户端。相反,GIT似乎更像一个合并工具,每个本地副本都是自己的“主”副本。一旦我理解了这一点,就发现设置GIT非常简单,只需要GIT本身和SSH。

要了解更多信息,请查看此链接: http://blog.lazyhacker.com/2010/04/setting-up-git-for-home-network.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接