~/.janus/
하위 모듈이 많은 자식 저장소 가 있습니다. 에 하위 모듈을 추가하고 ~/.janus/snipmate-snippets/snippets/
싶지만 디렉토리 git submodule add <git@github.com:...>
에서 실행할 때 snipmate-snippets
다음 오류 메시지가 나타납니다.
You need to run this command from the toplevel of the working tree.
그래서 질문은 : snipmate-snippets
디렉토리에 서브 모듈을 어떻게 추가 합니까?
답변
당신은 가서 ~/.janus
실행 :
git submodule add <git@github ...> snipmate-snippets/snippets/
서브 모듈 (또는 일반적으로 git)에 대한 자세한 정보가 필요한 경우 ProGit 이 매우 유용합니다.
답변
git1.8.4 (2013 년 7 월) 를 시작 하면 더 이상 루트 디렉토리로 돌아갈 필요가 없습니다.
cd ~/.janus/snipmate-snippets
git submodule add <git@github ...> snippets
( Bouke Versteegh의 코멘트 는 사용하지 않는 것이 /.
같이 snippets/.
: snippets
충분하다)
commit 091a6eb0feed820a43663ca63dc2bc0bb247bbae 참조하십시오 :
하위 모듈 : 최상위 요구 사항 삭제
새로운
rev-parse --prefix
옵션을 사용하여 서브 모듈 명령에 제공된 모든 경로를 처리하여 저장소의 최상위 레벨에서 실행해야한다는 요구 사항을 제거하십시오.상대 서브 모듈 URL의 해석은 ”
remote.origin.url
“의 구성 여부에 따라 달라 지므로git submodule add
작업 트리의 최상위 레벨이 아닌 경우 ” ” 에서 상대 URL을 명시 적으로 차단 하십시오.서명자 : John Keep
커밋 12b9d32790b40bf3ea49134095619700191abf1f에 따라 다름
이렇게하면 ‘
git rev-parse
리포지토리의 지정된 서브 디렉토리에서 호출 된 것처럼 작동하며, 인쇄되는 파일 경로 앞에는 작업 트리 맨 위에서 전체 경로가 접두어로 붙습니다 .이것은
cd
작업 트리의 맨 위로 가고 싶지만 명령 줄에서 사용자가 제공 한 상대 경로를 처리해야하는 쉘 스크립트에 유용합니다 .
답변
비슷한 문제가 있었지만 GUI 도구를 사용하여 코너에 섰습니다.
파일이 몇 개있는 하위 프로젝트가 있었으므로 지금까지 자체 git repo를 확인하는 대신 복사했습니다. 하위 폴더에 리포지토리를 만들고 커밋, 푸시 등을 할 수있었습니다. 그러나 부모 저장소에서 하위 폴더는 하위 모듈로 취급되지 않았으며 파일은 여전히 부모 저장소에 의해 추적되고 있습니다.
이 혼란을 피하기 위해 Git에게 하위 폴더 추적을 중단하도록 지시 해야했습니다 (파일을 삭제하지 않고).
proj> git rm -r --cached ./ui/jslib
그런 다음 거기에 하위 모듈이 있다고 말해야했습니다 (현재 git에서 추적중인 것이 있으면 할 수 없습니다).
proj> git submodule add ./ui/jslib
최신 정보
이를 처리하는 이상적인 방법은 몇 가지 단계를 더 포함합니다. 이상적으로 기존 리포지는 부모 git 모듈이없는 자체 디렉토리로 이동하여 커밋 및 푸시 한 다음 다음과 같은 하위 모듈로 추가됩니다.
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
그것은 표준 복제 단계를 포함하는 하위 모듈로 git repo를 복제 할뿐만 아니라 하위 모듈을 작동시키기 위해 git이 대신하기 위해 더 모호한 구성 단계를 수행합니다. 가장 중요한 차이점은 실제 git dir이 어디에 있는지에 대한 경로 참조를 포함하는 .git 디렉토리 대신 간단한 .git 파일을 거기에 배치한다는 것입니다. 일반적으로 상위 프로젝트 루트 .git / modules / jslib.
당신이 이런 식으로 일을하지 않으면 그들은 당신을 위해 잘 작동하지만, 당신이 부모를 저지르고 밀고 나자마자 다른 개발자가 그 부모를 잡아 당길 때, 당신은 그들의 삶을 훨씬 더 힘들게 만들었습니다. 자체 .git dir을 포함하는 dir의 하위 폴더에 전체 .git dir이 있으면 시스템에있는 구조를 복제하기가 매우 어렵습니다.
따라서 git add submodule은 이동, 푸시, 가장 깨끗한 옵션입니다.
답변
구성 파일을 수동으로 편집하는 이상한 점을 공유하는 사람들에게는 다음을 추가 (또는 수정)해도 트릭이됩니다.
.git / config (개인 구성)
[submodule "cookbooks/apt"]
url = https://github.com/opscode-cookbooks/apt
.gitmodules (커밋 된 공유 구성)
[submodule "cookbooks/apt"]
path = cookbooks/apt
url = https://github.com/opscode-cookbooks/apt
뿐만 아니라이 참조 – .gitmodules 및 서브 모듈에서 .git / config에 지정 사이의 차이점은 무엇입니까?
답변
.vim 스크립트에 대한 Vundle 업데이트를 사용하여 코너에 자신을 그렸습니다. DEST
하위 모듈이 포함 된 디렉토리의 경로입니다. 이 작업을 수행 한 후 수행git rm -r $DEST
DEST='path'; for file in `ls ${DEST}`; do git submodule add `grep url ${DEST}/${file}/.git/config|awk -F= '{print $2}'` ${DEST}/${file}; done
건배