2013-04-21 11 views
23

W Stack Overflow jest wiele pytań dotyczących problemu przemieszczania i zatwierdzania tylko części z plików. Jednak nie mogę sprawić, żeby działało.Git: zatwierdza częściowe zmiany

Powiedzmy chcemy wdrożyć obojętne lekcji matematyki w PHP (język nie ma znaczenia) z pewnymi podstawowymi metodami takimi jak: add, subtract, multiply i divide.

Zacznijmy od definicji klasy:

<?php 
    class Math { 
    } 
?> 

Teraz:

$ git add math.php 
$ git commit -m "Create Math class." 

W następnym kroku realizujemy zarówno add i subtract cztery sposoby:

<?php 
    class Math { 
     public function add($a, $b) { 
      return $a + $b; 
     } 

     public function subtract($a, $b) { 
      return $a - $b; 
     } 
    } 
?> 

Ale teraz chcemy popełnić realizację add i subtract metody w oddzielnych zobowiązuje.

Czy to możliwe?

Co próbowałem

$ git add -p

Poniższy komunikat:

enter image description here

chciałbym podzielić porcję na mniejsze porcji, więc pędzę s, a po pojawia się:

enter image description here

Wygląda na to, że git nie podzielił go na mniejsze porcje.

Spróbujmy teraz ręcznie edytować aktualny przystojniak. Więc naciskaję: e.

Mój tekst domyślny edytor (Sublime Text) otwiera się, a tu mogę edytować przystojniak:

enter image description here

Staram się po prostu usunąć linii 8,9,10,11 - bo chcę etap tylko funkcja add. zapisać, zamknąć edytor, ale git mówi:

Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?

Jestem naprawdę nowego do git add -p i interaktywnej inscenizacji, więc może coś robię źle, czy po prostu nie jest możliwe, co chcę, i naprawdę mam nadzieję, że bardziej doświadczeni użytkownicy git mają jakieś instrukcje, być może również rozwiązanie dla mnie.

Dziękujemy!

+1

Czy próbujesz nauczyć się tego "git"? Osobiście nie zawracam sobie głowy takimi szczegółami. Po prostu usunę jedną funkcję, zatwierdzę ją, dodam z powrotem i zatwierdzę. – TheBuzzSaw

+0

Tak, właśnie to zrobiłem w moim ostatnim projekcie. Może to jest łatwiejszy sposób. Chciałbym jednak zrobić to w gitarze, a następnie zdecydować, którą wybrać. –

+0

możliwy duplikat [Zatwierdź tylko część pliku w Git] (http://stackoverflow.com/questions/1085162/commit-only-part-of-a-file-in-git) – 7ochem

Odpowiedz

15

Robisz dokładnie to, co robiłem w przeszłości, a nawet odtworzyłem cały twój eksperyment na maszynie UNIX i działało zgodnie z oczekiwaniami.

Podejrzewam, że twój edytor zmienia końcówki linii w przystawce diff podczas zapisywania.

+1

Wróciłem. Przygotowałem cały mój edytor, aby używał końcówek linii Unix i wszystko działało zgodnie z oczekiwaniami. –

12

To nie ma ochoty absolutnej „git sposób”, aby zrobić to w ten ponieważ git kocha wiersza polecenia, ale oto co mam zrobić:

Git pakiecie z git gui - można go uruchomić, uruchamiając tylko to polecenie. Tam możesz wybrać plik niezaszyfrowany, zaznaczyć linie, które chcesz zatwierdzić, i kliknąć "etapy linii do zatwierdzenia". Jeśli chcesz, aby zachowywał się bardziej jak narzędzie wiersza poleceń, możesz uruchomić git gui citool, co spowoduje, że ui zamknie się po zatwierdzeniu.

Partial staging with git gui

Zauważ, że to narzędzie jest właściwie zintegrowany z git. Nie musisz robić tego w tym ui. Możesz po prostu rozmieścić odpowiednie linie, zamknąć je, może zrobić jeszcze więcej git add, a następnie zatwierdzić za pomocą wiersza poleceń.

Generalnie uwielbiam interfejs linii komend git i choć niekoniecznie jestem fanem powłoki, po pewnym czasie go pokochałem. Próbowałem wielu GUI i wyrzuciłem je wszystkie, ponieważ nie mogą konkurować z interfejsem wiersza poleceń git. Ale dla git add -p zdecydowanie powiedziałbym, że jest to zadanie dla GUI. Wykonanie częściowych zatwierdzeń jest po prostu łatwiejsze dzięki git gui. To samo dotyczy złożonego przeglądania historii. gitk (również wysyłane z git) ma o wiele lepszą pracę niż git log --graph -p (tak długo, jak naprawdę trzeba zrozumieć drzewo i nie całkiem teraz o stanie historii).

Uwaga: Ale nadal wydaje się, że robisz wszystko dobrze - próbowałem tego, co zrobiłeś i musisz zgodzić się z Benem Jacksonem. To zdecydowanie powinno zadziałać. Twój redaktor musi coś spieprzyć.

Ostatnia uwaga: Wydaje się, że używasz wiersza poleceń git ze standardowym terminalem Windows cmd. Zdecydowanie zalecamy przełączenie na mintty. Pobierz wersję msys, umieść ją w katalogu Program Files\Git\bin i uruchom (stwórz skrót) za pomocą mintty -. To dostarczy ci tę samą powłokę, ale z lepszym wszystkim (szczególnie lepsza zmiana rozmiaru i kopiowanie).

+0

'git add -p' jest tradycyjnym sposobem Git. Zawsze go używałem i nigdy nie miałem żadnych problemów. Może to być po prostu edytor, który nie wydaje poprawnych zakończeń linii, których oczekuje git. Przy okazji używania 'git gui' w Windows powinieneś używać cygwin lub msys. – Tuxdude

+0

Wiem, że 'git add -p' działa i powinno działać dla tego, co OP próbuje osiągnąć. Chodzi mi o to, że łatwiej jest przesuwać części pliku, gdy można odpowiednio przewijać i układać pojedyncze linie bez konieczności przełączania się do edytora. A jeśli używasz git w Windowsie, to zawsze z cygwinem lub msys - git nie może działać natywnie w oknach ze względu na swoje skrypty powłoki. – Chronial

+0

Dziękujemy za szczegółowy komentarz. Próbowałem też git gui, ale pojawił się ten sam błąd. Koniec linii był kluczem do rozwiązania, jak Ben Jackson i wskazałeś. Teraz również git gui działa zgodnie z oczekiwaniami. –

Powiązane problemy