208

当谈到 GIT 时,我是一个完全的菜鸟。在过去的几天里,我刚刚迈出了第一步。我在我的笔记本电脑上设置了一个 repo,从一个 SVN 项目中拉下 Trunk(分支有一些问题,没有让它们工作),但那里似乎一切正常。

我现在希望能够从笔记本电脑拉或推到我的主桌面。原因是笔记本电脑在火车上很方便,因为我每天花 2 小时旅行,可以完成一些好工作。但是我家里的主机非常适合开发。所以我希望能够在我回家时从笔记本电脑推/拉到主计算机。我认为最简单的方法是在 LAN 上共享代码文件夹并执行以下操作:

git clone file://192.168.10.51/code

不幸的是,这似乎对我不起作用:

所以我打开一个 git bash cmd 并输入上面的命令,我在 C:\code (两台机器的共享文件夹)中,这就是我得到的:

Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

如何以最简单的方式在两台机器之间共享存储库。

还有其他位置将是官方存储点以及其他开发人员和 CI 服务器等将从中提取的位置,这只是为了让我可以在两台机器上处理同一个 repo。

根据塞巴斯蒂安的建议,我得到以下信息:

C:\code>git clone --no-hardlinks file://192.168.10.51/code
Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

**编辑 - 答案**

感谢所有帮助。我尝试了映射驱动器并且效果很好,所以我想我会回去重试而不映射。最终结果是:

git clone file://\\\\192.168.0.51\code

这很好用。

谢谢

4

9 回答 9

182

您可以通过将UNC路径应用于文件协议来指定远程的 URL。这需要您使用四个斜杠:

git clone file:////<host>/<share>/<path>

例如,如果您的主机有 IP 192.168.10.51和计算机名main,并且它有一个名为的共享code,它本身就是一个 git 存储库,那么以下两个命令应该同样有效:

git clone file:////main/code
git clone file:////192.168.10.51/code

如果 Git 存储库位于子目录中,只需附加路径:

git clone file:////main/code/project-repository
git clone file:////192.168.10.51/code/project-repository
于 2010-03-25T23:16:55.433 回答
131
$ git clone --no-hardlinks /path/to/repo

上面的命令对您的 git 存储库的目录使用 POSIX 路径表示法。对于 Windows,它是(目录C:/path/to/repo包含.git目录):

C:\some\dir\> git clone --local file:///C:/path/to/repo my_project

存储库将被克隆到C:\some\dir\my_project. 如果省略file:///部分,则--local隐含选项。

于 2010-03-25T22:46:05.240 回答
14

带有主机名的答案对我不起作用,但这确实有效:

git clone file:////home/git/repositories/MyProject.git/

于 2012-07-09T12:49:46.007 回答
9

我使用file://成功地做到了这一点,但是用一个额外的斜杠来表示绝对路径。

git clone file:///cygdrive/c/path/to/repository/

就我而言,我在 Cygwin for Windows 上使用 Git,您可以看到这是因为 /cygdrive/c 部分在我的路径中。通过对路径进行一些调整,它应该适用于任何 git 安装。

添加遥控器的工作方式相同

git remote add remotename file:///cygdrive/c/path/to/repository/
于 2014-03-19T16:35:01.373 回答
6

也许将共享映射为网络驱动器,然后执行

git clone Z:\

大多只是猜测;我总是使用 ssh 来做这些事情。当然,遵循该建议意味着您每次推入/拉出笔记本电脑时都需要映射该驱动器。我不确定您如何将 ssh 设置为在 Windows 下工作,但如果您要经常这样做,则可能值得研究。

于 2010-03-25T23:02:01.263 回答
3

不确定是因为我的 git 版本(1.7.2)还是什么,但上面列出的使用机器名称和 IP 选项的方法对我不起作用。另一个可能/可能不重要的额外细节是,repo 是我已经初始化并从另一台机器推送到的裸 repo。

我试图按照上面的建议使用以下命令克隆 project1:

$ git clone file:////<IP_ADDRESS>/home/user/git/project1
Cloning into project1...
fatal: '//<IP_ADDRESS>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

$ git clone file:////<MACHINE_NAME>/home/user/git/project1
Cloning into project1...
fatal: '//<MACHINE_NAME>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

我有用的是更简单的事情:

