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
。
通常有两种方法可以从远程拉取更改:
默认拉取方式
执行git pull origin master
后,提交历史将是:
…---A---B---C---D---E---M master
\ /
F-------G origin/master
将origin/master
合并到本地master
,提交M
为合并提交
用 rebase 拉取
执行命令git pull origin master --rebase
后,它会将origin/master
顶部的本地更改rebase。提交历史将是:
…---A---B---C---F---G---D'---E' master
|
origin/master
所以即使用户离线,他也只能在本地仓库上工作。当用户再次上线时,he/she可以正常工作。
我问这个问题是因为我想思考如何处理这类问题并向社区寻求建议。对于不知道的人,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
。
通常有两种方法可以从远程拉取更改:
默认拉取方式
执行
git pull origin master
后,提交历史将是:…---A---B---C---D---E---M master \ / F-------G origin/master
将
origin/master
合并到本地master
,提交M
为合并提交用 rebase 拉取
执行命令
git pull origin master --rebase
后,它会将origin/master
顶部的本地更改rebase。提交历史将是:…---A---B---C---F---G---D'---E' master | origin/master
所以即使用户离线,他也只能在本地仓库上工作。当用户再次上线时,he/she可以正常工作。