【问题标题】:Using a network drive as git repository使用网络驱动器作为 git 存储库
【发布时间】:2016-10-26 03:31:26
【问题描述】:

所以,我在网络驱动器上创建了一个 git 存储库:

git init --bare --shared

而且效果很好。然后,我使用

将其克隆到本地驱动器
git clone z:/testgit

这也很好用。然后我添加一个文件、阶段和提交

git stage *
git commit -m "test commit"

而且也可以正常工作。但!当我尝试推送到原点时,出现此错误。

git push origin
Counting objects: 3, done.
Writing objects: 100% (3/3), 225 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: unable to write sha1 filename ./objects/f3/e6e90a7465421306fae05c18153260973542e3: Permission denied
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To z:/testgit14
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'z:/testgit'

当尝试直接在服务器上(在非 --bare git 项目上)使用 git stage * 时,我会遇到类似的错误。

我可以完全访问文件资源管理器中的驱动器,甚至可以使用 git 初始化存储库。 SSH 甚至不应该在这里应用,因为它不是服务器,而是网络驱动器。我读过的关于 git 的所有内容都表明这应该有效。我已经阅读了几十篇“如何做”,都说了这些确切的步骤,但没有人抱怨权限被拒绝,除非他们谈论的是服务器上缺少 SSH 公钥(正如我所说,这不应该适用)。

我缺少什么权限?我应该在哪里寻找并设置适当的权限?

【问题讨论】:

  • 我不做Windows,所以我不确定发生了什么,但是“权限被拒绝”意味着您不允许写入网络共享驱动器。这很有趣,因为大概您刚才写信来创建裸仓库。请注意,当两个存储库都是本地的(不使用 ssh 或 http)时,您自己的 Git 会生成进程以充当与“其他存储库”对话的“其他 Git”,因此它可能与此有关。无论如何,这听起来像是一个 Windows 网络驱动器问题,而不是真正的 Git 问题。
  • 尝试将Everyone 添加到文件夹/文件访问权限中。
  • user9000,这正是它的设置。该驱动器已授予所有人完全权限。
  • 如果你将远程仓库的transfer.unpackLimit设置为1,推送时还会出现错误吗?
  • “权限被拒绝”消息也可能意味着相关文件已被其他程序锁定。我会说这是大多数情况下的真正原因。

标签: windows git shared-directory


【解决方案1】:

当您尝试创建 git 抱怨的文件时会发生什么?

echo test > ./objects/f3/e6e90a7465421306fae05c18153260973542e3

git 可能正在创建一个新文件夹 (f3) 并且该文件夹没有获得正确的权限,这可能是由于 ACL 继承配置错误或因为本地计算机正在尝试调整新创建的文件夹的权限并且弄错了。

如果是 Linux,可能是因为网络驱动器连接了错误的挂载选项,或者 umask 设置不正确,但我不确定这些是否可以在 Windows 机器上更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 2018-01-24
    • 2019-11-21
    • 2013-10-02
    • 2015-02-09
    • 1970-01-01
    • 2017-08-30
    • 2016-06-04
    相关资源
    最近更新 更多