$ git clone ../git/project1
Cloning into project1...
done.

注意 - 即使从中克隆的存储库是裸露的,这确实会产生一个“正常”克隆,其中包含我希望的所有实际代码/图像/资源文件(与 git 存储库的内部相反)。

于 2013-08-01T22:36:25.907 回答
2

输入绝对路径或相对路径。

例如下面的第一个使用绝对路径:

(这是来自包含存储库和备份作为子文件夹的文件夹内部。还请记住,如果备份文件夹已经包含任何内容,则不会修改它。如果它不存在,将创建一个新文件夹)

~/git$ git clone --no-hardlinks ~/git/git_test1/   ~/git/bkp_repos/

以下使用相对路径:

~/git$ git clone --no-hardlinks git_test1/   bkp_repos2/
于 2013-09-19T16:41:33.310 回答
2

虽然自 Git 2.21(2019 年 2 月,见下文)起支持 UNC 路径,但 Git 2.24(2019 年第四季度)将允许

git clone file://192.168.10.51/code

不用了file:////xxx,' file://' 足以引用 UNC 路径共享。
请参阅“使用 UNC 的 Git 获取错误”。


请注意,自 2016 年以来,MingW-64与 Git for Windowsgit.exe一起打包,支持 UNC 路径。 (请参阅“ msys、msys2 和 MinGW-64 是如何相互关联的? ”)

在 Git 2.21(2019 年 2 月)中,这种支持甚至在msys2 shell 中也得到了扩展(在 UNC 路径周围有引号)。

请参阅Johannes Schindelin ( ) 的commit 9e9da23commit 5440df4(2019 年 1 月 17 日。 帮助者:Kim Gybels ( )(由Junio C Hamano 合并——提交 f5dd919中,2019 年 2 月 5 日)dscho
Jeff-G
gitster

在 Git 2.21 之前,由于 Git 的 spawn 方法git-upload-pack有一个怪癖,在传递带有反斜杠的路径时会出现问题:Git 将强制命令行通过 shell,这在 Git for Windows 中具有不同的引用语义(作为 MSYS2程序)比常规的 Win32 可执行文件(如其git.exe本身)。

症状是表单的 UNC 路径中的两个反斜杠中的第一个\\myserver\folder\repository.git剥离

现在缓解了:

mingw:特殊情况的参数sh

MSYS2 运行时尽最大努力模拟命令行通配符扩展和取消引用,这将由 Unix 系统上的调用 Unix shell 执行。

这些 Unix shell 引用规则与应用于 Windows 的 cmd 和 Powershell 的引用规则不同,使得在生成其他进程时正确引用命令行参数有点尴尬。

特别是,将打算解释为通配符git.exe的参数传递给子进程,如果它们包含反斜杠,则不会将它们解释为转义字符,例如在传递 Windows 路径时。

注意:这只是在调用 MSYS2 可执行文件时出现问题,而不是在调用 MINGW 可执行文件(如 git.exe)时出现问题。但是,我们确实经常调用 MSYS2 可执行文件,尤其是use_shell在 child_process 结构中设置标志时。

没有优雅的方法来确定.exe要执行的文件是 MSYS2 程序还是 MINGW 程序。
但是由于通过 shell 传递命令行的用例非常普遍,我们至少在执行时需要解决这个问题sh.exe

让我们引入一个丑陋的硬编码测试是否argv[0]是“ sh”,以及它是否指的是 MSYS2 Bash,以确定我们是否需要以不同于平常的方式引用参数。

这仍然不能完全解决问题,但至少它是一些东西。

顺便说一句,这也解决了在将路径传递给进程git clone \\server\repo时由于反斜杠处理不正确而失败的问题。git-upload-pack

此外,我们不仅要注意引用空格和反斜杠,还要注意大括号。
由于别名经常通过 MSYS2 Bash,并且由于别名经常获取诸如 之类的参数HEAD@{yesterday},因此这非常重要。

t/t5580-clone-push-unc.sh

于 2019-03-03T05:39:01.273 回答
2

克隆后,对我来说推送不起作用。

解决方案:克隆 repo 的位置打开 .git 文件夹和配置文件。

对于远程源 url 设置值:

[remote "origin"]
    url = file:///C:/Documentation/git_server/kurmisoftware
于 2019-11-22T12:54:01.607 回答