2013-09-02 3 views
2

Я пытаюсь использовать git add -p, чтобы создать конкретный кусок изменений индекса.Почему этот патч не применяется?

Вот ломоть, как Git предлагает:

@@ -7,8 +7,15 @@ 
    <title>{{ page.title }}</title> 
    <link rel="stylesheet" href="/css/style.css"> 
    </head> 
- <body> 
- <div class="content container"> 
+ 
+ <body class="container"> 
+ <ul class="navigation"> 
+  {% if page.url != '/index.html' %} 
+  <li><a href="/">Home</a></li> 
+  {% endif %} 
+ </ul> 
+ 
+ <div class="content"> 
     {{ content }} 
    </div> 
    </body> 

и вот моя попытка редактирования этого патча:

@@ -7,5 +7,5 @@                                                         
    <title>{{ page.title }}</title>                                                   
    <link rel="stylesheet" href="/css/style.css">                                                
    </head>                                                          
- <body>                                                          
- <div class="content container">                                                   
+                                                            
+ <body class="container"> 

Git отвергает этот патч, говоря:

Отредактированный hunk не применяется. Изменить снова (говоря «нет» отбрасывает!) [Y/n]?

Я не понимаю, хотя:

  • Оба - и + начало в строке 7
  • Оба - и + идут на 5 линий

Когда я смотрю на исходный файл (ниже) и мысленно попытаться применить мой рекомендуемый патч, это, похоже, имеет смысл. Что не так?

Для справки, вот весь исходный файл:

1 <!DOCTYPE html>                                                        
    2 <html lang="en">                                                       
    3 <head>                                                         
    4  <meta charset="utf-8">                                                     
    5  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">                                           
    6  <meta name="viewport" content="width=device-width, initial-scale=1.0">                                         
    7  <title>{{ page.title }}</title>                                                   
    8  <link rel="stylesheet" href="/css/style.css">                                               
    9 </head>                                                         
10 <body>                                                         
11  <div class="content container">                                                   
12  {{ content }}                                                       
13  </div>                                                         
14 </body>                                                         
15 </html> 

Кроме того, здесь патч я писал, что Git не жалуется:

@@ -7,8 +7,9 @@ 
    <title>{{ page.title }}</title> 
    <link rel="stylesheet" href="/css/style.css"> 
    </head> 
- <body> 
- <div class="content container"> 
+ 
+ <body class="container"> 
+ <div class="content"> 
     {{ content }} 
    </div> 
    </body> 

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

+0

Вы включили последние три строки патча (для контекста) в отредактированный патч? Я не знаю, имеет ли это значение, но это было бы неправильно. – siride

+0

Да, моя вторая попытка патча (тот, который работает) имеет контекст в конце. Первый - тот, о котором идет речь, - не имеет контекста в конце. ** Я разместил все дословно. ** Я немного думал, что контекст является обязательным, но я просто столкнулся с Git-сгенерированным патчем без конечного контекста. Опять же, этот патч был для hunk в файле. Таким образом, я не знаю, что требуется контекст. –

+0

попробуйте с контекстом и отчитайтесь. – siride

ответ

1

Контекст действительно требуется в исправлениях, по крайней мере, по умолчанию. Удалив нижний контекст, патч говорит, что изменения являются последними строками файла.

Изучив руководство git help apply в опции -C (context), он говорит: «По умолчанию контекст никогда не игнорируется». Вы можете игнорировать контекст с git apply -C0 my.patch, но, конечно же, это не помогает с интерактивным редактированием, которое вы делаете, поскольку оно, по-видимому, использует значение по умолчанию.

Дальнейшее чтение git help add я замечаю раздел под названием «РЕДАКТИРОВАНИЕ ЗАПЛАТЫ» со следующими пунктами, которые наконец-то говорит, что все это:

There are also several operations which should be avoided entirely, 
as they will make the patch impossible to apply: 

    · adding context (" ") or removal ("-") lines 

    · deleting context or removal lines 

    · modifying the contents of context or removal lines 
Смежные вопросы