Git over samba - 无法写入 sha1 文件名 |没有权限

Posted

技术标签:

【中文标题】Git over samba - 无法写入 sha1 文件名 |没有权限【英文标题】:Git over samba - unable to write sha1 filename | Permission denied 【发布时间】:2011-04-19 06:34:08 【问题描述】:

当我在 Windows 上使用 git over samba 共享时,当我想通过 git_extentions 或 tortoiseGIT 提交文件时出现错误。 错误是: 错误:无法写入 sha1 文件名 .git/objects/b4/e819f886bf31b67c42249a0eff8e8b16cf7622:权限被拒绝。 当我通过 ubuntu 服务器添加文件并提交文件时,它工作正常。 我也在一家银行工作。

我已经尝试过chmod 777 the whole .git folder

【问题讨论】:

samba 配置文件是什么样子的,用户和 git 期望的一样吗? 这个问题刚刚开始发生在我身上!我将 msysGit 更新为 v1.7.6.msysgit.0,但我通过 samba 共享连接到的服务器已打开 v1.7.2.1。 1. 我不知道我之前有哪个 msysGit 可以恢复测试。 2.所以将升级服务器版本,看看是否有帮助。 好的,这没有帮助。 v1.7.2.1 在我的服务器上运行。当我开始使用 PortableGit 做其他事情时,这一切都开始发生了,它也发生了! 【参考方案1】:

我也见过这个。这是一个 git 缺陷,可能与它如何创建和修改文件有关。澄清问题:

# mount a samba share locally. 
$ mount -t cifs options //share/project  /mnt/project

# The share contains a git checkout.
# Do some typical development.
$ cd /mnt/project
$ vi file    ## ok
$ git pull   ## ok
$ git status ## ok
$ git add file ## error!
  error: unable to create temporary sha1 filename 
  .git/objects/8b/tmp_obj_mYE1Xi: Permission denied


## But everything from the shell seems to work.
$ ls -latr .git/objects/8b/  ## ok. empty dir.
$ touch .git/objects/8b/tmp_obj_mYE1Xi ## ok.
$ echo test123> .git/objects/8b/tmp_obj_mYE1Xi ## ok.
$ cat  .git/objects/8b/tmp_obj_mYE1Xi  ## ok.
test123
$ rm  .git/objects/8b/tmp_obj_mYE1Xi  ## ok.

在 git 版本 1.5.6.5(最新的 Debian 软件包)中,当您尝试 git-add 时会收到错误消息。如果你安装了 git 1.7.3.2(最新版本),你可以添加文件,但是你尝试提交时会报错。

【讨论】:

啊,这真是烦死我了!我只是在使用 PortableGit 和/或升级 mSysgit 后才开始遇到这个问题!【参考方案2】:

以前在 Git/Samba 安装中以某种形式出现过此问题。不确定问题的根源是否已经确定:

http://code.google.com/p/msysgit/issues/detail?id=130#makechanges

更新:

看起来 git v. 1.7.3.3 已经解决了这个问题。

【讨论】:

我实际上更新了链接页面中提到的 samba,它对我有用。 code.google.com/p/msysgit/issues/detail?id=130#c21 我在我的服务器上使用 v1.7.6.msysgit.0 和 v1.7.2.1,但仍然看到这个!? 仍然在 Git-1.9.5-preview20141217 上遇到问题 我在 TortoiseGit 1.8 上遇到问题,它使用 Git 2.7。【参考方案3】:

好的,我找到了适合我的解决方案。

我在 samba 上使用 git (samba-common-3.0.33-3.7.el5) 已经很久没有问题了。

我把 git 升级到了Git-1.7.6-preview20110708,然后就完蛋了!

作为一个有条不紊的开发者,我没有写下我是从什么升级而来的!

所以我浏览了以前版本的列表,在Git-1.7.0.2-preview20100309 旁边看到了一个星号,有点老了,但是把它放上去......然后砰......它起作用了!

【讨论】:

两个链接现在都断开了。而apt-get install git=1.7.0.2 产生Version '1.7.0.2' for 'git' was not found。现在呢?【参考方案4】:

我们今天开始使用 git。 1.7.10 版适用于 win7 机器。在 winXP 上,我们发生了给定的错误。对于那些我们降级到 1.7.0.2 的机器,正如 Ian 在他的帖子中所说,它现在可以工作了。

【讨论】:

【参考方案5】:

可能 samba 会阻止点文件?为什么不使用 ssh 而不是 samba 来推送?

【讨论】:

点文件不会被阻止,在windows中被视为隐藏文件。你如何通过 ssh 推送?通过命令行提交文件工作正常。 我在 samba 上使用 git 因为我在 windows 上开发,但我的测试服务器是 ubuntu。这意味着我不必每次想要测试更改时都进行部署。【参考方案6】:

就我而言,是 Windows 上的防病毒软件锁定了文件。暂时禁用杀毒软件解决了这个问题。

【讨论】:

【参考方案7】:

我也通过here 回答了这个问题

在我的例子中,看起来 Git (v 2.6.3) 试图在 Samba 驱动器上创建自己的读/写权限。这将防止打包文件和/或对象被写入(解包错误)

remote: error: unable to write sha1 filename ./objects/pack/pack-<some_hex_string>.pack: Permission denied
remote: fatal: cannot store pack file
error: unpack failed: index-pack abnormal exit
To z:\git\<repo name>
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs

我来回尝试修复。最后,由于我控制了 Samba 机器,我在 samba 驱动器配置中添加了一行,上面写着“继承权限 = 是”。我重新启动了 Samba 并尝试推送。成功了!

这对我有用,因为我是唯一使用 Samba 服务器的人。对于其他人,您可能会玩“强制目录模式”或“强制创建模式”。您可以在此处找到这些人的手册页:

https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/AccessControls.html

【讨论】:

以上是关于Git over samba - 无法写入 sha1 文件名 |没有权限的主要内容,如果未能解决你的问题,请参考以下文章

Git'致命:无法写入新的索引文件'

gpg无法签署致命的数据:无法写入提交对象[Git 2.10.0]

编译samba遇到need autoconf 2.53 or later to build samba from GIT

如图Samba Linux openwrt 没有写入权限 要怎么设置

WSL+samba+git:“错误:将对象添加到存储库数据库.git/objects的权限不足” / git-clone / git-add 权限错误

为啥 Git 不使用更现代的 SHA?