Na SO jest pytanie o dzielenie kawałków za pomocą magitów, a dwa podane rozwiązania to albo wyodrębnienie regionu (oznaczenie regionu, etap trafienia), albo zmniejszenie / powiększenie wszystkich kawałków za pomocą +
& -
. Nie o to mi chodzi.
W buforze stanu magita chcę podzielić przystojniak na dwa przystojniaki, w punkcie lub przynajmniej w liniach wokół punktu.
Włączam to (przepraszam za złe formatowanie diff)
@@ blah blah blah
- foo
+ bar
+ baz
+
W
@@ blah blah
- foo
+ bar
@ blah blah
+ baz
Gdy punkt znajduje się na pasku.
Motywacje:
baz
będąc instrukcją debugowania, więc chciałbym usunąć ją z zatwierdzeniafoo
ibar
bez pozbycia się go.bar
ibaz
są tylko częściowo powiązane, co oznacza, że ich zmiany nie powinny być w tym samym zatwierdzeniu.bar
jest duży ibaz
jest mały, dzięki czemu łatwiej jest podzielić przystojniak niż wybraćbar
Podobnie jak w ostatnim punkcie, powiedzmy, że zatwierdzenie 20 linii zawiera pojedynczą linię pośrodku, której nie należy ustawiać. Łatwiej byłoby podzielić i wystawić górną i dolną część dwóch przystojniaków, ignorując środkową, niż skorzystać z regionu.
Powyższe może pojawić się czasami, gdy prezentacja różnicowa oddzieli przed i po czymś, co zostało zmodyfikowane, i będzie miała coś nieprzydatnego w środku. na przykład
@@ line
- old_foo
+ random stuff
+ new foo
diff-split-hunk
które właśnie to robi. IOW twoja prośba dotyczy sposobu użyciadiff-split-hunk
(lub czegoś równoważnego) z bufora statusu magit.Odpowiedzi:
Jak wspomniano w komentarzach powyżej, Magit nie obsługuje dzielenia przystojniaka na wiele porcji poza to, co jest możliwe przy użyciu
git diff -U<n>
. To dlatego, że Magit polega na tym poleceniu Git do tworzenia różnic. To się nie zmieni, Magit zawsze będzie używać różnic, jakie dostaje od Gita w obecnej postaci.(W rzeczywistości Magit usuwa niektóre nagłówki, które nie są tak naprawdę istotne dla ludzi, ale przywraca je podczas wprowadzania zmian. Ale dzielenie kawałka dalej niż to, co
-U<n>
obsługuje, to zupełnie inna historia, prowadziłoby to do króliczej nory - jest powód, dla którego Git nie dopuszcza „mniejszych kawałków”, nie byłoby w stanie ich zastosować).Chociaż Magit nie obsługuje wyświetlania mniejszych kawałków, tak jak tu proszono, obsługuje tylko części fragmentu. Gdy region jest aktywny podczas przemieszczania, stosowana jest tylko ta część przystawki.
To niewiele pomaga, gdy część, która nie powinna być zainscenizowana, znajduje się w samym środku tekstu, który powinien być zainscenizowany. Jak sugerują inni, w tym przypadku powinieneś zrobić scenę całego przystojniaka, a następnie odsłonić linię, której nie chcesz zatwierdzać w drugim kroku.
Można to oczywiście zautomatyzować. Jedyny sposób, w jaki mogę to zautomatyzować, to „wystawienie obecnego przystojniaka z wyjątkiem regionu. Mam jednak wątpliwości co do tego, jak często byłoby to przydatne, i obawiam się, że nie będzie łatwo wdrożyć go tak skutecznie I dlatego obecnie nie zamierzam tego wdrażać.
źródło
Możesz podzielić porcje za pomocą Magita.
Zamiast pozostawiać kursor wewnątrz przystojniaka, wybierz linie, które chcesz zejść z przystani, i naciśnij s . Wystawiona zostanie tylko wybrana część przystawki, podczas gdy reszta przystawki nadal będzie znajdować się w obszarze niestabilnym.
W ten sposób podzieliłeś go na dwie części. Myślę, że możesz użyć tego samego mechanizmu do przenoszenia części kawałków mięsa do skrytki. Podczas używania k po prostu wyczyścisz część przystojniaka.
źródło
Jeśli chcesz odrzucić części przystojniaka, wybierz linie w przystani, które chcesz odrzucić, i naciśnij x .
źródło