Я хочу (программно) убедиться, что моя локальная копия истории удаленных git точна, то есть, что локальная история git содержит точно такую же историю, что и история удаленных git (не больше, не меньше).
Безошибочный способ добиться этого - удалить мою локальную копию и снова клонировать пульт. Но я бы хотел сэкономить время и пропускную способность, когда это сделать относительно легко (в типичном случае ничего не изменится с момента последнего запуска моей программы; поэтому нет необходимости загружать все заново при каждом запуске).
(Я программирую на Java с использованием JGit, но я думаю, что ответ, использующий командную строку git, тоже подойдет, так как его легко перевести на Java-программу.)
Я знаю, как программно извлекать, и я проверил, работает ли он в простом случае с одной ветвью master, которая отслеживает ветку origin / master. Но я не уверен, что простой git fetch
обязательно выберет все, что находится на пульте, которого у меня нет локально, так как полагаю, что это зависит от статуса отслеживания.
И наоборот, я игнорирую, как проверитьпросто, что не существует более свежей фиксации локально, которая еще не была передана на удаленный.
Я хочу гарантировать, что локальная история такая же, как и удаленная, даже в случае, если кто-то вручную поиграл слокальная копия git (например, настроила нечетное состояние отслеживания), насколько это возможно. Я понимаю, что невозможно что-либо гарантировать, если столкнуться с состязательным поведением, если запретить повторную загрузку всего и сравнение всего (например, кто-то может злонамеренно изменить указатели origin /… в локальной копии). Я работаю в предположении, что мой пользователь не пытается злонамеренно вызвать сбой или неправильное поведение моей программы. Я просто хочу иметь возможность предупредить моего пользователя, если есть основания полагать, что локальная копия, на которую действует моя программа, похоже, была изменена по сравнению с удаленной, и предложить вариант для повторной загрузки (но не беспокоить его, если этокажется ненужным).
Причина моего вопроса в том, что я хочу проверить локальную историю мерзавцев по соображениям эффективности, при этом убедившись, что эффект такой, как если бы я читал напрямую из удаленных данных.
Меня не волнует, что что-то осталось в области подготовки или в рабочем дереве, меня интересует только история git (в папке .git
). И мне все равно, писать что-нибудь локально или удаленно. Это только о чтении данных.