2013-09-02 5 views
0

Я хочу синхронизировать изменения с удаленным репозиторием Git (в GitHub) с помощью Git Api в Java (Egit и JGit). Как я могу это сделать? Возможно ли это, зная идентификатор HEAD между двумя версиями или каким-то другим способом?Как сравнить изменения между локальными изменениями и удаленным репозиторием

ответ

2

Простое знание HEAD каждого из двух репозиториев достаточно, чтобы сказать вам, если они не синхронизированы, но недостаточно рассказать вам, какой из них стоит впереди другого. В общем случае более одного человека могут нажать на репозиторий, поэтому, если ваш локальный репозиторий всегда впереди вашего пульта, не будет разумным. Вам нужно будет использовать API, чтобы найти первую общую SHA и использовать ее, чтобы определить, как обрабатывать синхронизацию ваших репозиториев. Вы должны обрабатывать три (на самом деле больше) случаев:

  1. Ваше местное отделение находится впереди удаленного
  2. Ваш пульт дистанционного управления находится впереди локальный
  3. локальных и удаленных и имеют наборы фиксаций не с другой, например, вы выталкивали с одного компьютера, но не тянули сюда, или кто-то еще нажал на фиксации в последнее время, и вы не заметили и т. д.

Первые два случая тривиальны, третий - намного больше сложный. Вам всегда придется тянуть, прежде чем вы сможете синхронизировать свои локальные изменения с удаленным компьютером, и вытягивание может привести к конфликтам слияния. Если вы не будете осторожны, вы можете сломать некоторый код, пытаясь заставить совершить сделку, когда возник конфликт.

Не зная больше о том, что вы планируете делать или что такое ваш прецедент, я не могу дать вам больше помощи, чем это. Надеюсь, этого достаточно. :-)

+1

Спасибо за описание всех трех сценариев. Я могу позаботиться об этом во время работы. Но в моем приложении есть функция «Обновить график», которая работает, предполагая, что удаленный всегда впереди локальный (как вы заявили в второй случай) и освежает себя удаленным (то есть заменяет собой последнее состояние удаленного репозитория). Это то, что я хочу достичь с помощью Git Api в Java.Pls предлагает, как это можно сделать. – Alok

+1

Я не знаком с Java API, но я бы посоветовал не реализовывать это. Я могу только догадываться, что это вызовет гораздо больше головных болей, чем это вам поможет. Если вы просто начнете использовать лучшие методы git, вы обнаружите, что вам это никогда не понадобилось. Это касательно этого вопроса, хотя не стесняйтесь писать мне по электронной почте для более подробной информации. –

+1

ok, но вы можете предложить команду в git bash, которая могла бы это сделать, просто зная HEAD ID.Я найду Java-код, эквивалентный этой команде. – Alok

Смежные вопросы