Git: Seçilen bir bölgeyi doğrudan dosya arabelleğinden yerleştirmek mümkün mü?


14

Magit ile magit durum arabelleğini açabilir, farkı TABgenişletmek (veya RETayrı bir fark tamponu getirmek) için basabilir, bir iri parçanın parçalarını işaretleyebilir ve bölgeyi sahneye koymak / çıkarmak için sveya düğmesine basabilirsiniz u. Gerçekten hoş.

Aşağıdakilerin mümkün olup olmadığını bilmek istiyorum:

  • bir dosyayı düzenle
  • dosya tamponunun içinde bir bölge, iri parça veya birkaç parça seçin
  • seçilen bölgeyi veya iri parça etrafındaki yeri kademeli / sabitsiz

İri parçalara karşı bölge hakkında biraz karışık görünüyorsunuz. Magit'in ne yaptığının ve sorularınızın açıklamasını düzenledim. Ne sormak istediğini doğru tahmin edemeyebilirdim.
tarsius

@tarsius Belki kafam karıştı, benim için tamponun içinde yeni seçtiğim bir bölge ve iri bölüm sahnelemeye hazır olan bölge. Yanlış mıyım?
Nsukami _

2
"Bölge" bir Emacs terimidir, nokta ile işaret arasındaki bir şeydir, yani "seçim". "Hunk" bir Git terimidir, örneğin "@@ -1,1 +1,1" ile başlar ve yeni bir iri parça başlayan bir sonraki başlıktan hemen önce sona erer. Magit, geçerli bölümü (iri parça olan bir bölüm olabilir) Emacs genel olarak bölgeyi vurgular, böylece karışıklığınıza katkıda bulunmuş olabilir.
tarsius

1
Magit durumunda veya sadece farklı bir arabellekte, geçerli iri parçayı nerede olursanız olun, yalnızca düğmesine basarak kademelendirebilirsiniz s. Ama aynı zamanda, bir kısmını işaretleyerek (bunu bir dosya ziyaret arabelleğinde yaptığınız gibi) iri parçaların sadece bir kısmını sahneleyebilir ve daha sonra sahneleyebilirsiniz.
tarsius

@tarsius tam olarak ne demek istediğim, ingilizcem yeterince keskin değil.
Nsukami _

Yanıtlar:


11

Hayır, Magit bunu desteklemiyor. Gelecekteki sürümleri olabilir. Git-Gutter şimdi destekliyor. Komut adlandırılır git-gutter:stage-hunk.


Bu bir iri parça sahnelemekle birlikte, bir bölgeyi sahnelememektedir.
ocodo

Bir iri parça sahnelemek, sonra bir sonraki iri parçaya, sahneye atlamak ve tekrarlamak için bir bağ oluşturmak en iyisidir. Ayrıca, tüm bir arabelleği sahnelemenin bir yolu da vardır, ancak bu noktada komut satırından da yapıyor olabilirsiniz. Git-gutter + magit ile blok seviyesinde taahhütte bulunmanın en iyisi olduğunu düşünüyorum. Git-gutter için daha büyük değişiklikler uygun değildir.
Droogans

1

Daha önce de belirtildiği gibi git-gutter , git bilgisini doğrudan dosyanızda göstermek ve oradan çalışmak için tasarlanmış bir uzantıdır, magit ise diffs üzerinde çalışmaya odaklanır.

Bu özellik yakında gutter için yakında planlanmadı ( https://github.com/syohex/emacs-git-gutter/issues/91 )

Ancak, emacs lisp'in silinmede çok iyi olması gereken bir şeydir (bir bölgedeki iri parçalardan geçin ve bir zamanlar sahneye çıkarın). Bunu kendim denemek neredeyse böyleydi, tek sorun git-gutter bir iri parça sahneledikten sonra bir arka plan sürecini başlattı ve bitmesini beklemiyordu, bu yüzden bununla başa çıkmak için biraz hileli bir sihir eklemek zorunda kaldım.

Aşağıdaki emacs lisp işlevi istediğinizi yapmalıdır. Bazı tuşlara bağlamak isteyebilirsiniz.

(defun my-git-stage-region ()
  (interactive)
  (let ((git-gutter:ask-p nil)
        (start (region-beginning))
        (end (region-end)))
    (save-excursion
      (goto-char start)
      (git-gutter:next-hunk 1)
      (while (< (point) end)
        (git-gutter:stage-hunk)
        ;; This is a hack to wait for git-gutter to finish
        ;; updating information (git-gutter kicks
        ;; of a process to update the diff information
        ;; and does not block)
        (while (get-buffer (git-gutter:diff-process-buffer (git-gutter:base-file)))
          (sit-for 0.05))
        (git-gutter:next-hunk 1)))))

NOT: Bu iri parçalara bölünemez, iri parçaların tamamen sahnelendiği veya hiç sahnelenmediği anlamına gelir. Ancak git-gutter nispeten küçük iri parçalara sahip olma eğilimindedir, bu yüzden bu özelliği uyguladım.
Att Righ
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.