在用户同意的情况下使用 Java [JGIT] 执行 Git PULL (Yes/No)
Perform Git PULL using Java [JGIT] with user consent (Yes/No)
要求
假设我们已经执行了git克隆到本地存储库。现在存在对远程存储库文件的一些更新。在应用程序启动时,我想查找与本地存储库相比远程存储库中是否有任何更新。如果更新可用,则必须向应用程序用户显示通知并请求 his/her 同意下载这些更新。如果用户同意下载更新,应用程序必须拉取这些更改,否则跳过此 run/launch 的下载。当用户下次启动应用程序时,必须再次执行相同的检查。
问题陈述
按照 中的建议获取远程分支并找到更新。这第一次工作得很好。当重复相同的步骤时,FetchResult 没有 Remote Repository 的更新。
已经尝试过
尝试 git.reset().setMode(ResetType.HARD).call()
和 git.revert().call()
当用户单击“否”下载更新时,应用程序下次启动时会在执行 Git FETCH
时获得相同的增量
伪代码
if(alreadyCloned){
check if updates available in remote - as per the [suggestions in above link](
if(updatesAvailable){
fetch user consent to download
if(user permits to download updates) {
perform git pull
} else {
clear local repository
}
} else {
do nothing
}
}
您的理解似乎与 Git 的工作原理 w.r.t 不匹配。远程更新。
对于每个本地分支(例如refs/heads/foo
)通常有一个'tracking branch'(例如refs/remotes/origin/foo
)。 fetch 命令更新跟踪分支。因此,如果远程仓库没有改变,后续的提取不会改变本地仓库。
要查明分支是否已更改,您应该首先获取分支(如果有更改则更新跟踪分支)然后将本地分支与其对应的远程跟踪分支进行比较(例如使用 BranchTrackingStatus
).
最后,如果远程的提交应该应用(在你的程序流程中'user permits to download updates'),那么重置、变基或合并本地分支to/with跟踪分支。
请注意,在 Git 中拉出一个分支是一个复合操作,它首先从远程仓库(更新远程跟踪分支)获取提交,然后将本地分支与跟踪分支变基或合并。
要求
假设我们已经执行了git克隆到本地存储库。现在存在对远程存储库文件的一些更新。在应用程序启动时,我想查找与本地存储库相比远程存储库中是否有任何更新。如果更新可用,则必须向应用程序用户显示通知并请求 his/her 同意下载这些更新。如果用户同意下载更新,应用程序必须拉取这些更改,否则跳过此 run/launch 的下载。当用户下次启动应用程序时,必须再次执行相同的检查。
问题陈述
按照
已经尝试过
尝试 git.reset().setMode(ResetType.HARD).call()
和 git.revert().call()
当用户单击“否”下载更新时,应用程序下次启动时会在执行 Git FETCH
伪代码
if(alreadyCloned){
check if updates available in remote - as per the [suggestions in above link](
if(updatesAvailable){
fetch user consent to download
if(user permits to download updates) {
perform git pull
} else {
clear local repository
}
} else {
do nothing
}
}
您的理解似乎与 Git 的工作原理 w.r.t 不匹配。远程更新。
对于每个本地分支(例如refs/heads/foo
)通常有一个'tracking branch'(例如refs/remotes/origin/foo
)。 fetch 命令更新跟踪分支。因此,如果远程仓库没有改变,后续的提取不会改变本地仓库。
要查明分支是否已更改,您应该首先获取分支(如果有更改则更新跟踪分支)然后将本地分支与其对应的远程跟踪分支进行比较(例如使用 BranchTrackingStatus
).
最后,如果远程的提交应该应用(在你的程序流程中'user permits to download updates'),那么重置、变基或合并本地分支to/with跟踪分支。
请注意,在 Git 中拉出一个分支是一个复合操作,它首先从远程仓库(更新远程跟踪分支)获取提交,然后将本地分支与跟踪分支变基或合并。