Magit, iri parçayı iki parçasına ayırdı


34

SO'da magun kullanarak hunkları bölmekle ilgili bir soru var ve verilen iki çözüm ya bölgeyi aşamalandırmak (bir bölgeyi işaretlemek, isabet aşamasını) veya +& ile tüm parçalarını küçültmek / büyütmek -. Peşinde olduğum şey bu değil.

Magit'in durum arabelleğinde, bir iri parçayı, işte iki noktaya, noktada ya da en azından noktanın çevresindeki çizgilere bölmek istiyorum.

Bunu çevirmek (özür dilerim, kötü biçimlendirme formatımdan dolayı)

@@ blah blah blah
- foo
+ bar
+ baz
+

içine

@@ blah blah
- foo
+ bar

@ blah blah
+ baz

Nokta açıkken.

Motivasyonları:

  • bazBen taahhüt onu kapatmak istiyorum, böylece bir hata ayıklama ifadesi olmanın foo& barBundan kurtulmak almadan.

  • barve bazyalnızca kısmen ilişkili olmak, değişikliklerinin aynı taahhütte olmaması gerektiği anlamına gelir.

  • bariridir ve iridir baz, iri bölmeyi seçmektense bölmeyi çok daha kolaydırbar

  • Son noktaya benzer şekilde, 20 satırlık bir işlemin, sahnelememesi gereken tek bir satır içerdiğini söyleyin. Ortayı görmezden gelen üst ve alt iki parçayı bölmek ve yerleştirmek, bölgeyi kullanmaktan daha kolay olacaktır.

  • Yukarıdakiler bazen farklı sunumun değiştirilmiş bir şeyden önce ve sonra ayrılacağı ve ortada yararsız bir şey olduğu zaman ortaya çıkabilir. Örneğin

@@ line
- old_foo
+ random stuff
+ new foo

Magit'te bunu yapabilecek hiçbir şey yok. Bundan da öte: Magit tasarımı, büyük olasılıkla magit statüsünün yeniden tasarımı olmadan kodlanmasını imkansız hale getirir.
Rémi

4
Teşekkürler, mantıklı. Maalesef, düşünebildiğim en iyi nokta, noktadan ileriye ya da geriye doğru ve ardından evreleme seçiminde bazı otomasyonlar olabilir. Ayrıca (daha önce özelliği kullanmayanlar için) bölgeyi hem sahne hem de belirsizlik için kullanabileceğinizi de unutmayın. Mesela, büyük bir hunk oluşturabilir, daha sonra kademeli bölüme geçebilir ve ortada bir çizgi tutabilirsiniz. Ancak @ MrBones ile ayrık bir aksam seçeneğinin seçim ile uğraşmaktan daha kolay olacağı konusunda anlaştım.
glucas,

İlginç, 2 farklı bitişik olmayan bölgeleri seçerek. +1
Nsukami

1
Şahsen ben tüm öbek sahne ve daha sonra hata ayıklama ifadesini sabit. (Önceden
işlenmiş kancam, sahtekarlık

1
Magit hakkında yardım edecek kadar bilgim yok, ancak Emacs'in diff modunun bunu yapan bir komutu diff-split-hunkolduğunu belirtmek istiyorum. IOW isteğiniz diff-split-hunkmagit-status tamponundan kullanmanın (ya da eşdeğer bir şeyin) bir yoludur .
Stefan

Yanıtlar:


17

Yukarıdaki açıklamalarda belirtildiği gibi, Magit, bir parçayı kullanarak mümkün olanın ötesinde birden fazla parçasına bölmeyi desteklememektedir git diff -U<n>. Çünkü Magit, farkları yaratmak için bu Git komutuna güveniyor. Bu değişmeyecek, Magit her zaman Git'ten olduğu gibi aldığı farkı kullanacak.

. (Aslında Magit insanlara gerçekten alakalı olmayan bazı başlıkları şerit, ama değişiklikleri uygularken onları geri yapar Ama ayrıca olandan bölme iri parça -U<n>destekleyen tamamen farklı bir hikaye, bir tavşan deliğinden aşağı yol açacak - Bir sebebi var Git "daha küçük parçalara" izin vermez, bunları uygulayamazdı).

Magit burada istendiği gibi daha küçük parçaların gösterilmesini desteklemese de, bir parçanın sadece parçalarının uygulanmasını destekler. Bölge evreleme sırasında aktif olduğunda, işte yalnızca o kısmı uygulanır.

Bu, basamaklandırılmaması gereken parça, tam olarak yazılması gereken metnin tam ortasında olduğunda çok yardımcı olmaz. Diğerlerinin önerdiği gibi, bu durumda yapmanız gereken şey tüm parçayı yerleştirmek ve ardından ikinci bir adımda taahhüt etmek istemediğiniz çizgiyi sabitlemektir.

Bu elbette otomatik olabilir. Bunun otomatikleştirilebileceğini görebilmemin tek yolu , bölge dışındaki mevcut aksama "sahne atmak." Ve bu yüzden şu anda bunu uygulamaya niyetli değilim.


47

Magun ile topakları bölebilirsiniz.

İmleci bir parça içinde bırakmak yerine, aşamadan geçmek istediğiniz çizgileri seçin ve s düğmesine basın . İğnenin sadece seçilen kısmı sahnelenir, iri kısmın kalan kısmı ise hala korunmasız alanda oturur.

Böylece onu ikiye böldün. Sanırım, hunk parçalarını saklamak için aynı mekanizmayı kullanabilirsin. Kullanırken k sadece iri parça bir kısmını tasfiye edecektir.


3
IMO, talebi karşıladığı için bu kabul edilen cevap olmalıdır (ve bunu nasıl yapacağımı hatırlamaya çalışırken birkaç kez bu cevabı buldum).
chaseadamsio

2
Evet bu cevap olarak kabul edilmelidir!
copyninja

3

Bir iri parçanın parçalarını silmek istiyorsanız, iterek çıkarmak istediğiniz çizgileri seçin ve x düğmesine basın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.