힘내 : 파일 버퍼에서 선택한 영역을 직접 스테이징 할 수 있습니까?


14

Magit 사용하면 magit 상태 버퍼를 눌러 열 수 있습니다 TAB은 diff를 확장 (또는 RET별도의 DIFF 버퍼를 불러옵니다), 큰 덩어리와 언론의 마크 부품 s또는 u단계로 / unstage 지역을. 정말 좋아요

가능한지 알고 싶습니다.

  • 파일을 편집하다
  • 파일 버퍼 내에서 영역, 덩어리 또는 여러 덩어리를 선택하십시오.
  • 선택한 영역 또는 덩어리 주변을 스테이지 / 언 스테이지

덩크 대 지역에 대해 약간 혼란스러워하는 것 같습니다. magit이하는 일과 질문에 대한 설명을 편집했습니다. 그래도 당신이 물어보고 싶은 것을 정확하게 추측하지 못했을 수도 있습니다.
tarsius

@tarsius 어쩌면 내가 혼란 스러울 수도 있습니다. 저는 버퍼 내에서 방금 선택한 영역이고 덩어리는 준비가 된 선택된 영역입니다. 내가 잘못?
Nsukami _

2
"지역"은 이맥스 용어로, 포인트와 마크 사이에있는 "선택"입니다. "청크"는 Git 용어로, 예를 들어 "@ -1,1 +1,1"로 시작하고 다음 번 호 직전에 끝나서 새로운 덩어리를 시작합니다. Magit은 Emacs가 일반적으로 해당 지역을 강조 표시하는 것과 같은 방식으로 현재 섹션 (행크 섹션 일 수 있음)을 강조 표시하므로 혼동에 기여했을 수 있습니다.
tarsius

1
Magit 상태 또는 diff-only 버퍼에서을 누르기 만하면 덩크 내부의 위치에 관계없이 현재 덩크를 스테이징 할 수 있습니다 s. 그러나 파일 방문 버퍼에서와 같은 방식으로 부분을 표시하여 덩어리의 일부만 준비한 다음 단계를 수행 할 수도 있습니다.
tarsius

@tarsius 정확히 무슨 뜻인지, 내 영어는 충분하지 않습니다.
Nsukami _

답변:


11

아니요, Magit은이를 지원하지 않습니다. 그래도 향후 버전은 가능합니다. Git-Gutter 는 현재이를 지원합니다. 명령 이름은 git-gutter:stage-hunk입니다.


이것은 덩어리를 준비하지만 영역을 준비하지는 않습니다.
ocodo

덩어리를 스테이징하기 위해 바인딩을 작성하고 다음 덩어리를 스테핑하고 반복하기 위해 바인딩을 작성하는 것이 가장 좋습니다. 전체 버퍼를 스테이징하는 방법도 있지만이 시점에서 명령 행에서 버퍼를 수행 할 수도 있습니다. git-gutter + magit을 사용하여 블록 수준에서 커밋하는 것이 가장 좋습니다. 더 큰 변경은 git-gutter에 적합하지 않습니다.
Droogans

1

앞에서 언급했듯이 git-gutter 는 파일에 직접 git 정보를 표시하고 거기에서 작동하도록 설계된 확장 프로그램으로, magit는 diff에서 작동하는 데 중점을 둡니다.

이 기능은 곧 git gutter 용으로 계획되지 않았습니다 ( https://github.com/syohex/emacs-git-gutter/issues/91 )

그러나 이맥스 리스프는 닦아내는 데 매우 능숙해야합니다 (지역의 덩어리를 통과하여 시간을 내야합니다). 이것을 직접 시도하는 것은 거의 그렇습니다. 유일한 문제는 덩어리를 준비한 후 git-gutter가 백그라운드 프로세스를 시작하고 완료되기를 기다리지 않는 것이므로이 문제를 해결하기 위해 약간의 해킹 마법을 추가해야했습니다.

다음 emacs lisp 기능은 원하는 작업을 수행해야합니다. 일부 키에 바인딩 할 수 있습니다.

(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)))))

참고 : 이것은 덩어리를 분할 할 수 없으며, 덩어리는 완전히 준비되었거나 전혀 준비되지 않았습니다. 그러나 git-gutter는 상대적으로 작은 덩어리를 갖는 경향이 있으므로 정확하게이 기능을 구현 한 것입니다.
Att Righ December
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.