세그먼트 변경은 Cygwin git 및 shellslash on에는 적용되지 않습니다.

6959 단어 vim-fugitive

묘사

:Gwrite 모드에서 dp 또는 :Gdiff을 사용하여 Cygwin git를 사용할 때 작동하지 않으며 shellslash Vim 옵션을 설정합니다. 오류가 발생하지 않았지만 실제 임시 변경 사항은 없습니다.다음 상황에서는 아무것도 하지 않은 것 같다.전자에서 경로가 c:/foo/bar/repo.git/real/file인 전체 새 파일은 임시 저장되고 실제 파일은 real/file은 임시 저장되지 않은 상태를 유지한다.shellpath을 설정하지 않으면 작동하지만 Windows에서 이 옵션을 켜는 데 익숙하기 때문에 복구할 수 있으면 같이 일해도 좋습니다. (플러그인에서 로컬/임시로 설정할 수 있습니까?)티아!

토론 #1

후자는 매우 간단하다.전자는 msysgit로 복사할 수 없습니다.cygwin Git를 설정하는 것을 싫어합니다.당신의 환매 협의는 정말'repo.git'이라고 명명되었습니까?당신의 'shell'cmd.exe입니까? 아니면 Cygwin의 bash입니까?

토론 #2

첫 번째 문제에 대한 복구에 감사 드립니다. 효과가 있는지 확인할 수 있습니다.
두 번째는 환매 협의가 이렇게 명명된 것이 아니라 단지 하나의 예일 뿐이다.비엠의 shell 옵션은 cmd입니다. 비록 제 $SHELL/usr/bin/zsh이지만 이것은 중요하지 않다고 생각합니다.
나는 파일이 색인에 쓸 때 잘못된 이름을 사용했다는 것을 내 예로 설명하려고 했다.Cygwin 셸에서 :Gwritegit diff --cached --stat을 실행한 후에 색인에 있는 파일의 이름이 c:/path/to/git/repo/realfile인 것을 보았습니다.즉, 저장소의 전체 경로를 접두어로 사용하는 것이 일반적입니다.(즉, 만약에 내가 git add을 했거나, 실제로는 매우 편리한 :Gdiffdp을 사용했다면 정말 좋았을 것이다. 이 점을 실현해 주셔서 감사합니다. 그리고 그 화면 방송을 어떻게 사용하는지 설명해 주었습니다. 일반적인 git add -p보다 훨씬 좋았습니다. 특히 Cygwin에서 후자는 매우 느렸습니다) 경로의'realfile'부분만 표시해야 합니다.그것은 도주범(또는 윌?)처럼 보인다.어떤 이유로 절대 경로를 만들지만 Windows Vim과 Cygwin 사이에서 상호작용을 하기 위해서는 상대 경로만 사용해야 한다.
이것은 당신에게 문제를 진단할 수 있습니까? 아니면 제가 다른 정보를 제공하기를 원하십니까?다시 한 번 감사합니다!

토론 #셋

나는 이것이 매우 중요하다고 생각한다.'shell'을 설치하면 :!system()의 업무 방식에 큰 영향을 주고 탈주범은 그것들을 미친 듯이 사용한다.
세 가지 요소가 작용한다.
1.cygwin git/msysgit
2. shell=cmd/shell=bash3. shellslash/noshellslash이것은 내가 반드시 지지해야 할 8가지 조합이다.나는 특히 소수 민족 플랫폼을 위해 8가지 그룹을 지원하는 데 열중하고 있다고 말할 수 없다.나는 차라리 두 가지 가장 현명한 선택을 우선적으로 고려하고 싶다.
1. Windows 모드: msysgit/shell=cmd/noshellslash2. Cygwin 모드: Cygwin git/shell=bash/shellslash몇 년 전, 나는 Windows에서 Cygw 명령을 사용했는데, 이것은 내가 지난번에 Cygw 명령을 사용할 때 겪은 번거로움이다.최선을 다하든지 bash점 'shell'에서 msysgit의 안전지대로 철수하든지.
따라서 첫 번째 단계는 셸을 bash로 설정하여 :!git과 같은 기초 지식이 정상적으로 작동할 수 있도록 확보하고'도주범'에서 유효한지 확인하는 것이다.

토론 #4

나는 네가 이 모든 다른 조합을 지지하고 싶지 않다는 것을 안다. 솔직히 말하자면, :Gwrite은 어쨌든 그렇게 중요하지 않다. 나는 뭔가를 빠뜨렸을 수도 있지만, 나는 그것이 :!git add %에 비해 어떤 우세도 있다고 생각하지 않는다.:Gdiff은 저에게 현실 생활의 변화자입니다. 따라서 이 문제를 더 연구할 가치가 없다고 생각하면 언제든지 이 문제를 닫아 주십시오.
그러나, 보고 싶을 때, 모든 Unix ish 옵션을 설정해도, :set shell=bash shellcmdglag=-c shellquote=\" 이후에는 저에게 적용되지 않습니다. 잘못된 인자로git를 실행하는 것 같아서 git help output에서 오류 메시지를 받았지만, 불행하게도 실제 실행하려는 명령이 없습니다.다시 한 번, :git add %을 하는 것이 효과적이기 때문에 다른 일을 해야 한다.나는 나중에 그것을 더 시험해 볼 수도 있지만, 어쨌든 이것은 큰 문제가 아니다.

토론 #5

에는 'shellquote''shellxescape' 등 다른 몇 가지 옵션이 있다.Vim이 시작될 때 'shellslash'이 올바르게 설정되어 있는지 확인합니다. 그러면 다른 설정이 자동으로 설정됩니다.
2년 동안 많은 변화가 생겼으니 어쨌든 너는 다시 한 번 시도해야 한다.

