2016-05-10 2 views
3

Как яЧто такое эквивалент Mercurial для `git log -graph -decorate -oneline -all`?

git log --graph --decorate --oneline --all 

в ртутный?

  • Я хочу --graph, так что я могу видеть отношения между совершает
  • Я хочу --decorate так, что она печатает имя ветви для каждого наконечника и/или каждая фиксацию, включая местные дистанционные отслеживание ветви, которые показывают точно ситуация на любом из настроенных пульта (у меня два пульта дистанционного управления); он также показывает события, как голова, которую я хочу видеть, как хорошо
  • Я хочу --oneline, так что я вижу много узлов на экране
  • Я хочу --all, так что я вижу все ветви не только один я проверил из
    • включая закладки
    • включая ситуацию на пультах дистанционного управления (по сравнению с местной ситуацией)

ответ

3

Нет прямого эквивалента (или, если есть, я хотел бы знать :-)).

Некоторые из них просто потому, что некоторые вещи не применяются в Mercurial, где любое данное коммитирование относится к одной и только одной ветви, а hg log по умолчанию показывает все фиксации на всех ветвях. Точно так же нет такой вещи, как HEAD: существует текущая ветвь и текущая фиксация, которую вы можете назвать веткой . или ревизией .. Они функционируют как HEAD, за исключением того, что они не могут быть анонимной ветвью.

Невозможно просмотреть удаленный отдельно, так как нет ветвей дистанционного отслеживания. Либо у вас есть какие-либо входящие коммиты (hg incoming ничего не печатает), так что он уже будет в выводе журнала, или вы этого не сделаете (поэтому вы должны запустить hg pull, обычно без -u, чтобы получить его, , чтобы его увидеть).

Ток фиксации показывается в hg log -G (ака hg glog) выводится как @ вместо o, так что, как вы его идентифицировать.

Вот что я использую (не вполне удовлетворительным, и я всегда скучаю топографическую-сортировочный):

[alias] 
# lga comes from 
# http://jamie-wong.com/2012/07/11/my-mercurial-setup-and-workflow-at-khan-academy/ 
lga = glog --style ~/.hgstuff/map-cmdline.lg 

URL-адрес по-прежнему работает в данный момент, но вот содержимое моего map-cmdline.lg файла. Обратите внимание, что цвета жестко закодированы; в то время я написал это, hg не назвали цвет слова (возможно, до сих пор нет, я довольно из даты новейших ¯hG обновлений):

changeset = '\033[0;31m{rev}:{node|short}:{phase} {branches}{bookmarks}{tags} \033[0;34m{author|person}\033[0m\n{desc|firstline|strip} \033[0;32m({date|age})\033[0m\n\n' 
changeset_verbose = '\033[0;31m{rev}:{node}:{phase} \033[0;34m{author|person}\033[0m {desc|firstline|strip} \033[0;32m({date|age}) {branches}{bookmarks}{tags}\n\n' 

start_branches = ' ' 
branch = '\033[0;32m{branch}\033[0m' 

start_bookmarks = ' ' 
bookmark = '\033[0;32m[{bookmark}]\033[0m ' 
last_bookmark = '\033[0;31m[{bookmark}]\033[0m' 

start_tags = ' ' 
tag = '\033[0;32m{tag}\033[0m, ' 
last_tag = '\033[0;32m{tag}\033[0m' 

Обратите внимание, что существует незначительный недостаток здесь, если вы попытаетесь приравнять некоторые рабочие процессы Hg с эквивалентами Git или наоборот. В частности, hg incoming может перечислить 5 коммитов, затем hg pull может извлечь 12 из этих 5, потому что кто-то нажал еще 7 между этими двумя шагами.Разделительные разъемы Git's fetch шаг и дистанционное отслеживание решают это для вас. Другой метод борьбы с ним, который я использовал некоторое время по другим причинам, заключается в том, чтобы сохранить локальный промежуточный репозиторий Mercurial для pull и push из общего.

То есть, если мы обозначаем репо U как вверх по течению общего хранилища, мы сделать клон я локально, то клон я в W для выполнения работы. Затем мы обновляем I (используя hg pull -u), затем просмотрите hg incominghg outgoing) в W для скорости и согласованности. Лучше всего нажать прямо от W до U, чтобы избежать суеты с фазами фиксации, но это боль по другим причинам. Я никогда не находил по-настоящему удовлетворительную настройку и оставил промежуточный репозиторий всякий раз, когда я работал на месте: это было больше для работы с медленными сетями.

