получение полных путей к файлам в git merge - PullRequest
5 голосов
/ 12 апреля 2011

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

Merge made by recursive.
 .../somepath/anotherpath/toolong/default.css     |    2 +-

Когда в других случаях он дает полный путь

Auto-merging thefullpath/to/myfile/default.jsp

Я хотел бы всегда иметь полный доступный путь для сопоставления файлов между слияниями.

1 Ответ

2 голосов
/ 13 апреля 2011

Меня немного смущает ваша конечная цель, но я думаю, что в любом случае могу дать ответ.

Если вы хотите получить хороший отчет об изменениях, когда слияние сталкивается с конфликтами, т. Е. Пока все еще не передано, вы должны использовать git status --porcelain. Он дает хороший, машиночитаемый список всех файлов и их статусов (включая состояния конфликта слияния) и хорошо документирован на странице руководства . В зависимости от вашего варианта использования, вы можете даже использовать git merge --no-commit, чтобы убедиться, что у вас есть возможность проверить результат слияния перед продолжением (фиксацией). Вы также можете использовать git diff HEAD --numstat для получения машиночитаемого отчета о количестве добавленных / удаленных строк по файлу.

Если вы хотите изучить слияния после факта, это очень хороший вариант использования для git diff-tree:

git diff-tree -c --numstat <commit>

-c говорит ему, что diff объединяет коммиты против обоих родителей, а --numstat дает вам хороший машиночитаемый вывод, как и раньше.

Наконец, если вы хотите создать очень подробные отчеты о конфликтах, вы можете передать -p вместо --numstat, что даст вам полный выход патча. Этот тип патча вы увидите в gitk, где в начале каждой строки есть два символа, указывающих, была ли строка добавлена ​​/ удалена относительно каждого родителя. Изменения, исходящие только от одного родителя, имеют только один символ (например, '+ ', ' -', кавычки добавлены, чтобы сделать пробелы видимыми), в то время как строки, измененные вручную в рамках разрешения конфликта, будут иметь два (--, ++). Вы могли бы разобрать это самостоятельно, если бы вам действительно пришлось. (К сожалению, я не думаю, что есть что-то вроде --numstat на стероидах для коммитов слияния.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...