Как твердость несколько конфликтов с “мерзавцем mergetool”, не имея необходимость закрывать редактора между файлами?

Очевидная вещь, которую нужно сделать, это просто поместить сообщение об ошибке в foo. Если вы не можете этого сделать, просто оберните это:

bool fooWithLogging(int x, iny y)
{
    auto result = foo(x,y);
    if (result)
    {
        std::cerr << "Error occurred with values" << x << "," << y << std::endl;
    }
}

Вызов обертки в вашем коде:

void func1()
{
    ...
    fooWithLogging(x,y);
    ...
}

void func2()
{
    ...
    fooWithLogging(x,y);
    ...
}

Бонус: сделайте запись динамической:

[ 112]

А теперь с вашим требованием FILE и LINE, которое только что упоминалось в комментариях:

bool _fooWithLogging(int x, iny y, const std::string& filename, int line)
{
    auto result = foo(x,y);
    if (result && g_isFooLoggingEnabled)
    {
        std::cerr << "Error occurred in file" << filename << " on line " << line << " with values" << x << "," << y << std::endl;
    }
}

#define FooWithLogging(x, y) _fooWithLogging(x, y, __FILE__, __LINE__)

Затем в коде:

void func1()
{
    ...
    FooWithLogging(x,y);
    ...
}
53
задан Ciro Santilli 新疆改造中心法轮功六四事件 6 August 2019 в 04:49
поделиться

3 ответа

На первый взгляд не кажется возможным снова использовать внешнюю различную сессию инструмента.

git-mergetool документация ясно состояния:

, Если пользовательский инструмент слияния правильно указывает на успех разрешения слияния с его кодом выхода , то переменная конфигурации mergetool.<tool>.trustExitCode может иметь значение true.
Иначе, git-mergetool предложит пользователю указывать на успех разрешения после того, как инструмент пользователя выйдет.

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

, Который кажется большим стимулом сократить количество конфликтов на каждом слиянии/переоснове, которого каждый делает попытку;) (безотносительно используемого инструмента VCScs)

Примечание:
Два других мерзавца внешние различные настройки инструментов (" Установка разности и инструментов слияния для Мерзавца в Windows " и" Установка SourceGear DiffMerge с Мерзавцем ") не дают больше надежд, когда это доходит до [1 111] не закрытие внешний различный инструмент...

34
ответ дан VonC 7 November 2019 в 08:49
поделиться

Если Ваш mergetool поддержек выбора вводные файлы в существующем экземпляре, можно определить команду в конфигурации мерзавца:

% git config mergetool.whatever_you_want.cmd 'exec /path/to/merge/tool $LOCAL $MERGED $REMOTE'
% git config merge.tool whatever_you_want

git mergetool тогда выполнит Вашу пользовательскую команду и затем предложит Вам относительно того, был ли файл объединен успешно (вместо рассмотрения кода выхода).

пример я просто взломал вместе для vimdiff:

% git config mergetool.persistent.cmd 'gvim --remote-tab-silent "+set buftype=nowrite" "$PWD/$BASE" && sleep 1; gvim --remote-send ":split $PWD/$REMOTE<CR>:set buftype=nowrite<CR>:vertical diffsplit $PWD/$MERGED<CR>:vertical diffsplit $PWD/$LOCAL<CR>:set buftype=nowrite<CR><C-W>l"'

Это работает достаточно хорошо, я могу начать использовать его сам!

22
ответ дан Brian Phillips 7 November 2019 в 08:49
поделиться

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

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

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

12
ответ дан CB Bailey 7 November 2019 в 08:49
поделиться
Другие вопросы по тегам:

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