기능 요구 사항: Gdiff는 Gstatus와 같습니다.

4277 단어 vim-fugitive

묘사

Gdiff를 발표할 수 있다면 정말 좋겠다.그러면 창 맨 위에 있는 Gstatus와 같은 두 개의 제출 간의 다른 파일 목록이 생성됩니다.Gstatus와 마찬가지로 특정 행에서 D를 누르면 파일 버전의 차이가 열립니다.

토론 #1

좋은 생각이에요!

토론 #2

:Gdiff는 현재 파일의 차이를 표시하는 명령입니다.당신이 제기한 관점은 기존의 :Gstatus보다 어떤 우세가 있습니까?

토론 #셋

이것은 #132

토론 #4

와 관련이 있을 수 있으므로 Gstatus를 사용하면 작업 트리, 로케이션 및 헤드 간의 차이를 확인할 수 있습니다.Gstatus를 사용하여 변경된 파일의 스타일을 보여 줍니다. 두 개의 제출 사이의 변경 사항을 볼 수 있고 차이점을 빠르게 볼 수 있습니다.
#132는 Gstatus가 시작되면 창 사이를 쉽게 이동하는 것을 의미합니다.나는 사실 문제가 없다. 나는 ^w^w를 사용하여 Gstatus 창으로 이동한 다음 jD를 사용해서 다음 차이를 열었다. 나는 그가 [g] 키를 누르면 다음 파일 차이로 돌아가기를 원하고, Gstatus 창으로 돌아갈 필요가 없다고 생각한다.

토론 #5

나는 방금 나의 댓글이 좀 혼란스럽다는 것을 깨달았다. 이 동작을 시작하는 명령은 아마도
: Gdiff commit 제출
그 중에서'commit'은 산열, 태그, 또는 정상적인git 식별자

토론 #6

이기 때문에 git diff --name-only <ref1> <ref2> 생성된 파일 목록이 필요합니다.파일 목록은 버퍼에 있습니다. 키 (D) 를 누르면 <ref1><ref2> 에서 파일 버전의 차이를 볼 수 있습니다.

토론 #7

네, 정확히 말하면 저는 코드 심사를 자주 하는데 이것은 보충할 수 없는 보충이 될 것입니다.

토론 #8

나는 이것이 매우 좋은 특성이 될 것이라고 동의한다. 비록 실현이 중요하지 않지만 TPOP은 그것이 매우 특수한 상황이고 포함할 가치가 없다고 생각할 수 있다.
특히 내가 지금 하고 있는 일은 :Gedit HEAD~1 또는 :Gedit <hash>로 제출을 여는 것이다.이것은 제출 메시지와 내연의 변경 사항을 보여 줍니다.이것은 변경 전후 파일 상태를 가리키는 링크를 제공합니다.
만약 내가 일련의 제출에 대해 코드 심사를 해야 한다면, 나는vimrc에서 이 함수를 사용할 것이다.
function! g:ViewCommits(num_commits)
    let commit=0
    while commit < a:num_commits
        execute "Gedit HEAD~".commit
        topleft vsplit
        let commit += 1
    endwhile
    quit
endfunction
만약 내가 이렇게 한다면 :call g:ViewCommits(6) 마지막 6번의 제출은 vsplits에서 열릴 것이다.

토론 #9

재미있어요. 당신의 건의를 해 봐야겠어요.
당신의 고려에 감사드립니다. Gstatus의 작업 방식에 따라 그것을 작성할 수 있는지 빠른 평가를 했습니다. 그러나 저는vimscript의 경험이 없기 때문에 그리 멀리 가지 못했습니다.
나는 이러한 유형의 기능이 많은git 전단을 포함하기 때문에 (나는 그것이 Ortoisegit에 있다는 것을 안다) 사람들이 생각하는 것보다 더욱 광범위하게 사용될 수 있다고 생각한다.어쨌든 언젠가는 내가 방법을 생각해 낼 수 있을지도 모른다.

토론 #10

나는 이것이 #132 우산에 속한다고 확실히 생각한다.

토론 #11

FWIW가 만약 도주범이 이 기능을 가지고 있다면 나도 좋아할 것이다.
Visual StudioGit 플러그인은 기본적으로 이 점을 해냈는데, 나는 그것이 패치를 검사하는 코드에 매우 유용하다는 것을 발견했다.나는 tortise git 고객도 비슷한 일을 할 것이라고 믿는다.

토론 #12

+1 나는 매일 그것을 같은 용례로 사용한다. 코드 심사

토론 #13

+1

토론 #14

이다. 나도 이것이 그립다.주로 분기 간에 구분됩니다(일반적으로 주 분기를 밀어넣거나 결합하기 전).
나는 나의 요구를 충족시키기 위해 코드를 조금 썼다.이것은'git diff$branchname --name status' 결과가 있는 미리 보기 창을 불러오고 커서가 gd 에 있는 파일의 지점 사이에서 Gdiff를 실행합니다.이것은 상당히 기본적인 코드이지만, 아마도 다른 사람들이 그것을 사용할 것이다.GDiffBranch master 또는 원하는 지점이나 제출로 호출하기
function! Get_git_root()
    if exists('*fugitive#repo')
    try
        return fugitive#repo().tree()
    catch
    endtry
    endif
    let root = split(system('git rev-parse --show-toplevel'), '\n')[0]
    return v:shell_error ? '' : root
endfunction
function! DiffFile()
    let winheight = winheight(winnr())
    let branchname=b:branchName
    let filename = substitute(getline('.'), '^\w*\s*\(.*\)', '\1', '')
    let gitroot = b:gitroot
    only
    wincmd s
    execute 'resize '.winheight
    wincmd j
    execute 'cd '.gitroot
    execute 'edit '.filename
    execute 'Gdiff '.branchname
endfunction
function! GDiffBranch(branchName)
    let gitroot = Get_git_root()
    let tmpfile = tempname()
    execute 'pedit '.tmpfile
    wincmd P
    let b:branchName=a:branchName
    let b:gitroot = gitroot
    nmap <buffer> q :q<cr>
    execute 'silent read! git diff --name-status '.a:branchName
    normal! ggdd
    resize 12
    setlocal nomodifiable
    nmap <buffer> gd :call DiffFile()<cr>
endfunction
command! -nargs=1 GDiffBranch call GDiffBranch(<q-args>)

토론 #15

+1

토론 #16

예, #132는 이와 관련된 모든 문제를 해결합니다.

좋은 웹페이지 즐겨찾기