Почему Mercurial должен общаться с сервером, чтобы перечислить исходящие (не отправленные) коммиты? - PullRequest
9 голосов
/ 12 марта 2012

Когда я набираю hg outgoing, я получаю ответ, подобный этому:

comparing with ssh://server:1234/path/to/repo

и задержка при обмене данными по сети.

Зачем нужен этот сетевой трафик? Есть ли в Mercurial что-то фундаментальное, что означает, что он не может вспомнить, какие коммиты были переданы, а какие нет?

Есть ли альтернативная команда, которая может дать мне аналогичную информацию, не связываясь по сети?

Ответы [ 2 ]

14 голосов
/ 12 марта 2012

Поскольку Mercurial является распределенной системой, существует несколько способов получения изменений от локального репо к удаленному репо.

Например:

  • кто-то может получить изменения от вас и затем передать эти изменения в удаленное хранилище
  • , вы можете просто скопировать свой локальныйрепо, используя любую операционную систему, которая у вас есть, и Mercurial будет совершенно не осведомлен об этом.Затем вы можете отправить изменения в этой копии в удаленное хранилище.

Однако, если у вас есть Mercurial 2.1 или более поздняя версия, вы можете использовать hg phase, чтобы определить, какие наборы изменений были отправлены.Предполагая, что вы не используете hg phase для изменения статуса любых наборов изменений, тогда наборы изменений с фазой draft или secret не были сдвинуты, а изменения с фазой public имеют.Используйте

$ hg log -r "not public()"

, чтобы увидеть неопубликованные наборы изменений.

Это не поймет два примера, которые я привел выше, но, вероятно, будет достаточно, если вы просто хотите узнать, какие наборы изменений у вас нетнажал.

Смотрите здесь или проверьте hg help phases для инструкций о том, как работать с фазами.

3 голосов
/ 12 марта 2012

Ртутный репозиторий может потенциально соединяться с несколькими другими репозиториями.Поэтому, я думаю, необходимо убедиться, что изменения, которые не были перенесены из вашего хранилища, уже не поступили из другого хранилища.

...