2013-04-13 18 views
34

Próbowałem robićgit stworzyć łatkę Diff

git diff 13.1_dev sale_edit > patch.diff 

Potem próbowałem robić git apply patch.diff w innej branży, ale mam patch nie ma zastosowania. W jaki sposób mogę tworzyć pliki łatek z różnic, których mogę używać z gitem?

Błędy otrzymali:

$ git apply --ignore-space-change --ignore-whitespace diff.diff 
diff.diff:9: trailing whitespace. 

diff.diff:10: trailing whitespace. 
    function set_change_sale_date() 
diff.diff:12: space before tab in indent. 
     $this->sale_lib->set_change_sale_date($this->input->post('change_sale_date')); 
diff.diff:14: trailing whitespace. 

diff.diff:15: trailing whitespace. 
    function set_change_sale_date_enable() 
warning: application/controllers/sales.php has type 100755, expected 100644 
error: patch failed: application/controllers/sales.php:520 
error: application/controllers/sales.php: patch does not apply 
warning: application/language/english/sales_lang.php has type 100755, expected 100644 
error: patch failed: application/language/english/sales_lang.php:134 
error: application/language/english/sales_lang.php: patch does not apply 
warning: application/libraries/Sale_lib.php has type 100755, expected 100644 
error: patch failed: application/models/sale.php:170 
error: application/models/sale.php: patch does not apply 
warning: application/views/sales/register.php has type 100755, expected 100644 
error: patch failed: application/views/sales/register.php:361 
error: application/views/sales/register.php: patch does not apply 

Próbuję to na Mac

+1

Git jest niewłaściwym narzędziem do pracy. Możesz spędzić wiele godzin próbując zastosować łatkę, ponieważ Git nie obsługuje poprawnie białych znaków i linii końcowych. Spędziłem ponad godzinę próbując zastosować trzypunktową łatę wysłaną do mnie pocztą elektroniczną (zobacz także [Zastosuj poprawkę do pliku, który jest pod Gitem bez użycia Git?] (Http://stackoverflow.com/q/35353267)) . Użyj programu 'patch'. Obsługuje białe znaki i kreski linii bez sypiania się na siebie. – jww

Odpowiedz

21

Spróbuj:

git apply --ignore-space-change --ignore-whitespace patch.diff 

Jak wspomniano w "git: patch does not apply", może to być spowodowane przez:

  • końcówki linii diff pomiędzy lokalnym systemem plików i zdalnym repozytorium.
    użytkownika core.eol w .gitattributes pliku jest dobrym podejściem (patrz "git force file encoding on commit")
  • bit wykonania ('x').
    To może doprowadzić do ustawienia git config core.filemode false, a następnie git reset --hard HEAD (upewnij się, że nie masz niezatwierdzonych zmian, lub zostaną one utracone).
+0

Czy możesz podać więcej informacji na temat bitu wykonawczego? – stdcall

+0

@Mellowcandle szczegóły są na http://stackoverflow.com/a/4770223/6309 – VonC

+0

Nadal nie ma zastosowania. Zobacz zaktualizowane pytanie –

1

Tutaj musisz spróbować z odgałęzieniem, z którym masz do czynienia.

git diff 13.1_dev sale_edit > patch.diff yourBranch() 
10

Można zastosować poprawkę jako 3-way seryjnej:

git diff 13.1_dev sale_edit > patch.diff 
git apply -3 patch.diff 

To powinno wywołać konflikt, dzięki czemu można rozwiązać ręcznie. Albo można przejść z jednej liniowej, rurociągów poprawkę do git-stosować bezpośrednio:

git diff 13.1_dev sale_edit | git apply -3 

Aby odwrócić patch:

git diff 13.1_dev sale_edit | git apply -3 -R 

(uwaga: jest to samo co powyżej poleceń bez dwuetapowym procesie tworzenia patch)

git help apply 

-3, --3way   
When the patch does not apply cleanly, fall back on 3-way merge if 
the patch records the identity of blobs it is supposed to apply to, 
and we have those blobs available locally, possibly leaving 
the conflict markers in the files in the working tree for the user 
to resolve... 
1

z git wersji 1.9.1, widzę podobne dolegliwości gdy stosowanie „git zastosowanie”, aby zastosować poprawkę utworzony przy użyciu git diff „”.

Wygląda na to, że 1.9.1 git ma problem z mieszaniem spacji & kart w pliku łatki.

warning: squelched 1 whitespace error warning: 6 lines add whitespace errors.

@ odpowiedź VonC za nie pomaga, a ja wciąż się te same ostrzeżenia.

Najprostszym rozwiązaniem jest po prostu użycie polecenia "" ", które z powodzeniem stosuje wszystkie zmiany wychwycone w wyniku" git diff "do docelowego katalogu git.

$ patch --version GNU patch 2.7.1

+0

Interesujące użycie łaty poleceń. +1 – VonC