Вы также можете использовать метод compareTo()
для сравнения двух строк. Если результат compareTo равен 0, то две строки равны, в противном случае сравниваемые строки не равны.
==
сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку, используя new String(somestring).intern()
, вы можете использовать оператор ==
для сравнения двух строк, в противном случае могут использоваться только методы equals () или compareTo.
Нет действительно удобного способа сделать это, но вы можете создать его из инструментов, предоставляемых Git. Основным инструментом, который требуется, является этот git merge-file
, который выполняет трехстороннее слияние на одном трио версий файлов, то есть base + ours + их версии. Он принимает опции --ours
и --theirs
для разрешения конфликтов так же, как это делают -X ours
и -X theirs
для общего слияния, т. Е. Он не просто берет наш файл или их ] файл , он берет наших или их только в конфликтных точках.
Это все замечательно, но где взять три версии? Git остановился с конфликтом слияний, скажем, main.py
. В вашем рабочем дереве main.py
содержит беспорядок, оставленный Git, с маркерами <<<<<<< ... >>>>>>>
вокруг конфликтующих строк. Но git merge-file
нужны три неотмеченных входных файла для базовой версии слияния, «нашей» версии и «их» версии. Но эти три файла находятся в индексе ! Если файл F имел конфликт, существует :1:F
с базовой версией слияния, :2:F
с нашей и :3:F
с их.
Чтобы получить их, вы можете использовать git show
или git checkout-index
. Последний на самом деле правильный инструмент: git mergetool
использует git checkout-index
, с этой маленькой функцией оболочки:
checkout_staged_file () {
tmpfile=$(expr \
"$(git checkout-index --temp --stage="$1" "$2" 2>/dev/null)" \
: '\([^ ]*\) ')
if test $? -eq 0 && test -n "$tmpfile"
then
mv -- "$(git rev-parse --show-cdup)$tmpfile" "$3"
else
>"$3"
fi
}
Вызывается как checkout_staged_file 1 main.py main.py.base
, например, он извлекает stage-1 (базу слияния) копия main.py
- main.py.base
. Повторите с 2 и 3 и подходящими вариантами для третьего аргумента, чтобы получить все три файла. Затем запустите git merge-file
для трех файлов, как описано в в документации git merge-file
.
(Подробнее см. исходный код git mergetool
. Это просто большой сценарий оболочки, поэтому его довольно легко читать и изменять для собственных целей.)