2013-07-26 15 views
11

Próbuję zastosować poprawkę do pliku, używając git apply. Ogólna poprawka nie powiodła się, więc użyłem git apply --reject.Jak zastosować odrzucone kawałki po ich naprawieniu?

Sprawdzanie wygenerowanego pliku .rej pokazało mi, co jest nie tak, teraz naprawiłem problem w pliku .rej.

Ale próbując zastosować plik .rej niepowodzeniem z komunikatem

krytyczny patch fragment bez nagłówka w wierszu 2: ...

Czy istnieje sposób, aby ponownie ubiegać się .rej plik po naprawieniu problemów? Czy muszę zmodyfikować oryginalną poprawkę i muszę ponownie uruchomić git apply?

To byłoby trochę kłopotliwe w tym przypadku, ponieważ oryginalna łatka zawiera łaty dla kilkudziesięciu plików i nie chcę, aby git checkout zastosował modyfikacje, aby ponownie naprawić cały plik poprawki.

Odpowiedz

6

Aby wyjaśnić what @julian-squires said, problemem jest to, że .rej pliki są brakujące drobne rzeczy między diff a/thefile... i @@ -line/columns....

ORIGINAL .rej plik

diff a/the/original/file.cs b/the/original/file.cs (rejected hunks) 
@@ -27,9 +27,9 @@ whatever was on that line 

Trzeba skopiować A/B nazwy plików z linii diff i dodać je ze wskaźnikami zmian poniżej, jak:

AKTUALIZACJA .rej plik

diff a/the/original/file.cs b/the/original/file.cs (rejected hunks) 
--- a/the/original/file.cs 
+++ b/the/original/file.cs 
@@ -27,9 +27,9 @@ whatever was on that line 

Następnie można zastosować .rej plików jak zwykły plaster.

+0

Dzięki za wyjaśnienie. Sprawdzę twoją odpowiedź, ponieważ jest to zwykły angielski zamiast zwykłego Basha ... – eckes

0

Nie ma potrzeby ręcznego modyfikowania plików, w których znajduje się plik .rej. Powiedziałeś, że to naprawiłeś. Po rozwiązaniu wszystkich problemów związanych z .rej jesteś gotowy na git commit. git apply --reject nadal oszczędza trochę czasu w tym, że git apply --reject zmodyfikuje pliki tam, gdzie może.

2

Miałem ten problem niedawno, podczas korzystania z git am --reject, aby zastosować kilka poprawek. Sposób, w jaki podszedł go było masować nagłówek .rej plik do czegoś patch(1) byłoby rozpoznać, z

sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/' 

i modyfikować je emacs (których diff-mode aktualizuje linię liczy w porcji jak zmodyfikować patcha) i zastosowanych je z patch.

Mój workflow skończyło się patrząc tak:

$ (for i in $(find . -name \*.rej); do 
    sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/' -i $i && 
    emacsclient $i && 
    patch -p0 < $i; 
    done) && git add -u && git clean -xdf && git am --continue 

z odpowiedniej konfiguracji makr w emacs dla powtarzających się przypadków. Nie jest to najbardziej eleganckie podejście, ale zadziałało.

+0

Niestety, [Nie mogę mówić Linux ...] (http://stackoverflow.com/a/28569128/1037948) – drzaus

Powiązane problemy