【问题标题】:Dropbox interfering with git push on Windows Subsystem for LinuxDropbox 在 Linux 的 Windows 子系统上干扰 git push
【发布时间】:2022-01-07 11:42:11
【问题描述】:

我只想记录这个问题,它是由 git 和云同步服务之间的不兼容引起的。应避免将存储库存储在与 Dropbox 同步的文件夹中。

在装有 Windows 10 和 Windows Subsystem for Linux 的机器上,如果用户在 Dropbox 管理的目录中有 git 存储库,则在尝试 git push 最近提交时可能会出现以下错误:

warning: unable to unlink '/home/<local_repo>/repo/.git/refs/remotes/origin/main.lock': Permission denied
error: update_ref failed for ref 'refs/remotes/origin/main': couldn't set 'refs/remotes/origin/main'

此外,在git status 上,即使远程已更新,存储库也会显示在远程之前:

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

进一步推送可能会出现File exists 错误(但是,提交已成功推送到远程):

$ git push
error: update_ref failed for ref 'refs/remotes/origin/main': cannot lock ref 'refs/remotes/origin/main': Unable to create '/home/<local_repo>/.git/refs/remotes/origin/main.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
Everything up-to-date

【问题讨论】:

  • 您不认为在 Dropbox 目录中“托管”一个 git 存储库,说实话,是一种反模式,可能会导致您的 git 存储库损坏并让您的数据丢失?跨度>
  • @fluffy 是的,有点。 :) 为了扩展,我通常不会这样做,但显然我只是因为软链接了父文件夹而做了。我花了一点时间才意识到这个问题,所以我想我会把它写下来。
  • 切勿将 Git 存储库存储在任何云同步文件夹中。云同步软件总是不可避免地最终会损坏 Git 存储库。根据墨菲定律,这种损害会一直等到最具破坏性的时刻。 :-)

标签: git dropbox windows-subsystem-for-linux


【解决方案1】:

问题在于您将 Git 数据存储在由云同步服务管理的目录中。 Git 要求文件系统具有确定性行为,特别是 POSIX 设置的行为。但是,当您使用这种类型的云同步服务时,同步工具可以修改工作目录或.git 目录的内容,而这并不能反映 Git 所做的事情。因此,您最终可能会遇到锁定文件重新出现、操作失败(因为它们的锁定文件已被删除或正在使用)或重复文件等问题。

众所周知,使用云同步服务会而且确实会导致数据丢失。 Git 以特定顺序将文件写入磁盘以保持存储库的一致性,如果它们未完全同步到另一台机器或在存储库更改时,存储库可能会损坏。 Git 维护人员强烈建议不要这样做,未来版本的 Git 常见问题解答将明确指示用户不要这样做。

【讨论】:

  • 嗨!我真的不经常这样做,今天出现了问题,我想我会记录下来。我会直接更新答案,反对它。
  • 这将是一个“回答你自己的问题”的帖子,但客观上你的回答比我的要好得多,也更详细,所以你有它:)
【解决方案2】:

这个问题是由 git 和 Dropbox 之间的不兼容引起的。当用户创建提交,然后在 Dropbox 仍在重新索引和更新云上的目录时立即执行推送时,Windows 10 将不允许 WSL 上的 Ubuntu 在 Dropbox 访问文件夹时删除锁定文件。

解决方法是:
1)手动删除锁定文件:
rm /home/&lt;local_repo&gt;/repo/.git/refs/remotes/origin/main.lock
2)等待 Dropbox 重新索引目录(观察任务栏上的 Dropbox 图标);
3) git push 再次。
4) 从 Dropbox 或其他云同步的任何文件夹中删除 git 管理的存储库存储服务 as detailed by bk2204 below.

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2019-08-10
    • 2020-08-19
    相关资源
    最近更新 更多