Git 通常会在已安装的驱动器上阻塞吗?还是只是 Git GUI?
Posted
技术标签:
【中文标题】Git 通常会在已安装的驱动器上阻塞吗?还是只是 Git GUI?【英文标题】:Does Git generally choke on mounted drives? Or just Git GUI's? 【发布时间】:2014-04-01 21:28:54 【问题描述】:我知道我应该顽固地在终端中使用 git,但我在 Mac 上使用了一个名为 Sourcetree 的 Git 客户端,让整个事情变得更性感。
问题是我在设置中添加了一个新的 Synology NAS 驱动器。在我的 Mac 上安装了一个 NAS 共享文件夹后,Sourcetree 在尝试暂存/提交/推送时出现阻塞。
我的主分支在 GitHub 上,所以我使用 Sourcetree 将一个 repo 克隆到已安装的驱动器。作为一个快速测试,我编辑了一个不重要的文件,保存并观察客户端中未暂存的更改。到目前为止成功;编辑后的文件出现在 Sourcetree 的未暂存窗口中。我去表演它。致命错误:
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree add -f -- README.md
致命:无法写入新的索引文件
完成但有错误,见上文
我查看了隐藏.git
文件夹中索引文件的文件权限(使用NAS目录资源管理器,因为Mac没有显示隐藏文件。文件权限是读取,写入,但不执行. 允许执行文件后,使用 Sourcetree 的 stage/commit/push 尝试工作。
显然,我不想每次克隆 git 存储库时都手动调整文件权限,所以有人知道为什么 Sourcetree/Git 没有创建具有更有用文件权限的 repo 克隆?
作为记录,我用 GitHub OSX 客户端尝试了相同的操作,似乎成功(无需编辑权限)。但我觉得 GitHub 客户端有点原始,更喜欢使用 Sourcetree。
【问题讨论】:
【参考方案1】:一般是 git。 This answer 建议,这是因为文件锁定。欲了解更多信息,只需搜索“git samba”
根据我的经验,在网络驱动器上运行非裸仓库是一个坏主意。
最佳实践: http://git-scm.com/book/ch4-1.html
所以要么:
-
在您的 NAS 上设置 SSH 服务器并推/拉到该服务器
映射您的网络共享(就像您现在一样),但在上面放置一个裸仓库。然后,推/拉到那个。
在任何情况下,建议将带有工作副本的 git repo 驻留在本地磁盘上。
【讨论】:
【参考方案2】:在浪费了很多时间之后,我得出了以下解决方案:
在 Synology NAS 服务器上:
控制面板 -> 文件共享和权限 -> Win/Mac/NFS -> Mac 文件服务 -> 应用默认 Unix 权限 - 选中此框并重新启动文件服务。
红鲱鱼 - 我试过的东西没有用。
a) 将 Git 设置从直接使用 NAS 系统更改为通过 ssh 使用 Git 服务器。 b) 使用/不使用 Sourcetree 进行 git 访问 c) 可能还有十几个其他的东西。
请注意,问题与 Git 设置无关,而是与发生签出的目录的位置有关。如果不选中上面的框,即使通过终端,我也无法更改索引文件的权限或所有权——尽管我应该通过 SSH 来完成。
罗伯特·拉米
【讨论】:
我已经尝试过你的建议,但它现在不允许我克隆(而不是仅仅阻止我推动)。 SourceTree 在我挂载的驱动器上创建文件夹,然后抛出错误:Cloning into '/Volumes/public/showroom'... warning: unable to unlink /Volumes/public/showroom/.git/objects/4e/tmp_obj_KzgBy9: Operation not permitted error: unable to write sha1 filename /Volumes/public/showroom/.git/objects/4e/aa0bc7182a04e2a9833f0584647da3dad5dbef: Operation not permitted fatal: failed to write object fatal: unpack-objects failed
值得注意的是,我无法通过 Finder 删除创建的文件夹,因为我“没有权限”。所以我必须通过 DSM 来完成。以上是关于Git 通常会在已安装的驱动器上阻塞吗?还是只是 Git GUI?的主要内容,如果未能解决你的问题,请参考以下文章