GitHub 作为渐进式 Web 应用程序的客户端:如何处理提交和推送?

GitHub client as a Progressive Web App: how to deal with commits and pushes?

我问这个问题是因为我想思考如何处理这类问题并向社区寻求建议。对于不知道的人,PWA 可以在离线时工作,并使用 ServiceWorkers 来处理请求和进行后台同步(以及其他一些事情)。

我想构建一个 PWA,它是一个 GitHub 客户端,在它的功能中,我想实现提交和推送到存储库。从我的角度来看,提交是直截了当的,不会造成任何问题,因为远程没有任何变化。

但是,推送时可能会出现一些问题。用户可能在线并且立即进行推送。如果他不在线,ServiceWorker会在后台保持,当有连接时,进行推送。

如果其他用户在当前用户离线时进行了推送怎么办? Git版本控制应该处理这种情况?我的想法有任何缺陷吗?使用 SW 是否可以避免遥控器上的问题?

提前致谢。

git 这不是缺陷。但是所有与本地机器不同的远程仓库的情况。

本地仓库中的用户不应该总是离线(他们需要与其他人合作并为远程仓库做出贡献)。当离线用户在线时,他们应该拉取和推送到远程仓库(更新本地仓库和远程仓库的贡献者)。

这种情况的详细步骤如下:

假设 master 分支 original 上的提交历史如下:

…---A---B---C master, origin/master 

并且离线工作的用户提交本地更改(提交D和提交E),则本地提交历史如下:

…---A---B---C---D---E master
            |
       origin/master

当另一个用户将更改提交 F 并提交 G 到远程仓库时。

现在如果离线用户在线,如果 he/she 将更改直接推送到远程远程,git 将拒绝推送,因为远程仓库有本地仓库没有的新更改,并提示首先使用git pull

通常有两种方法可以从远程拉取更改:

  1. 默认拉取方式

    执行git pull origin master后,提交历史将是:

    …---A---B---C---D---E---M  master
                 \         /
                  F-------G   origin/master
    

    origin/master合并到本地master,提交M为合并提交

  2. 用 rebase 拉取

    执行命令git pull origin master --rebase后,它会将origin/master顶部的本地更改rebase。提交历史将是:

    …---A---B---C---F---G---D'---E' master
                        |
                   origin/master
    

所以即使用户离线,他也只能在本地仓库上工作。当用户再次上线时,he/she可以正常工作。