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



我问这个问题是因为我想弄清楚如何处理这类问题并向社区寻求建议。对于任何不知道的人,PWA 可以在脱机时工作,并使用 ServiceWorkers 来处理请求并进行后台同步(以及其他一些内容)。

我想构建一个 PWA,它旨在成为 GitHub 客户端,并且在其功能中,我想实现提交和推送到存储库。从我的角度来看,提交很简单,不会造成任何问题,因为遥控器没有变化。

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

如果其他用户在当前用户离线时进行了推送怎么办?Git 版本控制应该处理这种情况吗?我的思维在任何地方都有缺陷吗?通过使用软件避免远程问题是否可行?

提前谢谢。

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

本地存储库中的用户不应始终脱机(他们需要与他人协作并为远程存储库做出贡献)。当脱机用户联机时,他们应拉取并推送到远程存储库(更新本地存储库和远程存储库的参与者)。

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

假设主分支上的提交历史记录原始内容如下:

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

而离线工作的用户提交本地更改(提交D并提交E),然后本地提交历史记录如下:

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

当另一个用户推送更改时,提交F并将G提交到远程存储库。

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

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

  1. 以默认方式拉取

    执行git pull origin master后,提交历史记录将为:

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

    它将origin/master合并到本地master,提交M是合并提交。

  2. 带变基的拉动

    执行命令git pull origin master --rebase后,它将在origin/master顶部重新设置本地更改的基数。提交历史记录将为:

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

因此,即使用户处于脱机状态,他也只能在本地存储库上工作。当用户再次联机时,他/她可以按预期工作。

最新更新