: Gcommit은 다음 경우에만 작동합니다.git는 기호 링크입니다

5079 단어 vim-fugitive

묘사

저는 ~/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.

좋은 웹페이지 즐겨찾기