+0

Просто к сведению - Mecurial * есть * именованные цветы сегодня, но: очень ограниченный набор (по крайней мере, в Win-консоли) с 'наклейкой()' , образец из моего картографического файла, датированный мартом 2016: 'changeset =" {label ('red', rev)} {label ('blue', author | person)} {desc | firstline | strip} {label ('green ', date | age)} {label (' yellow ', branch)} {label (' yellow ', bookmarks)} {label (' yellow ', tags)} \ n \ n "' –

+0

Откуда вы взяли эти ' changeset_verbose' и 'start_branches'? Когда активируется? –

+0

@RobertSiemer: в общем случае X применяется к 'log', а X_verbose относится к' log -v'. Имена start_foo испускаются до любого из имен foo, но только если вызывается какое-либо из имен foo. Я выбрал их из разных мест, я не уверен, насколько хороша документация, или сейчас. – torek

4

С Mercurial 3.8 просто настроить ваш .hgrc с

[experimental] 
graphstyle.parent = | 
graphstyle.grandparent = ' 
graphstyle.missing = 
graphshorten = true 

и с соответствующим template получите

$ hg log --graph --template "{rev}{ifeq(branch,'default','',' {branch}')}{if(bookmarks,' {bookmarks}')}{if(tags,' {tags}')} - {desc|firstline}" 
... 
| o 20881 - transaction: add onclose/onabort hook for pre-close logic 
| o 20880 - clone: put streaming clones in a transaction 
| o 20879 - fncache: remove the rewriting logic 
| o 20878 - pull: prevent duplicated entry in `op.pulledsubset` 
| o 20877 - bundle2: part params 
| o 20876 - bundle2: support for bundling and unbundling payload 
| o 20875 - merge with stable 
|/| 
o | 20874 stable - Added signature for changeset 3f83fc5cfe71 
o | 20873 stable - Added tag 2.9.2 for changeset 3f83fc5cfe71 
o | 20872 stable 2.9.2 - backout: correct commit status of no changes made (BC) 
o | 20871 stable - backout: document return code of merge conflict 
| o 20870 - merge with stable 
|/| 
o | 20869 stable - i18n: fix "% inside _()" problems 
o | 20868 stable - i18n: fix "% inside _()" problems 
o | 20867 stable - merge: fix lack of "%s" in format string causing TypeError a 
o | 20866 stable - i18n-pt_BR: synchronized with c57c9cece645 
o | 20865 stable - i18n-ja: synchronized with e259d4c462b5 
| o 20864 - bundle2: support unbundling empty part 
| o 20863 - revset: raise ValueError when calling min or max on empty smartset 
| o 20862 - revpair: smartset compatibility 
| o 20861 - revsetbenchmark: add entry for ::rev:: 
: 

Я использую этот псевдоним

[alias] 
ll = log -l 12 --graph --template "{rev}{ifeq(branch,'default','',' {branch}')}{if(bookmarks,' {bookmarks}')}{if(tags,' {tags}')} - {desc|firstline}" 

так

$ hg ll 
o 29100 @default tip - templater: add separate() template function 
o 29099 - bookmarks: jettison bmstore's write() method per deprecation policy 
o 29098 - merge with stable 
|\ 
| o 29097 stable - deprecation: gate deprecation warning behind devel configurn 
| | 
| ~ 
o 29096 - crecord: update downarrowshiftevent() docstring, remove todo 
o 29095 - crecord: remove things that don't happen in functions from their docs 
o 29094 - crecord: remove skipfolded keyword argument from patchnode.previtem() 
o 29093 - crecord: update a copy-pasted comment in downarrowshiftevent() 
o 29092 - crecord: drop the version condition for amend 
o 29091 - crecord: add/remove blank lines (coding style) 
o 29090 - localrepo: jettison parents() method per deprecation policy (API) 
o 29089 - revset: define _parsealias() in _aliasrules class 
| 
~ 

Я думаю, что это очень похоже на Git

