在Windows中跨本地文件系统的GIT克隆repo

时间:2010-03-25 22:34:47

标签: windows git git-clone

对于GIT来说,我是一个完整的Noob。过去几天我一直在迈出第一步。我在我的笔记本电脑上设置了一个repo,从一个SVN项目中拉下了Trunk(有一些分支机构的问题,没有让它们正常工作),但一切似乎都没问题。

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

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服务器等将从中取出的位置,这样我就可以在两台计算机上处​​理相同的存储库。

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

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

这很有效。

由于

9 个答案:

答案 0 :(得分:176)

您可以通过将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

答案 1 :(得分:119)

$ 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选项。

答案 2 :(得分:14)

主机名的答案对我不起作用 但是这样做了:

  

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

答案 3 :(得分:7)

我使用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/

答案 4 :(得分:6)

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

git clone Z:\

通常只是猜测;我总是使用ssh来做这些事情。以下结果当然意味着每次推/拉笔记本电脑时都需要映射该驱动器。我不确定你是如何装配ssh在windows下工作的,但是如果你要做很多这样的事情,可能值得调查。

答案 5 :(得分:3)

不确定是不是因为我的git版本(1.7.2)或者是什么,但上面列出的使用机器名和IP选项的方法对我不起作用。可能/可能不重要的另一个细节是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.

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

答案 6 :(得分:1)

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

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

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

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

以下使用相对路径:

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

答案 7 :(得分:0)

请注意,自2016年以来,MingW-64 git.exeGit for Windows打包在一起,因此支持UNC路径。
(请参阅“ How are msys, msys2, and MinGW-64 related to each other?”)

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

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

在Git 2.21之前,由于Git产生git-upload-pack的方法中存在古怪之处,因此存在 通过带有反斜线的路径时的问题:Git将强制 命令行通过外壳,在外壳中具有不同的引用语义 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可执行文件,特别是在child_process结构中设置use_shell标志时。

     

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

     

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

     

那仍然不能完全解决问题,但至少是这样。

     

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

     

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

请参见t/t5580-clone-push-unc.sh

答案 8 :(得分:0)

克隆后,对我而言,推送无效。

解决方案: 复制仓库的位置打开.git文件夹和配置文件。

对于远程原始网址设置值:

[remote "origin"]
    url = file:///C:/Documentation/git_server/kurmisoftware