많은 사람들이 GitHub에 .vimrc를 저장하여 새 컴퓨터에서 작업하기가 더 쉬워 졌음을 알았습니다. 그러나 플러그인을 포함하는 것은 문제가 있습니다. 사용하는 플러그인은 이미 자식 리포지토리이기 때문입니다. .vimrc와 설치 될 수있는 플러그인을 모두 추적하는 저장소를 어떻게 작성합니까?
답변
리포지토리 내 리포지토리를 처리하는 방법은 git과 함께 진행중인 질문입니다. Git의 서브 모듈 은 상황을 해결하는 한 가지 방법으로, 추적하기 위해 약간의 복잡성을 추가합니다. 자식 사이트는 서브 모듈을 소개합니다 .
기본 아이디어는 저장소의 경로와 관련된 다른 자식 저장소에 대한 참조를 유지하는 것입니다. 이 참조는 .gitmodules
저장소의 루트 에있는 파일 에 저장됩니다 (git에서 관리하므로 혼자 두십시오). 하위 모듈이있는 저장소를 복제 할 때 복잡성이 발생합니다 git submodule init
. .gitmodules
파일을 명시 적 으로 작성 git submodule update
하고 하위 모듈을 복제해야합니다.
다음 은 서브 모듈을 사용하여 dotfiles 저장소에 새 vim 플러그인을 추가하는 방법에 대한 연습입니다 ( ~/.vim/
이 repo의 별칭을 가짐 .vim/
).
$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir
후 submodule add
, A는 git status
당신이 수정 된 (또는 생성) 한 것을 보여 것 .gitmodules
같은 뭔가, 파일 :
[submodule ".vim/bundle/vim-elixir"]
path = .vim/bundle/vim-elixir
url = https://github.com/elixir-lang/vim-elixir.git
또한 .vim/bundle/vim-elixir
새 파일로 표시되어야 합니다. Git은이 경로를 지금 특별하게 취급합니다. 파일 시스템의 일반 디렉토리 (vim은 정상적으로로드 함)이지만 git diff
저장소에서 특정 커밋으로 처리합니다. 해당 경로 (예 :)의 diff 또는 로그를 git log -1 -u .vim/bundle/vim-elixir
볼 때 git은 다음과 같이 한 줄 문자열로 표시합니다.
Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
플러그인의 최신 버전으로 업데이트하는 것은 서브 모듈의 저장소로 가서 새로운 커밋을 체크 아웃 한 후이를 저장소에 커밋 하는 것에 해당 합니다.
$ cd .vim/bundle/vim-elixir
$ git remote -v # note: the submodule repo's origin, not my repo's
origin https://github.com/elixir-lang/vim-elixir.git (fetch)
origin https://github.com/elixir-lang/vim-elixir.git (push)
$ git pull
# ...
$ cd - # back to my repository's root
$ git status
# ...
modified: .vim/bundle/vim-elixir (new commits)
$ git diff .vim/bundle/vim-elixir
# ...
-Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
+Subproject commit d59784e7afbd0d55c501e40c43b57cbe6f6e04c2
$ git commit -m "update vim-elixir" .vim/bundle/vim-elixir
답변
VCS에 플러그인을 저장할 필요는 없습니다. Vim 패키지 관리자를 사용할 수도 있습니다. 어제부터 vim-plug를 사용합니다 .
vimrc에서 플러그인을 다음과 같이 정의 할 수 있습니다.
call plug#begin('~/.vim/plugged')
Plug 'embear/vim-localvimrc'
Plug 'kchmck/vim-coffee-script'
" ... etc
call plug#end()
그런 다음 Vim을 다시 시작한 후 다음을 사용하여 플러그인을 설치하십시오.
:PlugInstall
또는 전화 하기 전에 FAQ 에서 vimrc 파일 로이 스 니펫을 추가 할 수 있습니다 plug#begin()
.
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall
endif
플러그인이에 배치됩니다 ~/.vim/plugged
. 이 파일을 VCS에 보관할 필요는 없습니다 . 다른 시스템에서이 vimrc를 사용하려면 :PlugInstall
해당 시스템을 호출하십시오 .
플러그인을 제거하려면 vimrc 파일에서 플러그인을 제거하고 다음을 실행하십시오.
:PlugClean
vim-plug는 Vim 스크립트 웹 사이트에서 스크립트 설치를 지원하지 않지만 해당 스크립트는 GitHub에 미러링 되므로 그렇게 할 필요가 없습니다.
더 쉬운 플러그인 업데이트 및 더 나은 성능을위한 주문형로드와 같은 추가 이점도 있습니다. 또한 vimrc 파일과 함께 배포하는 플러그인의 라이센스 조건을 위반할 위험이 없습니다.
참조 :
답변
vimrc를 github에 저장하고 플러그인을 저장소의 하위 모듈로 저장합니다.
readme.md 파일에서 리포지토리를 가져온 다음 설정 스크립트를 실행하는 하나의 라이너를 넣습니다.이 방법으로 한 줄을 편집기에 복사하여 모든 것을 설정할 수 있습니다. 그것은 단지 vim (그러나 별로는 아닙니다)보다 조금 더합니다.
https://github.com/Loki-Astari/UnixConfig
그것을 사용하려면 :
cd
git clone git@github.com:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd
추신. 어떤 조언도 할 의향이있다
참고 : 내가 가장 좋아하는 부분은 git도 설정하고 git의 diff 도구로 vim을 사용하도록 설정한다는 것입니다. Vimdiff는 최고의 diff 도구입니다.
답변
병원체를 고수하고 싶다면 Git 서브 모듈 을 사용하는 것이 좋습니다 . 서브 모듈을 추가하면 git은 다른 리포지토리에서 서브 모듈을 인식하고 그 내용을 그대로 둡니다 (변경되지 않은 경우에는 수행 할 때 추적되지 않은 내용이있는 것으로 git status
표시됨). 모든 Github 기반 플러그인이에 bundle/
있다면 하위 모듈로 추가하는 것은 좋은 쉘을 가진 상당히 간단한 작업입니다.
for f in bundle/*/
do
git submodule add $(awk '/url =/{print $3}' "$f/.git/config") "$f"
done
vimrc repo 에서 서브 모듈이 어떻게 나타나는지 살펴볼 수 있습니다 .
서브 모듈에 파일을 추가하거나 리포지토리에 영향을 미치지 않는 일부 변경을 수행해도 git status
커밋되지 않은 변경 또는 추적되지 않은 파일이있는 서브 모듈에 대해 여전히 불평합니다. 파일 ignore = dirty
의 하위 모듈 구성에 추가 하여 git이 이러한 변경 사항을 무시하도록 할 수 있습니다 .gitmodules
. 예를 들면 다음과 같습니다.
[submodule "bundle/LaTeX-Box"]
path = bundle/syntastic
url = https://github.com/scrooloose/syntastic.git
ignore = dirty
하위 모듈의 한 가지 장점은 하위 모듈의 개정판이 git 저장소에 추가되어 git init
특정 개정판을 자동으로 체크 아웃하는 것입니다. 그것을 버리고 git에게 파일에 ignore = all
구성 을 추가 하여 하위 모듈을 추가하면 무시 하도록 할 수 .gitmodules
있습니다. 예를 들면 다음과 같습니다.
[submodule "bundle/LaTeX-Box"]
path = bundle/LaTeX-Box
url = https://github.com/LaTeX-Box-Team/LaTeX-Box.git
ignore = all
마지막으로 하나의 명령으로 모두 업데이트합니다!
git submodule foreach git pull
주의 사항 : 저는 서브 모듈을 처음 사용합니다. 나는 그들이 어떻게 행동하는지 잘 모르겠습니다.
답변
이 .gitignore
플러그인을 추가하여 모든 플러그인을 무시하고 커밋하지 않을 수 있습니다.
vim/bundle
또한 플러그인 코드가 이미 github repos이기 때문에 플러그인 코드를 포함시키는 것이 문제가 있다고 말했습니다. 난 당신이 코드를 복제하지 않으려는 것을 의미하는 것 같아요,하지만 난 당신이 의존성 당신은 항상 당신의 코드에서 특정 지점으로 돌아가 수 있도록하다고 가서 중복 코드를해야한다고 말했다 들었어요 알고 있음 작동합니다. James Shore의 기사에 대한 내용은 다음과 같습니다. http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . 그는 프로그래밍 코드와 npm (vim과 반대)에 대해 이야기하고 있지만, 논쟁이 여전히 적용된다고 생각합니다. 당신은 코드를 작성하거나 쓸 수있는 안정적인 환경을 원합니다.