$ git log --graph --decorate --oneline --all 
* d32f204 (origin/master, origin/HEAD) ; Remove instrumentation of tramp.el 
* 4c7f329 ; Remove instrumentation of tramp-tests.el 
* 51c816b Fix a problem of tramp-tests on hydra. 
* 62d7aca Pacify byte-compiler in lisp/vc 
* 9e6302c ; Merge from origin/emacs-25 
|\ 
* \ 6d0703a Merge from origin/emacs-25 
|\ \ 
* | | 433d366 'text-quoting-style' now affects only ` and ' 
* | | 8939ae6 Revert "Fix spurious fontification of "for (; a * b;)" in CC Mod" 
* | | cfa59d6 ; Instrument tramp-tests.el 
* | | c20cc09 Move "Recent messages" earlier in report-emacs-bug 
* | | a88f22b Pacify byte compiler in tramp.el 
* | | c8b7a6a Merge from origin/emacs-25 
|\ \ \ 
* \ \ \ 9418ab3 ; Merge from origin/emacs-25 
|\ \ \ \ 
* | | | | d6dac36 ; Instrument tramp.el 
* | | | | a8231e0 CC Mode now uses the new :after-hook feature of define-deriv-e 
* | | | | 608f2bd ; Instrument tramp-tests.el 
* | | | | fd45b52 Fix the jit-lock-fontify-now test names 
: 
+0

Есть ли какая-либо документация о 'graphshorten' и' graphstyle' ?? –

+0

Это еще '[экспериментальный]', поэтому можно просматривать комментарии к коду на странице https://selenic.com/hg/log?rev=graphmod – santiagopim

+0

Возможно ли, чтобы ртутный шрифт удалял ветку? – nonsensickle

2

третьей попытки, последующие до @santiagopim.

Да, Mercurial и Git используют тяжелые разные концепции (без дистанционного отслеживания, тянуть | по умолчанию переносить все ветви), но: если вы хотите видеть, используйте Mercurial в более стиле Git с многочисленными удаленными репозиториями с разбросанными история, вы можете:

  • с отличным шаблоном santiagopim (или расширить его с намеками Торека в в полнофункциональную стиле)
  • добавил hgremotenames или remotebranches расширения (которые, в общем, добавить описательную закладку для каждых вытащило имя удаленного)

Получите что-то вроде журнала Git.

0

Попробуйте TortoiseHg. Это не командная строка, но она удовлетворяет требованиям.

Он также освещает кончики каждой ветви (называемые «головами» в меркуриальном). Простое отображение имени ветки не будет выделять их, так как каждая фиксация имеет имя ветви.

2

--graph является --graph в hg. И по умолчанию используется значение --all.

Для --decorate и --oneline у меня в .hgrc:

[alias] 
la = log --graph --template {oneline} 

[templatealias] 
oneline = '{hash}{myBranch}{myBookmarks}{myTags} {name} {commitMsg}\n' 
hash = "{label(ifeq(phase, 'secret', 'yellow', ifeq(phase, 'draft', 'blue', 'red')), node|short)}" 
myBranch = "{ifeq(branch, 'default', '', label('green', ' ({branch})'))}" 
myBookmarks = "{bookmarks % ' {bookmark}{ifeq(bookmark, active, '*')}{bookmark}'}" 
myTags = "{label('yellow', tags % ' {tag}')}" 
name = '{label('blue', author|person)}' 
commitMsg = '{desc|firstline|strip}' 

[experimental] 
graphshorten = true 

Это решение не использует устаревшую --style аргумент. Вместо этого, как вы можете видеть в разделе псевдонима, он активируется hg la через опцию --template. Поскольку шаблоны могут входить, имя «oneline» будет отображать хэш, ветку, закладки, теги, коммиттер и сообщение фиксации.

Хэш изменит цвет в зависимости от фазы фиксации в этом примере.

Хотя шаблон только предлагает окончательную новую строку для каждой строки, hg ставит дополнительную пустую строку между каждой фиксацией. Опция graphshorten = true позволяет избежать этого.

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

Вот результат (удивительный цвет отсутствует):

| o 821ee2270f00 (lowercase_eats_whitespace) Robert Siemer add 'lowercase_eats_whitespace' directive 
| o 9a86b49dc3ba (settings_passing) Robert Siemer restructure settings-passing in parsers and grako 
|/ 
o 31664ddc943b Juancarlo Añez Merged in siemer/grako/siemer_fixup_regex (pull request #43) 
|\ 
| o 317cea8eba42 (siemer_fixup_regex) Robert Siemer buffering.py: remove a superfluous regexp.DOTALL from a '[...]+' pattern 
|/ 
o 31641ef78ba8 apalala Added tag 3.9.1 for changeset f33a2e80bb7d 
o f33a2e80bb7d 3.9.1 apalala Getting ready for release 3.9.1