Создайте новую ветку, внесли много изменений, как просмотреть список измененных файлов? - PullRequest
9 голосов
/ 19 января 2012

Итак, была создана новая ветка, в которой мы внесли некоторые критические изменения в кодовую базу.

Теперь мы собираемся объединиться, но перед этим я хочу получить список всех файлов, которые были изменены вветка.

Как получить список файлов?Я попытался:

hg status --change REV

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

Ответы [ 5 ]

8 голосов
/ 19 января 2012

Попробуйте с помощью

$ hg status --rev "branch('your-branch')"

получить изменения между первым и последним набором изменений в ветви (hg status будет неявно использовать min(branch('your-branch')) и max(branch('your-branch')), когда вы дадите ему диапазон ревизийвот так).

Поскольку вы будете объединяться, вам действительно нужно взглянуть на

$ hg status --rev default:your-branch

, чтобы увидеть, что изменилось между веткой default и your-branch.Это показывает вам выполненные изменения и отфильтровывает любые изменения, сделанные в ветке из-за слияния с default.

Это необходимо, если ваша история выглядит так:

your-branch:      x --- o --- o --- o --- o --- o --- y
                 /           /           /
default:  o --- a --- o --- b --- o --- c --- o --- o --- d

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

Но если новый файл был введен в defaultи позже слились в B, тогда вы не хотите видеть это в выводе hg status.Вы увидите это, если вы сделаете

$ hg status --rev a:y

, поскольку файл отсутствовал в a, но присутствует в y.Если вы сделаете

$ hg status --rev d:y

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


Вы пишете в комментарии, что работаете печь хранилище.Они имеют в виду «клон», когда говорят «ветвь», но выше все еще можно адаптировать для вашего случая.Все наборы изменений будут в default именованной ветви , но это нормально.

Запустите следующую команду в локальном клоне репозитория "branch":

$ hg bookmark -r tip mybranch

Это отмечает текущий наконечник как заголовок mybranch.Затем извлеките все наборы изменений из основного хранилища:

$ hg pull https://you.kilnhg.com/Repo/public/Group/Main

Затем отметьте новый наконечник в качестве наконечника основного хранилища:

$ hg bookmark -r tip main

Вы можетеТеперь запустите

$ hg status --rev main:mybranch

, чтобы увидеть изменения между main и my-branch.Если вы хотите увидеть, что вы сделали с самой веткой, используйте

$ hg status --rev "::mybranch - ::main"

. Часть ::mybranch выберет наборы изменений, которые являются предками mybranch - это все ваша новая работа плюс старая историядо того, как вы разветвились.Мы удаляем старую историю с - ::main.В старых версиях Mercurial вы использовали бы hg log -r -r mybranch:0 -P main.

0 голосов
/ 23 октября 2017

С mercurial , если вы хотите получить список всех файлов, измененных в вашей текущей ветке (изменения сделаны из вашей ревизии), вы можете использовать эти команды::

hg log --branch $(hg branch) --stat | grep '|' | awk -F\  '{printf ("%s\n", $1)}' | sort -u

Пример результата:

api/tests/test_my_app.py
docker/run.sh
api/my_app.py

Объяснение команд:

hg log --branch $(hg branch) --stat

Показать историю изменений всего хранилища или файлов и вывести сводку изменений в стиле diffstat

hg branch

Показать текущее название ветви

grep '|'

Поиск текстового шаблона, в данном случае это "|"

awk -F\  '{printf ("%s\n", $1)}'

Разделитель пробелов обозначает каждое поле в записи и печатает каждое поле в новой строке

sort -u

Сортировка всех напечатанных строк и удаление дубликатов

0 голосов
/ 01 июня 2016

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

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

hg log --rev "branch('my-branch') and not merge()" --template '{files}\n' | sed -e 's/ /\n/g' | sort -u

если у вас есть пробелы в именах файлов, вы можете сделать это следующим образом:

hg log --rev "branch('my-branch') and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u

И ответить на вашпоследний вопрос, изменения могут быть показаны следующим образом:

hg log --rev "branch('my-branch') and not merge()" --template '{rev}\n'

СОВЕТ: Я использую псевдоним hg для этого:

[alias]
_lf = ! $HG log --rev "branch(\"$1\") and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u
0 голосов
/ 20 января 2012

Чтобы просмотреть номера ревизий, включите расширение graphlog и запустите:

$ hg log -b your-branch -G

Это даст вам хороший ASCII-график.Это может быть удобно для быстрого просмотра графика, но я рекомендую использовать TortoiseHg для кроссплатформенного просмотра журнала:

TortoiseHg 2.0 workbench

0 голосов
/ 19 января 2012

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

...