Git слить конфликт, чтобы всегда брать новейший файл

Как я могу создать конфликт git, чтобы ВСЕГДА были решены, взяв новейший файл (последняя измененная временная метка), дошли без подсказки?

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

Изменить: с новым файлом я имею в виду новейшую фиксацию, содержащую этот файл.

Ответ 1

Я подошел к этому маленькому драйверу слияния, который делает то, что я хочу. Для моей цели он жестко закодирован в "ведущую" ветку и на "исходный" пульт. Я не знаю, как сделать эти части динамическими.

#!/usr/bin/env sh
if git merge-file -p -q "$2" "$1" "$3" > /dev/null;
        then git merge-file "$2" "$1" "$3";
        else
                MINE=$(git log --format="%ct" --no-merges master -1);
                THEIRS=$(git log --format="%ct" --no-merges origin/master -1);
                if [ $MINE -gt $THEIRS ];
                        then git merge-file -q --ours "$2" "$1" "$3";
                        else git merge-file -q --theirs "$2" "$1" "$3";
                fi
fi

Короче, я искал последнюю фиксацию с git -log, которая не была слиянием, отформатирована как временная метка UNIX, затем я сравниваю их и запускаю пользовательский git -merge с eiter ours или их версией.

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

Ответ 2

Думаю, вам придется написать свой собственный слияние-драйвер для этого. См. "git help gitattributes", разделы "Определение пользовательского интерфейса слияния" для получения подробной информации о том, как это сделать.