기능 요구 사항: 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는 이와 관련된 모든 문제를 해결합니다.Reference
이 문제에 관하여(기능 요구 사항: Gdiff는 Gstatus와 같습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/tpope/vim-fugitive/issues/425텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)