Snapshot your work – patches in git

Mam tak czasami, że potrzebuje przenieść obecne zmiany na inny komputer, a nie chce ich commitować – bo testy nie przechodzą albo nie skończyłem refaktoryzacji czy coś.

Zastanawiałem, się czy takie przenosiny są możliwe bez kopiowania całego repozytorium czy robieniu magicznych rzeczy z branchami.

Na szczęście tak długo jak mamy kod w repozytorium gita to cytując klasyka:

467a4cebc8fe1482d774381d275e1ce30b428841

Jest taka “nie-tak-bardzo rozpowszechniona” funkcjonalność w gicie która umożliwia dokładnie to czego potrzebujemy.

git-apply

Z dokumentacji: “Apply a patch to files and/or to the index”

Czyli wstawianie zmian do obecnego repozytorium z tzw. patcha.
Zakładając oczywiście, że patch to są nasze zmiany.

A jak wygenerować patch?

Otóż jest jedna z najzajebiściej zaprojektowanych funkcjonalności w gicie.
Trzymajcie się krzeseł:

git-diff

Pamięta ktoś git-diff?

Taka mała komenda która wypisuje wszystkie aktualne zmiany na konsole – dość znana, przydatna i w ogóle.

Generuje wyniki pokroju:

diff --git a/src/rl_engine/dungeon_generator/bsp.clj b/src/rl_engine/dungeon_generator/bsp.clj
index 9c38bde..6c90a28 100644
--- a/src/rl_engine/dungeon_generator/bsp.clj
+++ b/src/rl_engine/dungeon_generator/bsp.clj
@@ -182,6 +182,4 @@
    (let [tree (tree-generator)]
      (if (= {} tree)
        (generate-empty-floor height width)
-       (do
-         (print tree)
-         (generate-floor-from-tree tree))))))
+       (generate-floor-from-tree tree)))))

Otóż aby zrobić patch wystarczy:

  1. Uruchomić git-diff
  2. Przekierować wynik do pliku – “git diff > changes.patch”

A potem aby załadować owego patcha wystarczy: “git apply <path_to_patch>”

Najlepiej chyba podsumuje to egoraptor

(oczyma duszy zamieńmy tylko “intro stage in megaman X” na “patch handling in git”)

Naprawdę, jak pierwszy raz się do tego doczytałem to nie mogłem wyjść z podziwu…
Wow…

Mała pierdoła – ale widać jak porządnie przemyślana i wykonana.
Nic tylko stwierdzić:

9479398

Be First to Comment

A penny for your thoughts