对于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
这很有效。
由于
答案 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.exe
与Git for Windows打包在一起,因此支持UNC路径。
(请参阅“ How are msys, msys2, and MinGW-64 related to each other?”)
在Git 2.21(2019年2月)中,此支持甚至在msys2 shell(在UNC路径中带有引号)中也得到了扩展。
请参见commit 9e9da23的commit 5440df4,Johannes 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}
之类的参数,因此这一点非常重要。
答案 8 :(得分:0)
克隆后,对我而言,推送无效。
解决方案: 复制仓库的位置打开.git文件夹和配置文件。
对于远程原始网址设置值:
[remote "origin"]
url = file:///C:/Documentation/git_server/kurmisoftware