: Gcommit은 다음 경우에만 작동합니다.git는 기호 링크입니다
묘사
저는~/foo/
에 환매 협의가 있습니다.그것의 .git
디렉터리는 ~/bar
을 가리키는 기호 링크입니다.나는 내가 성공적으로 한 번
:Gcommit
제출할 때까지 환매 협의에서 탈주범을 사용할 수 있다.이 경우 Survious를 사용하여 커밋을 추가로 시도하는 경우(실행:Gcommit
, 메시지 생성 및:wq
커밋 메시지 버퍼 호출에 실패하고 다음 오류가 발생합니다."~/bar/COMMIT_EDITMSG" 9L, 271C written
Error detected while processing function <SNR>34_FinishCommit..<SNR>34_Commit:
line 7:
E344: Can't find directory "`=s:repo().tree()`" in cdpath
E472: Command failed
Error detected while processing function <SNR>34_FinishCommit:
line 4:
E171: Missing :endif
나는 Vim을 다시 시작하고 도주범에서 다른 제출을 받을 수 있지만, 대량으로 제출할 때, 이것은 단조롭고 무미건조해진다.하지만 다음과 같은 방법이 유효합니다.
1. Vim을 엽니다.
2. 일부 파일을 편집합니다.
3.
:Gwrite
를 사용하여 편집을 색인에 밀어넣습니다.4. Vim 외부 셸에서
git commit
로 커밋합니다.5. 필요에 따라 2-4단계를 반복합니다.
6. 일회성 탈주범을 범한다.
탈주범 이외의 범죄는 탈주범의 범죄 행위를 파괴할 수 없다는 얘기다.
만약 내가 너를 도와 이 문제를 해결할 수 있다면 나에게 알려줘.만약 네가 나에게 보아야 할 대체적인 구역을 알려준다면, 나는 사방을 둘러보고 도대체 무슨 일이 일어났는지 볼 수 있다.
토론 #1
네, 다음은 첫 번째 관문에서 발생한 일입니다.1.
chdir
저장소 루트 디렉토리에 넣기2. 다양한 설정
3. 기호 링크 경로(
/tmp/foo/.git/COMMIT_EDITMSG
를 사용하여 편집한 제출 메시지4. 탈주범이 autocmd에서 온
b:git_dir
(/tmp/foo/.git
를 정확하게 검출하고 설정)5.
chdir
원본 디렉터리로 돌아가 Vim이 버퍼의 경로를 변경하여 기호 링크의 목적지를 반영한다(/tmp/foo.git/COMMIT_EDITMSG
)첫 번째 과정에서 이것은 무해하지만 두 번째 과정에서Vim은 같은 버퍼를 다시 사용했고
b:git_dir
설정이 정확하지 않았다.뚜렷한 해결 방법은 제출 메시지를 편집하기 전에 현재 작업 디렉터리를 복원하는 것이다.에이, 이것은 이 문제를 해결할 수 없습니다. 왜냐하면 메시지를 제출하는 절차의 순서
:wq
가 같기 때문입니다.정말, 우리가 완전히 피할 수 있다면
cd
좋겠다.Git는 --work-tree
이 점을 실현할 수 있을 것 같지만, 내가 지난번에 시도했을 때 (몇 년 전), 그것은 내가 더 이상 기억하지 못하는 방식이 부족했다.그것이 여기에 작용한 것 같아서, 나는 :Gcommit
사용하기 위한 시험 프로그램을 만들고 있다.--work-tree
에서 토론 #2
의 문제가 발견되었습니다. 리포의 하위 디렉터리에 있으면 현재 작업 디렉터리를 변경하지 않습니다.지금 회복 중입니다.실제로 나는 이러한 행위로 전환할 것을 고려했다. (저장소 루트에 대한 경로와 같지만, 하위 디렉터리에 있을 때 제외하면, 이 경우 경로는 이 하위 디렉터리에 비해 유지될 것이다.) 그러나 이것은 전체 플러그인에서 수정해야 하는 행위이지 특수한 상황이 아니다.
--work-tree
:Gcommit
나는 이 제출을 재구매 협의로 다시 적용할 것이다. 왜냐하면 나는 하위 디렉터리에 있지 않기 때문에 제출한 후에 Vim을 다시 시작할 필요가 없기 때문에 매우 좋다.내 포크를 거들떠보지 마라.토론 #셋
응, 여전히 작동하지 않는 것 같아.\토론 #4
메시지를 제출하는 경로에 기호 링크를 표시할까요, 아니면 해결할까요?토론 #5
결의:그게 문제야.나를 위해서
토론 #6
로 제출하는 것이 아니다.전체토론 #7
에서 디버깅 문장을 잃어버려서 언제 발생하는지 확인할 수 있습니다.우선 editing the commit message 이후에 즉시 해결되었는지 검사한다.--work-tree
좀 곤혹스러워요.On the first pass, this is harmless, but on the second pass, Vim reuses that same buffer, and b:git_dir is set incorrectly
왜 같은 버퍼를 반복해서 사용합니까?제출에 성공한 후 직접
:Gcommit
캐시 토론 #8
를 사용할 수 없습니까?해볼 수 있을 것 같아서요.증상에 대한 타격이지 원인에 대한 타격이 아니다.또한 내가 이렇게 하는 것은:bwipeout
버퍼링 구역을 이용하여 다른 사람들의 이상한 문제를 해결하기 위해서이다. 이것은 각양각색의 비직관적인 부작용이 있기 때문에 나는 감히 그것을 사용할 수 없다.여기까지 말하자면, 나는 감히 내기를 걸겠다. COMMIT_EDITMSG
너에게는 모두 엉망진창이다.토론 #9
아니, 사실:Gstatus
은 여러 번 완벽하게 일할 수 있을 것 같아. :Gstatus
운행 후에도...토론 #10
에 임시 저장 파일이 포함되어 있습니까?:Gstatus
로 열어볼까?:Gcommit
쌍방이 모두 동의한다.2008년 3월에 짐 보프는 다음과 같이 썼다.
Does that include staging files with
-
? And opening them with<CR>
?
Reply to this email directly or view it on GitHub: https://github.com/tpope/vim-fugitive/issues/155#issuecomment-4395290
스티브 로시
토론 #11
가 어깨를 으쓱거렸다.그래, 최신 것이 너에게 유용하다면, 나는 이것을 계속 닫을 수 있을 것 같아.-
네, 좋아요!2012년 3월 9일 오전 8시 30분, 팀[email protected]쓰기:
shrug. Well I guess if the latest works for you I can go ahead and close this.
Reply to this email directly or view it on GitHub: https://github.com/tpope/vim-fugitive/issues/155#issuecomment-4416276
<CR>
나는 이 문제를 원천적으로 해결하는 데 큰 발걸음을 내디뎠다.새 하위 모듈 디렉터리 구조가 필요하기 때문에 토론 #12
파일에 대한 지원을 실현했습니다.이 수수께끼의 유일한 부족한 부분은
토론 #13
가 사실상 기호 링크인지 아닌지를 어떻게 판단하는가이다.대조토론 #14
원본 디렉터리를 검사하는 것은 논리에 맞는 선택인 것 같지만, 부모 디렉터리가 기호 링크라면 가양성으로 되돌아옵니다.무슨 생각 있어요?P.S.는
토론 #15
에서 문제가 발생할 것으로 예상됩니다.사실증명.git
이 여전히 거기에 설치되어 있었고, 후에 나는 핵무기로 그것을 폭파했다.답은.git
입니다.나는 이미 그것을 실현했고symlinkedresolve()
는 완전히 해결된 문제라고 생각한다.설정해야 합니다
:Gstatus
.
Reference
이 문제에 관하여(: Gcommit은 다음 경우에만 작동합니다.git는 기호 링크입니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/tpope/vim-fugitive/issues/155텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)