Как я могу сделать changeset базирующееся слияние вместо основанного на файле файлом слияния с Подвижным?

Это то, что вы хотите?

Select * from
(
select a.* from tbl a join tbl b
on a.ID = b.ID
where
a.Type = 'Name' and b.Type = 'Text'
) tb
where tb.Type = 'Name'
8
задан jsaylor 30 April 2009 в 15:19
поделиться

5 ответов

Попробуйте настроить ui.merge. См. эту страницу для более подробной информации.

0
ответ дан 5 December 2019 в 20:18
поделиться

Думаю, этот отвечает на ваш вопрос.

1
ответ дан 5 December 2019 в 20:18
поделиться

Я передал вопрос #mercurial на irc.freenode.net пару дней назад. mpm (автор Mercurial) дал своего рода ответ (это была только половина ответа, поэтому я не сразу передал его здесь). Он сказал, что можно сделать что-то, где вы позволите Mercurial автоматически объединить файлы (и вставить маркеры слияния <<<< и >>>> , где есть конфликты) .

Затем используйте инструмент слияния, который знает об этих маркерах: это позволит вам разрешить их все сразу, вместо того, чтобы делать это для каждого файла отдельно. Отправной точкой может быть страница конфигурации инструмента слияния . Он объясняет, что

[ui]
merge = internal:merge

заставит Mercurial вставить маркеры слияния. Здесь я протестировал это, сделав два файла x. txt и y.txt , которые я затем модифицировал с конфликтующими изменениями в двух клонах. Слияние просто дало:

% hg merge
merging x.txt
warning: conflicts during merge.
merging x.txt failed!
merging y.txt
warning: conflicts during merge.
merging y.txt failed!
0 files updated, 0 files merged, 0 files removed, 2 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon

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

Теперь файлы содержат такие маркеры слияния:

% cat x.txt
foo
<<<<<<< local
hehe
=======
foobar
>>>>>>> other

Следующий шаг - найти инструмент, который может взять дерево каталогов с такими файлами и разрешить их. Я посмотрел на kdiff3, но не понял, как использовать его для работы только с одним файлом, похоже, он очень сосредоточен на сравнении пар файлов / каталогов.

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

txt , который я затем модифицировал, добавив конфликтующие изменения в двух клонах. Слияние просто дало:

% hg merge
merging x.txt
warning: conflicts during merge.
merging x.txt failed!
merging y.txt
warning: conflicts during merge.
merging y.txt failed!
0 files updated, 0 files merged, 0 files removed, 2 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon

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

Теперь файлы содержат такие маркеры слияния:

% cat x.txt
foo
<<<<<<< local
hehe
=======
foobar
>>>>>>> other

Следующий шаг - найти инструмент, который может взять дерево каталогов с такими файлами и разрешить их. Я посмотрел на kdiff3, но не понял, как использовать его для работы только с одним файлом, похоже, он очень сосредоточен на сравнении пар файлов / каталогов.

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

txt , который я затем модифицировал, добавив конфликтующие изменения в двух клонах. Слияние просто дало:

% hg merge
merging x.txt
warning: conflicts during merge.
merging x.txt failed!
merging y.txt
warning: conflicts during merge.
merging y.txt failed!
0 files updated, 0 files merged, 0 files removed, 2 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon

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

Теперь файлы содержат такие маркеры слияния:

% cat x.txt
foo
<<<<<<< local
hehe
=======
foobar
>>>>>>> other

Следующий шаг - найти инструмент, который может взять дерево каталогов с такими файлами и разрешить их. Я посмотрел на kdiff3, но не понял, как использовать его для работы только с одним файлом, похоже, он очень сосредоточен на сравнении пар файлов / каталогов.

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

Мне не нужно было ничего подтверждать для каждого файла, как вы описываете.

Теперь файлы содержат такие маркеры слияния:

% cat x.txt
foo
<<<<<<< local
hehe
=======
foobar
>>>>>>> other

Следующим шагом является поиск инструмента, который может взять дерево каталогов с такими файлами и позволить вам разрешить их . Я посмотрел на kdiff3, но не понял, как использовать его для работы только с одним файлом, похоже, он очень сосредоточен на сравнении пар файлов / каталогов.

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

Мне не нужно было ничего подтверждать для каждого файла, как вы описываете.

Теперь файлы содержат такие маркеры слияния:

% cat x.txt
foo
<<<<<<< local
hehe
=======
foobar
>>>>>>> other

Следующим шагом является поиск инструмента, который может взять дерево каталогов с такими файлами и позволить вам разрешить их . Я посмотрел на kdiff3, но не понял, как использовать его для работы только с одним файлом, похоже, он очень сосредоточен на сравнении пар файлов / каталогов.

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

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

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

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

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

3
ответ дан 5 December 2019 в 20:18
поделиться

звучит так, будто вам нужна команда extdiff :

у меня они есть в моем ~ / .hgrc (я предпочитаю meld, но вы можете изменить его на kdiff3 и т. Д. )

[extensions]
hgext.extdiff =

[extdiff]
# add new command called meld, runs meld (no need to name twice)
cmd.meld =

С extdiff ваши слияния происходят в вашем рабочем каталоге, и, кроме того, вы можете передать любые дополнительные параметры вашей программе сравнения с помощью -o:

$ hg help extdiff

hg extdiff [OPT] ... [FILE] ...

использовать внешнюю программу для сравнения репозиторий (или выбранные файлы)

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

Чтобы выбрать другую программу, используйте параметр -p. Программа
будут переданы имена двух каталогов для сравнения. Пройти
дополнительные параметры программы, используйте параметр -o. Эти будут
перед именами каталогов для сравнения.

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

параметры:

-p - программа сравнения программ для запуска
-o --option передать параметр программе сравнения
-r --rev редакция
-I --include включить имена, соответствующие заданным шаблонам
-X --exclude исключить имена, соответствующие заданным шаблонам

0
ответ дан 5 December 2019 в 20:18
поделиться

Я придумал решение, которое дает то, что я хочу, но Я до сих пор чувствую, что это лажа.

  • Начните с пустого рабочего каталога с двумя головами: Моя и Их.
  • Обновите рабочий каталог до Моего:
    hg update [Мое мнение здесь]
  • Выполнить слияние, но вывести из строя все файлы, которые Merc не может обработать автоматически, без запуска инструмента слияния, и сохранить «Мои» файлы в случае конфликта:
    hg --config "ui.merge=internal:fail" merge

See https://www.mercurial-scm.org/wiki/TipsAndTricks#head-9f405488b6d3b3d092a09aafa28db515ba44c742 for how-to merge/fail details.

Now I've got a working dir with as much as auto could figure out, but any outstanding files still untouched from Mine. (Use hg resolve -l to see the Mercurial's resolution status of current files)

  • Now I can vdiff my working dir against the Theirs head which gives me the high level, changeset-to-changeset merge that I was looking for.

hg vdiff -r [Theirs head's rev here]

Note: If you're using WinMerge for your vdiffs , then make sure it has an /r switch as an option which will do a subdirectory compare and - if WinMerge config is set to use Tree-View - will give a great tree comparison. From Mercurial.ini:

[extdiff]
cmd.vdiff = C:\Program Files\WinMerge\WinMergeU.exe
opts.vdiff = /e /ub /r /dl other /dr local

Now I can work the entire directory which includes the unresolved files and make project wide changes as necessary (ie. maybe resolving one file requires additional changes in another).

  • When done use resolve to mark all files resolved for Merc and then commit.
    hg resolve -m

Whew! Here's hoping this helps someone else!

4
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: