在Windows(Cygwin)上进行Git提交存在问题。

7

我在Windows 7上安装了Cygwin。Git直到几天前一直运行良好,但是提交突然停止工作了。以下是全新仓库的日志:

wt@CO /cygdrive/u/Projects
$ mkdir Temp

wt@CO /cygdrive/u/Projects
$ cd Temp/

wt@CO /cygdrive/u/Projects/Temp
$ touch Hello.txt

wt@CO /cygdrive/u/Projects/Temp
$ git init
Initialized empty Git repository in /cygdrive/u/Projects/Temp/.git/

wt@CO /cygdrive/u/Projects/Temp
$ git add .

wt@CO /cygdrive/u/Projects/Temp
$ git commit -m "hi"
error: invalid object 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 for 'Hello
.txt'
error: Error building trees

我已经疯狂谷歌搜索了,但是没有结果。这里到底发生了什么?


1
/cygdrive/u 是一个网络共享吗? - cmcginty
@Casey U: 是一个网络驱动器。昨晚进行了一些实验后,发现git在我的本地C:驱动器上运行正常。它过去在U:上运行良好,但IT人员必须在没有我的知识的情况下更改了权限或实现方式,因此现在git无法创建主分支,这似乎是根本原因。我去C:驱动器了!使用网络驱动器可能是个愚蠢的想法:( 如果有人想将此作为答案发布,我会选择它(不确定是否应该回答自己的问题,因为我不确定为什么会失败)。 - Weston
4个回答

9

看起来Cygwin git使用“创建临时文件,然后硬链接到目标文件”的方法来创建新的对象文件。我认为这种硬链接方式对Cygwin来说很令人困惑!

底线:可以通过以下方式解决:

git config --add "core.createobject" rename

我的设置是使用Cygwin git,在通过samba访问的.git目录上工作。


是的,这个方法奏效了。从“完全不起作用,到处失败”变成了“它可以工作”。非常感谢! - three
太棒了!这对我来说完美地解决了一个略有不同的问题(错误:无法读取SMB上的cygwin git引起的增量包基础对象...)。 - Josh Bode
这也适用于最新的cygwin(2.0.2)。在没有这个设置的情况下,它曾经可以正常工作。不确定是在cygwin还是我们这边出了问题。 - mplwork
不得不点赞,这对我也解决了问题。Cygwin git 1.7.9 运行在 Windows 7 x64 上,而仓库存储在 Windows 共享文件夹中。和其他人一样,将仓库存储在本地磁盘上就可以正常工作了。 - mjturner

2
问题在于,Git默认的创建对象文件的方法在Windows共享驱动器上根本不起作用,而Cygwin的Git(与Git for Windows或msysgit不同)一直在使用该默认方法。直到今天,我是Cygwin的Git维护者,我已经重新构建了它,以使用另一种在共享驱动器上可以工作的方法(它还有其他缺点,但我们无法改变)。如果您再次运行Cygwin的setup-x86[_64].exe并下载最新版本的Git(v2.4.5-3或更高版本),您应该会发现一切都恢复正常。(新的Git版本刚刚被上传,因此可能需要一些时间才能到达所有镜像站,但我认为最多需要24小时,许多镜像站速度更快。)

2

建议使用 Git for Windows。Cygwin的Git在一段时间内表现越来越差。随着时间的推移,我的团队和我遇到了越来越多的问题,最终选择了转换。由于msysgit/Git for Windows项目提供了Git的完整端口到Windows操作系统上,为什么要容忍Cygwin Git的烦恼和不可靠性呢?自从我们转换以来,我们没有遇到任何问题。


为什么要忍受Cygwin Git带来的烦恼和明显的不稳定性呢?因为使用真正的Linux shell在Cygwin中带来了许多其他优势。此外,msysgit中有一些东西无法正常工作,比如HEAD^。尽管如此,我确实同意您的看法,即msysgit“只需运行”并且是一个不错的选择。 - Tyler
@MatrixFrog:没有人说要摆脱Cygwin,只是要摆脱Cygwin自带的git,改用常规的Windows git。Windows二进制文件在Cygwin bash提示符下可以正常工作。没必要把孩子和脏水一起倒掉。 - Michael Dillon
@Michael 确切地说,那就是我所指的。 - Tyler

0

问题说明存储库一开始是正常运行的,但后来突然出现了故障。错误似乎指示了内部git树对象的文件系统读取问题。查看/cygdrive/u,表明这很可能是一个映射网络驱动器。

请尝试在本地硬盘上运行git以确认网络共享是否正常工作。

不幸的是,我没有任何确切的信息可以说明故障的原因。有可能是您的网络共享不支持git期望可用的文件系统功能。


这是现已得到修复的,使用最新的cygwin git版本即可,详情请见https://cygwin.com/ml/cygwin/2015-08/msg00114.html。 - ismail

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