从Linux在Windows共享文件夹上托管的git repo上推送错误

问题描述

我见过this question on SE,另外一个question on SuperUser和这个question on AskUbuntu,但他们似乎避开了我的处境。

我在Windows上托管了一个共享文件夹。我在那里创建了一个git repo(带有--bare选项)来启动一个项目。

在带有Windows的本地文件夹上,我设法使用以下命令克隆了存储库: git clone \\<ip address>\shared_folder_name\name_of_folder_with_git_repo

我可以正常推动。

然后在linux上,我成功使用以下命令克隆了它:

git clone ~/.gvfs/smb-share:server=<ip address>,share=shared_folder_name/name_of_folder_with_git_repo

看起来不错,但我不能从Linux推送。显示错误消息是:

remote: error: object directory /home/my_username/.gvfs/smb-share does not exist; check .git/objects/info/alternates.
remote: error: object directory server=<ip address>,share=shared_folder_name/name_of_folder_with_git_repo does not exist; check .git/objects/info/alternates.
remote: error: object directory /home/my_username/.gvfs/smb-share does not exist; check .git/objects/info/alternates.
remote: error: object directory server=<ip address>,share=shared_folder_name/name_of_folder_with_git_repo does not exist; check .git/objects/info/alternates.
remote: error: object directory refs/heads/master does not point to a valid object!
remote: fatal: bad object HEAD
error: object directory /home/my_username/.gvfs/smb-share does not exist; check .git/objects/info/alternates.
error: object directory server=<ip address>,share=shared_folder_name/name_of_folder_with_git_repo does not exist; check .git/objects/info/alternates.
error: object directory refs/heads/master does not point to a valid object!
fatal: bad object HEAD
To /home/my_username/.gvfs/smb-share:server=<ip address>,share=shared_folder_name/name_of_folder_with_git_repo
! [remote rejected] master -> master (missing necessary objects)
error: Failed to push some refs to '/home/my_username/.gvfs/smb-share:server=<ip address>,share=shared_folder_name/name_of_folder_with_git_repo'

在远程存储库中,.git / objects / info /是一个文件夹。

我尝试添加其他遥控器,但无济于事。我希望缺少smb helper不会成为一个问题,否则我将无法克隆。

我需要找到一种方法,该方法能够相对正常地将其推送到此共享文件夹上的仓库中,最好不需要重复使用sudo。

解决方法

通常,我不会使用gvfs-fuse功能托管或克隆存储库。过去,它提供了一些奇怪的,非POSIX的行为,并且在此方面引起了失败。通过MTP将一些文件传输到Android手机可能很好,但是对于像Git这样的具有严格文件系统一致性要求的应用来说,它还不够强大。

最好使用Linux内置的cifs文件系统(如所链接的AskUbuntu回答中所述),或在Windows计算机上托管SSH服务器并采用这种方式。

请注意,出现问题的不是FUSE文件系统,而是特定于gvfs-fuse。 sshfs为此非常有用,并且非常健壮。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...