Как читать бзр diff

Оригинал :

if __name__ == "__main__":
    myparams = {"server":"mpilgrim", \
                    "database":"master", \
                    "uid":"sa", \
                    "pwd":"secret" \
                    }

резка bzr diff:

 if __name__ == "__main__":
     myparams = {"server":"mpilgrim", \
@@ -15,4 +22,6 @@
                     "pwd":"secret" \
                     }

Что означает '@@ -15,4 +22,6 @@' часть bzr diff и почему она перезаписывает две строки?

"database":"master", \
"uid":"sa", \

1 ответ

Решение

Вы предоставили выдержки из контекста diff, который показывает обе одинаковые строки в файлах и измененные строки. Однако выбранные вами отрывки на самом деле не показывают никаких измененных строк. (Это будет предшествовать - или же + символы, в зависимости от того, были ли они удалены или добавлены.)

@@ -15,4 +22,6 @@ Значит это 4 строки, начинающиеся со строки 15 в старом файле они изменены (или не изменены, но показаны как контекст) и соответствуют 6 строки, начинающиеся со строки 22 в новом файле. (Самый простой и в подавляющем большинстве случаев наиболее распространенный способ для этого состоит в том, что число строк, добавленных в новый файл, превышает число строк, удаленных в новом файле, на 7, так что то, что началось в строке 15 в старом файле начинается с линии 22 в новом файле, до внесения изменений, которые должны быть указаны.)

Поскольку это diff контекста, он предоставляет несколько строк для контекста, которые не определяют изменения. Это полезно, чтобы позволить людям, редактирующим файлы (разработчикам / сопровождающим, когда это исходный код, как в этом случае), знать, что происходит, просматривая diff. Но у него есть и другая полезная цель - во многих случаях сделать возможным применение различий, созданных для одной версии файла, к другой версии того же файла, при условии, что он не изменяет те же строки, которые уже были изменены. (то есть, которые были изменены после создания различий, но до его применения).

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

if __name__ == "__main__":
    myparams = {"server":"mpilgrim", \

Принимая во внимание, что эти строки предположительно присутствуют, как контекст, в diff, потому что вскоре после них произойдет изменение (поэтому они являются контекстом, предоставленным до изменения):

 "pwd":"секрет" \
                     }

Эти строки, по-видимому, недостаточно близки к любым изменениям, указанным в diff, для включения в контекст:

 "база данных":"мастер", \
                    "uid":"sa", \

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

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

Для получения дополнительной информации о diff (diff, patch, diff3, а также sdiff коммунальные услуги, а также diff/patch формат), см. документацию по GNU diff. В частности, вас может заинтересовать раздел о едином формате.

Другие вопросы по тегам