有没有办法克隆一个Git仓库,而不需要指定目录?

7
我只是想在Windows机器上克隆illumos-gate存储库。但不幸的是,有一个名为“aux”的目录,在Windows中无法创建,因为Windows将aux视为某些设备名称。那么有没有办法在不包括这个特定目录的情况下克隆整个git存储库?提前感谢。

1
如果你克隆一个裸仓库,那么克隆一个仓库就不是问题了。但是拥有一个工作目录就成了问题,因为这时候“aux”这个名称就会暴露出来。 - Nayuki
@Nayuki:实际上,当涉及到设备时,Windows非常混乱。在使用某些接口时,名称是被保留的,但在使用其他接口时则不是。Msys使用被保留的那些名称,而Cygwin使用(较新的)那些名称,其中名称没有被保留。 - Jan Hudec
3个回答

2
更新:自从MSys2,即所有Git For Windows 2.x版本的构建基于Cygwin的分支后,这些特殊文件名现在应该可以正常工作。只有当您使用古老版本(请注意问题的日期-2011年)时才会出现此问题。
虽然使用本机的Windows工具或者msys是不可能创建这样的目录的,但是使用cygwin可以实现。因此,您可以使用cygwin git来解决问题,而不是使用msys。
与msys相比,cygwin git有三个主要缺点:它不会在系统中注册自己,因此您无法在资源管理器中获得上下文菜单(可以手动设置,只需在注册表中添加一个条目即可);它的GUI和gitk仅在运行cygwin X服务器时才能工作;它会为所有内容设置有趣的访问列表,因为cygwin试图模拟Unix权限(可以在/etc/fstab中关闭,我总是这样做;不要忘记在git中将core.filemode设置为false,以便它不会尝试跟踪可执行位)。所以,即使在cygwin中运行,我通常也使用msys git,但由于这对您不起作用,cygwin git应该是足够好的替代品。

在我的Cygwin Bash shell中,~ $mkdir aux导致“无法创建目录`aux':不是目录”...? - Jonas Heidelberg
你尝试过在Cygwin上克隆这样的存储库吗?或者甚至是正常地创建一个“aux”文件夹? - manojlds
@Jonas,@manojlds:是的,我尝试了mkdir aux,然后echo foo > aux/concat aux/con,它们都可以工作。然后我尝试在资源管理器中删除文件和目录,它们显示出来,但无法删除,然后我再次使用cygwin将它们删除。我有最新的cygwin和Windows7;旧版本可能无法正常工作。 - Jan Hudec
@Jan,看起来你需要cygwin 1.7.0才能使其正常工作;该页面上没有提到Windows版本。 - Jonas Heidelberg
@Jonas:嗯,Cygwin 1.7 至少有2年的历史了。 - Jan Hudec
显示剩余2条评论

1

我只能想到一种非常痛苦的方法:

进行一个没有checkout的git克隆 - git clone path --no-checkout

现在进行git重置 - git reset

现在检出除aux之外的每个其他文件和文件夹 - git checkout master -- files/folders

不要将deleted: aux/...更改暂存

显然,这非常痛苦。唯一正确的方法是克隆并在Linux上工作。


0
为了避免克隆一个或多个目录,您可以使用 git 稀疏检出,如此处所述

谢谢,git稀疏检出似乎是一个很好的功能。但在使用它之前,仍然需要克隆整个存储库。这就是问题所在。 - Michael
我现在无法尝试,但我认为从git clone path --no-checkout开始,就像@manojlds建议的那样,可以解决问题。 - Jonas Heidelberg
1
@Michael:不是这样的。工作树中的文件名称从未出现在.git中,而clone首先获取所有数据,然后再检查它们。因此,只有在下载了所有数据之后,clone才会失败,您可以简单地继续创建稀疏工作树,即使最初忘记了--no-checkout选项。 - Jan Hudec

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