토론 #6

감사합니다!
나는 방금 8258025로 업데이트되었고vim탈주범의 자신의 저장소와 gvim foo에서 :Gwq을 실행하려고 시도했다.이로 인해 다음과 같은 결과가 발생합니다.
Error detected while processing function <SNR>30_Wq..<SNR>30_Write..<SNR>30_repo_translate..<SNR>30_repo_rev_parse..<SNR>30_repo_git_chomp:
line    1:
E484: Can't open file V:/tmp/VIo6B9D.tmp
V:/tmp은 나의 임시 목록이지만, 그 외에 나는 여기에 무슨 일이 일어났는지 모른다...이것은 모든 Unix 셸 옵션에 적용됩니다.만약 내가 shell=cmd을 사용한다면, shellslash을 사용하든 안 사용하든 오류 메시지를 주지 않지만, 아무 일도 일어나지 않을 것이다. (즉 파일을 추가하지 않은 것)그래서 내가 보기에 최신 버전은 불행하게도 내가 이전에 사용했던 버전(61fac2f)보다 훨씬 나쁘다. 왜냐하면 나는 더 이상 Cygwin git에서 그것을 사용할 수 없을 것 같기 때문이다.
나는 vi -u NONE -U NONE을 해 보았는데 도대체 무엇이 이 점을 촉발시켰는지 찾아내고 싶었지만,vim도주범을 어떻게 정확하게 초기화시켰는지 모르겠다.그리고 플러그인이 실행하는 명령을 우연히 볼 수 있는 방법이 있습니까?
티아!

토론 #7

창고 추적의 마지막 부분은 system()의 함수를 호출하는 것을 가리킨다.너는 :echomsg을 던져 보아라.-Nvi 호출에 추가하여 호환 모드를 비활성화하고 원본 플러그인을 사용합니다.

토론 #8

제가 이렇게 하면...
diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim
index 7979a50..c316d7b 100644
--- a/plugin/fugitive.vim
+++ b/plugin/fugitive.vim
@@ -340,6 +340,7 @@ function! s:repo_git_command(...) dict abort
 endfunction

 function! s:repo_git_chomp(...) dict abort
+  echomsg call(self.git_command,a:000,self)
   return s:sub(system(call(self.git_command,a:000,self)),'\n$','')
 endfunction

나는 git이 Cygwin이라고 불리는 '혼합' 형식의 경로로 실행되는 것을 보았다. 즉, 빗장이 달린 Windows 경로 (c:/path/to/repo/foo) 는 작동하지 않는다. (만약 내가 Cygwin 명령줄에서 실행한다면 그것도 작동하지 않는다.)-N에 대한 힌트를 주셔서 감사합니다. 그러나 제가 먼저 gvim -N -u NONE -U NONE foo을 하고 :source plugin\fugitive.vim을 하더라도 임시 파일 (한마디로 존재하지 않습니다) 에서 같은 오류를 만날 것입니다.

토론 #9

어느 길입니까?git dir?

토론 #10

P.S. procmon (Windows는 많거나 적거나strace) 을 사용하여 임시 파일이 만들어진 것을 보았습니다. 쓴 적이 없고 삭제된 것을 보았습니다. 그리고Vim이 다시 열려고 시도했지만 실패했습니다. 오류가 발생했습니다.나는 여전히 왜 이런 상황이 발생했는지 모르겠다. - (

토론 #11

What path? The git dir?

)
네, 죄송하지만 잘 모르겠어요.

토론 #12

의 결론은 다음과 같다. -u NONE을 사용하여 Cygwin 셸에서 Vim을 시작할 때 아무런 기능이 없다. 셸 옵션이 잘못된 것 같기 때문이다. shell/usr/bin/zsh(SHELL 환경 변수에서 나올 수 있음)이고 shellslash은 설정하지 않았다.임시 파일 오류를 설명해야 합니다.
내 Vim 설정(shell=cmd, shellslash 설정을 사용하지만 내용을 바꾸지 않음)을 사용할 때 오류가 없지만 작동하지 않습니다('호출'과'되돌아오기'는 system()을 호출하기 전/후에 추가된 디버그 줄입니다).
Calling: git --git-dir='w:/home/zeitlin/vimfiles/bundle/vim-fugitive/.git' rev-parse --verify foo
Returned: fatal: Needed a single revision
Calling: git --git-dir='w:/home/zeitlin/vimfiles/bundle/vim-fugitive/.git' rev-parse --verify foo
Returned: fatal: Needed a single revision
"foo" 1 line, 10 characters written
Calling: git --git-dir='w:/home/zeitlin/vimfiles/bundle/vim-fugitive/.git' add 'w:/home/zeitlin/vimfiles/bundle/vim-fugitive/foo'
마지막 명령은 아무런 작용도 하지 않고 파일을 추가하지 않습니다.

토론 #13

내가 여기서 발견한 유일한 실제 문제는 git add으로 전달되는 절대적인 경로이다. 나는 방금 그것을 복구했다.나는git 디렉터리가 문제를 일으킨 증거를 볼 수 없다. 만약 셸이 윈도 경로가 아니라 /usr/bin/zsh이라면, 네가 결정해라.

토론 #14

너무 좋아요!:Gwrite은 현재 750db5e와 함께 사용할 수 있음을 확인할 수 있습니다. shellslash을 사용하든지 말든지.감사합니다!

좋은 웹페이지 즐겨찾기