【发布时间】:2019-10-14 07:45:37
【问题描述】:
我想(以编程方式)确保远程 git 历史记录的本地副本是准确的,也就是说,本地 git 历史记录包含与远程 git 历史记录完全相同的历史记录(不多也不少)。
实现此目的的可靠方法是删除我的本地副本并再次克隆远程。但是我想在相对容易的情况下节省时间和带宽(在典型情况下,自上次运行我的程序以来没有任何变化;因此每次运行时都没有必要再次下载所有内容)。
(我使用 JGit 在 Java 中编程,但我认为使用 git 命令行的答案也可以,因为它应该很容易转换为 Java 程序。)
我知道如何以编程方式获取,并且我已经检查过它在跟踪原始/主分支的单个主分支的简单情况下是否有效。但我不确定一个简单的git fetch 是否一定会获取远程上我在本地没有的所有内容,因为我认为这取决于跟踪状态。
相反,我忽略了如何简单地检查本地没有更新的提交尚未推送到远程。
我想保证本地历史记录与远程历史记录相同,即使有人手动修改了本地 git 副本(例如,配置了奇怪的跟踪状态),只要合理可能。我知道,如果面对敌对行为,除非重新下载所有内容并比较所有内容(例如,有人可能恶意更改本地副本中的 origin/... 指针),否则无法保证任何事情。我的工作假设是我的用户没有恶意地试图让我的程序崩溃或行为不端。如果有理由相信我的程序操作的本地副本与远程副本相比似乎已被修改,我只是希望能够警告我的用户,并提供重新下载的选项(但如果这样做,请不要打扰他们似乎没有必要)。
我提出问题的原因是,出于效率原因,我想检查本地 git 历史记录,同时确保效果就像我直接从远程数据中读取一样。
我不关心暂存区或工作树中遗留的任何内容,我只关心 git 历史记录(在 .git 文件夹中)。而且我不在乎在本地或远程写任何东西。这只是关于读取数据。
【问题讨论】:
标签: git