Articles

마스터 Git 하위 모듈

서브 모듈을,단계별

우리는 이제 사용의 모든 단계 서브 모듈을 공동 프로젝트에서 확인하고,우리는 하이라이트는 기본 동작을 사용 가능 개선.

를 촉진하기 위해 다음과 같은 함께,내가 함께 넣었습니다 몇 가지 예를 들어 repos 그들의”리모컨”(실제로 그냥 디렉토리)., 할 수 있습 압축 아카이브는 어디든지 당신이 원하는 다음을 열 쉘(또는 Git Bash,에 있는 경우 윈도우)에서 git-sub 디렉토리를 만듭니다.

다운로드를 들어 repos

가 디렉토리에 있다:

  • 주요 역할로는 컨테이너 repo,지역 첫 데뷔작
  • 플러그인으로 작동 중 유지보수 리포트 모듈 그리고
  • 리모컨 포함되어 파일 시스템을 리모컨에 대한 이전의 두 repos.

아래의 예제 명령에서 프롬프트는 항상 우리가 어떤 repo 에 있는지 표시합니다.,

하위 모듈 추가

컨테이너 내부에 플러그인을 하위 모듈로 추가하여 시작하겠습니다(메인에 있음). 플러그인을 자체 구조가 간단하다.

.
├── README.md
├── lib
│ └── index.js
└── plugin-config.json

그로 가자 주요 사용 git 서브모듈을 추가 명령입니다. 리모컨의 URL 과 하위 모듈을”인스턴스화”할 하위 디렉토리가 필요합니다.

기 때문에 우리가 사용하는 경로로 대신 Url 여기에 대한 우리의 리모컨은,우리는 이상,이기는 하지만 잘 알려져 있다가:상대적인 경로를 위한 리모컨은 상대적으로 해석 해를 우리의 주요 원격지,아니면 우리의 저장소의 루트 디렉토리에 있습니다., 이것은 슈퍼 이상하고 어디에도 설명되지 않지만 매번 일어나는 것을 보았습니다. 그래서 말 대신에../리모컨/플러그인,우리는 단지 말합니다../플러그인.

main (master u=) $ git submodule add ../plugin vendor/plugins/demo
Cloning into 'vendor/plugins/demo'…
done.
main (master + u=) $

이 추가되는 몇 가지 설정을 우리의 현지에서 구성:

main (master + u=) $ cat .git/config


url = ../remotes/plugin

그리고 이것은 또한 개최 두 개의 파일:

Huh?! 이게 뭐야.gitmodules 파일? 그것을 보자:

main (master + u=) $ cat .gitmodules

path = vendor/plugins/demo
url = ../plugin

이 격렬하게 유사한 우리의 로컬 config…왜 그렇게 중복? 글쎄,정확하게 우리의 로컬 구성이…, 우리의 공동 작업자가 볼 수 없다(완벽하게 정상),그래서 그들이 필요로하는 메커니즘을 얻을의 정의를 모든 서브 모듈들을 설정하에서 자신의 repos. 이게 뭐야.gitmodules 는 for 입니다;잠시 후에 볼 수 있듯이 git submodule init 명령에 의해 나중에 읽을 것입니다.

에있는 동안 상태를 참고 어떻게 최소한 그것은 그것에 올 때 우리의 서브모듈:그것은 단지는 지나치게 일반적인 새로운 파일을 대신 우리에게 말하고 더 많은 무슨 일이 일어나고 있는지에 대한 내부습니다., 우리의 서브모듈로에 주입의 하위 디렉토리:


└── vendor
└── plugins
└── demo
├── .git
├── README.md
├── lib
│ └── index.js
└── plugin-config.json

상태가 같은 로그와 차이점은 제한을 활성 repo(지금,컨테이너),지 서브 모듈,중첩된 repos. 이는 자주 문제가 있는(그것의 최고 놓치지 쉽 회귀할 때 이에 한정되기),그리고 당신은 설정을 서브모듈-인식 상태를 한번에 모든

git config --global status.submoduleSummary true

그리고 지금:

연결,이것은 훨씬 더 좋다., 상태 것이다:그것의 기초 정보를 추가하는 서브모듈에 존재하는 업체/plugins/데모어 3 뉴스 커밋(으로 우리는 그냥 만들어진 그것은,그것이 의미하는 원격 지점 세 가지 커밋),마지막이 되는 것 또한(주의 오른쪽을 가리키는 각 부류는>)첫 번째 commit 메시지가 줄 수정”repo 이름으로…”.

하기 위해 정말로 가져가는 우리가 다루는 두 개의 별도 repos 여기에서,의로 서브모듈의 디렉토리:

active repo 가 변경되었기 때문에,새로운.,git 은 다음을 대신합니다:현재 디렉토리(데모,하위 모듈의 디렉토리)에서 a.git 은 실제로 디렉토리가 아닌 단일 파일도 존재합니다. 자의 내부

demo (master u=) $ cat .git
gitdir: ../../../.git/modules/vendor/plugins/demo

이후,다시 Git1.7.8,Git 떠나지 않 repo 디렉토리 내부에 콘테이너의 작업 디렉터리로,그러나 중앙에서 이러한 컨테이너습니다.힘내 디렉토리(내부.git/modules)및 하위 모듈에서 gitdir 참조를 사용합니다.,

뒤에 있는 근거 이것은 간단하다:그것은 컨테이너 repo 가 서브모듈 덜 가지지 않고,스크랩 서브모듈의 저장소에서 작업 디렉터리 및 복원됩니다.

자연스럽게 추가할 때 서브모듈,당신이 선택할 수 있습을 사용하여 특정 지점,또는 특정 커밋을 사용하여,-b CLI 옵션을(당으로 평소,기본입니다 마스터). 참고 우리는 지금,에서 분리 헤드와는 달리,어떤 일이 일어날 것이 나중에:때문에 이것은 이 Git 체크아웃 마스터하지 않는 특정 SHA1. 우리는 get-go 에서 분리 된 머리를 얻기 위해 SHA1to-b 를 지정해야했을 것입니다.,

그래서 다시 컨테이너 repo 고자 마무리 서브모듈의 추가하고 밀어 원격:

demo (master u=) $ cd -
main (master + u=) $ git commit -m "Ajout submodule plugin demo"
main (master u+1) $ git push

을 잡아 repo 사용하는 서브 모듈

하기 위해서 설명된 문제에서 공동 작업을 수행하는 리포트를 사용하는 서브 모듈을,우리는 인격과 행동으로 우리의 동료,복제 컨테이너의 원격 작업을 시작하는 우리와 함께. 우리는 복제하는 것에 동료 디렉토리,그래서 우리는 즉시 알 수 있습니다 어떤 성격 캡 우리에게 주어진 시간이다.,

첫 번째로 주의해야 할 점은 우리의 서브모듈의 누락에서 작업 디렉터리만의 기본 디렉토리는 여기에 있습니다:

vendor
└── plugins
└── demo

어떻게 이런 일이 일어날 수 있을까요? 이것은 단순히는 사실로 인해,지금까지,우리의 새로운 repo(동료)지 않는다면 우리의 서브모듈직의 정보에 대한 그것은 어디에서도 현지 구성(확인.당신이 나를 믿지 않는다면 git/config). 우리는 무엇을 기반으로 그것을 채워야 할 것입니다.gitmodules 는 정확히 git submodule init 이하는 일입니다.

Our.git/config 는 이제 우리의 하위 모듈을 알고 있습니다., 그러나 우리는 여전히지 않은 억지에서 원격은 말할 것도 없고 하는 데에 존재하는 우리의 작업 디렉터리입니다. 그럼에도 불구하고 우리의 상태는 깨끗한 것으로 나타납니다!관련 커밋을 수동으로 잡아야합니다. 그것은 우리의 초기 클론이 한 일이 아니며,우리는 모든 풀에서 그것을 할 필요가 있습니다. 이것은 행동 복제가 실제로 자동화 할 수있는 것처럼 제대로 호출 될 때 우리는 1 분 안에 다시 돌아올 것입니다.,

,실제로 다룰 때 서브모듈을 사용하여-저장소,우리는 일반적으로 두 개의 명령(init 및 업데이트)에서 하나:

colleague (master u=) $ git submodule update --init

그것은 여전히 부끄러운 것을 자식은 당신이하는 모든 것을 자신입니다. 더 큰 치실 프로젝트에서 서브 모듈이 자신의 서브 모듈을 가지고있을 때 등등…이 빠르게 악몽이 될 것이라고 상상해보십시오.

Git 은 복제 직후에 재귀 적으로 하위 모듈 업데이트 초기화를 자동으로 git 하기 위해 cli 옵션을 제공합니다.,

그래서 모든 것을 다시 해봅시다.

이제 더 좋습니다! 우리는 지금에는 분리된 머리 안에 서브모듈(으로 우리는 이제부):

git-subs $ cd colleague/vendor/plugins/demo
demo ((master)) $

보정 괄호 내에서 프롬프트를 대신 하나의 세트?, 하는 경우 프롬프트가 없이 다음과 같이 구성된 광산시 단독으로 머리를 설명합니다(Git 내장 된 프롬프트에서 스크립트가 있을 정의하 GIT_PS1_DESCRIBE_STYLE=점 환경 변수),당신은 오히려 다음과 같은 결과가 표시됩니다:

demo ((fe64799...)) $

에 상태를 확인 우리가 어디에 있:

demo ((master)) $ git status
HEAD detached at fe64799
nothing to commit, working directory clean

을 얻기에서 업데이트를 서브모듈의 원격

OK,이제는 우리는 우리 자신의 repo(main)그리고 우리의”동료의”(동료)모든 설정이 협업하고자 단계 신발의 제삼자:하는 사람이 유지 플러그인입니다., 여기로 이동하겠다:

이제를 추가 할 두 가지 의사 commits 게시 이러한 원격:

마지막으로,우리의”우선 개발자”뚜껑에 다시:

plugin (master u=) $ cd ../main
main (master u=) $

가 지금 우리가 얻고 싶은 이러한 두 개의 커밋 안에 우리의 서브모듈. 이를 달성하기 위해,우리가 필요한을 업데이트하기 위해 현지 repo 시작으로 움직이 작업 디렉터리 된다 그래서 우리의 활동 repo.이런 종류의 업데이트를 위해 pull 을 사용하지 않는 것이 좋습니다., 을 제대로 얻을 업데이트를 작업 디렉토리에 있는 이 명령을 필요로 하는 당신이에서 적절한 활동 지점,당신은 일반적으로 하지 않습(를 분리되는 머리의 대부분은 시간). 당신은 그 지점의 체크 아웃으로 시작해야 할 것입니다. 그러나 더 중요한 것은,원격지점할 수 있는 아주 잘 이동 더 앞서기 때문 commit 당신을 설정하려면에서,그리고 당신 커밋을 주입하지 않을 수도 있습에서 귀하의 지역 코드 베이스입니다.,

따라서,추천 나누는 이 과정을 수동으로 첫 번째 git fetch 모든 새로운 데이터에서 원격에서 로컬 캐시 후,로그인 및 체크아웃에서 원하는 SHA1. 에 더하여 보다 세밀하게 제어,이러한 접근법의 혜택을 추가 작업 관계없이 당신의 현재 상태(active 지점 또는 분리 head).그래서 우리는 훌륭하고 관계없는 커밋이 없습니다., 이 될 수 있으므로,자의 명시적으로 설정 하나에 관심이 있에(물론 당신은 다른 SHA1):

demo (master u-2) $ git checkout -q 0e90143

(-q 만이 우리를 살 Git 나면 뭐라고는 방법에 대해 우리가 끝까지에 분리되는 머리입니다. 일반적으로 이것은 건강한 알림 일 것이지만,이 일에 우리는 우리가하고있는 일을 알고 있습니다.)

이제는 우리의 서브모듈입 업데이트되고,우리가 볼 수있는 결과에서 컨테이너 저장소의 상태:

에서”classical”부분의 상태,우리는 새로운 커밋 형식 변경을 의미하는 참조되 commit 변경되었습니다., 또 다른 가능성(수 있는 복이 이 하나의)새로운 내용하는 것을 의미한 우리는 지역 변화 서브모듈의 작업 디렉터리입니다.

우리의 상태에 의해 활성화 된 하단 부분.submoduleSummary=true 설정을 이전에,명시적으로 나타 소개 커밋(로 그들이 사용하는 오른쪽을 가리키는 각 부류는>)이후 우리의 마지막 컨테이너 commit 는 감동했 서브모듈.

“끔찍한 기본 동작”패밀리에서 git diff 는 원하는 것을 많이 남깁니다.

무엇—?, 가 CLI 옵션이 있습니다 우리가 뭔가 더 유용합니다:

main (master * u=) $ git diff --submodule=log
Submodule vendor/plugins/demo fe64799..0e90143:
> Pseudo-commit #2
> Pseudo-commit #1

기 다른 지역의 변화는 바로 이제 외 서브모듈 참조 commit…이 경기는 거의 아래 부분의 우리의 강화 git 상태가 표시됩니다.

하는 형식의 종류 CLI 옵션을 때마다(어떤 방법에 의해,에 표시되지 않 Git 의 현재 완료 제공)은 오히려 어렵습니다. 다행히도 일치하는 구성 설정이 있습니다.

이제 하위 모듈의 업데이트를 마무리하는 컨테이너 커밋 만 수행하면됩니다., 이 업데이트와 함께 작동하도록 컨테이너의 코드를 터치해야한다면 자연스럽게 함께 커밋하십시오. 다른 한편으로,혼합해서 사용하지 마십시오 서브모듈과 관련된 변화와는 다른 재료하는 것과 관련하여 컨테이너호:에 의해 깔끔하게 두 분리,나중에 마이그레이션을 다른 코드를 재사용 방법은 손쉽게 수행할 수 있습니다(또한,평소와 같이,원자 커밋들이 푸른 하늘).

우리 동료의 repo 에서이 서브 모듈 업데이트를 잡으려고하므로 커밋 직후에 푸시합니다(일반적인 좋은 관행은 아닙니다).

main (master * u=) $ git commit -am "Setting submodule on PC2"
main (master u+1) $ git push

당기 서브모듈 사용하 repo

클릭!, “동료”캡에!

그래서 우리는 때로부터 업데이트 콘테이너 저장소의 원격…

(이 없을 수 있습니다”성공적으로 주소 및 업데이트되…”및”병합에 의해 만들어진’재귀’전략”대신 합니다. 그렇다면,내 마음이 당신에게 나가고,왜 끌어 당김이 리베이스되어야 하는지를 즉시 배워야합니다).

이 디스플레이의 후반부에주의하십시오:”하위 모듈 가져 오기…”로 시작하는 하위 모듈에 관한 것입니다.

이 동작은 구성 설정 fetch 와 함께 Git1.7.5 의 기본값이되었습니다.,recurseSubmodules 지금은 기본값은 on-demand:는 경우에는 컨테이너 프로젝트의 업데이트를 참조 서브모듈 commits,이러한 하위 모듈을 얻 가 자동으로 합니다. (가져 오기는 당기기의 첫 번째 부분임을 기억하십시오.)

여전히,그리고 이것은 중요합니다:Git 자동 가져 오기하지만 자동 업데이트하지는 않습니다. 로컬 캐시는 하위 모듈의 리모컨과 최신이지만 하위 모듈의 작업 디렉토리는 이전 내용에 붙어 있습니다. 적어도,당신은 그 노트북을 종료 비행기에 홉,여전히 한 번 오프라인 앞서 위조 할 수 있습니다., 하지만 이 자동으로 인출이 제한되는 이미 알려진 하위 모듈:모든 새로운 것들,아직은 복사되는 현지 구성하지 않은 자 가져올 수 있습니다.그러나 자동 업데이트되지 않습니다.

현재 프롬프트의 별표(*)는 힌트를 로컬에서 수정하기 때문에,우리의 WD 지 않습과 동기화된 색인,후자의 인식이 새로 참조되는 서브모듈가한다. 상태를 확인하십시오:

꺾쇠 괄호가 왼쪽을 가리키는 방법을 알 수 있습니까(<)?, Git 은 현재 WD 에 컨테이너 프로젝트의 기대와는 달리이 두 커밋이 없다는 것을 알 수 있습니다.하위 모듈의 작업 디렉토리를 명시 적으로 업데이트하지 않으면 다음 컨테이너 커밋이 하위 모듈을 회귀합니다. 이것은 1 차 함정입니다.

는 따라서 필수입을 완료 업데이트:

만큼 우리가하려는 일반적인 형태로 좋은 습관을 선호하는 명령이 여기 것 git 서브모듈 update—init—재귀하기 위해,자동 init 어떤 새로운 서브모듈을 재귀적으로 업데이트는 이러한 필요가있는 경우.,

이 다른 경우 가장자리:는 경우 서브모듈의 원격 URL 이 변경되었는 지난 이후 사용하는(아마도 하나의 공동 작업자에서 변경.gitmodules),이에 맞게 로컬 구성을 수동으로 업데이트해야합니다. 이러한 상황에서 git 서브 모듈 업데이트 전에 git 서브 모듈 동기화를 실행해야합니다.

I 언급해야한다,완전성을 위해’술,는 경우에도 git 서브모듈 업데이트를 기본값을 확인하는 참조되는 SHA1,당신은 그것을 변경할 수 있습니하는,예를 들어,리베이스는 모든 로컬 서브모듈 작업(우리는 우리 것에 대해 이야기는 곧)습니다., 하위 모듈에 대한 업데이트 구성 설정을 컨테이너의 로컬 구성 내에서 리베이스하도록 설정하여 그렇게 할 것입니다.

고 죄송하지만,없는 현지 구성을 설정하거나,심지어 CLI 옵션이 그 문제에 대해할 수 있는 자동 업데이트에 당깁니다. 이러한 작업을 자동화하려면 별칭,사용자 정의 스크립트 또는 신중하게 제작 된 로컬 후크 중 하나를 사용해야합니다., 여기에 예 spull 별칭(싱글 라인,분할기 위해 디스플레이)

git config --global alias.spull '!git pull && git submodule sync --recursive && git submodule update --init --recursive'

경우를 유지할 능력을 통과하는 사용자 정의 인수를 git pull 인할 수 있을 정의 기능에 비행을하고 전화,또는 사용자 정의 스크립트입니다. 첫 번째 접근법은 다음과 같이 보일 것입니다(다시 한 줄).

매우 읽을 수 없습니까? 사용자 정의 스크립트 접근 방식을 선호합니다., 보겠어졌고 git-spull 스크립트 파일 어딘가 안에 당신의 경로(나가~/perso/bin 디렉토리에 경로를 위해 그러한 것들):

#! /bin/bash
git pull "$@" &&
git submodule sync --recursive &&
git submodule update --init --recursive

우리는 그 다음 그것을 실행 권한다.

chmod +x git-spull

그리고 지금 우리가 사용할 수 있습니다 그것은 단지 우리가 사용하고 있는 별칭입니다.

업데이트 서브모듈에서 컨테이너

이것은 가장 어려운 사용 사례,그리고 당신은 멀리해야에서 그것을 가능한 한 많이 선호하고,유지보수를 통해 중앙에 전념,repo.,

그러나 하위 모듈 코드를 테스트하거나 컨테이너 코드 외부에서 컴파일 할 수 없습니다. 많은 테마와 플러그인에는 이러한 제약이 있습니다.우선 이해해야 할 것은 커밋을 만들려고하기 때문에 적절한 기초부터 시작해야하므로 분기 팁이 될 것입니다. 따라서 분기의 최신 커밋이 컨테이너 프로젝트를”중단”하지 않는지 확인해야합니다. 그들이 할 경우,잘 만들고,자신의 컨테이너가 특정 지점에서의 서브모듈 소리를 유혹하지만,그 경로를 리드하는 강력한 사이의 커플링 서브모듈 및 컨테이너,하지 않는 것이 좋습니다., 이 특정 프로젝트에서 해당 코드를”서브 모듈”하는 것을 중지하고 대신 일반 내용처럼 포함시킬 수 있습니다.선한 양심으로 서브 모듈의 현재 마스터 브랜치에 추가 할 수 있음을 인정합시다. 시작하자 동기화하여 우리 지역 국가에서 원격의:

는 또 다른 방법에 대해 이동하는 것이,에서 컨테이너 저장소를 명시적으로 동기화 서브모듈의 지점을 통해 그것의 추적을 원격지점(단위,마지막 뒤에 공백):

우리는 할 수 있습니다 코드 작업,테스트,등등., 일단 우리가 모든 설정하고,우리가 할 수 있습 다음 수행에 두 개의 커밋이 필요한 두 개의 푸시(그것은 매우 쉽고,실제로 모든 너무 자주하는 것을 잊지의 일부는).

의 단순히 추가 가짜 작업과 관련된 두 가지 커밋에서 서브모듈 및 컨테이너 수준:

이 시점에서,중요한 위험을 잊어를 밀어 서브모듈. 컨테이너 프로젝트로 돌아가서 커밋하고 컨테이너 만 밀어 넣습니다. 특히 IDE 또는 GUI 내부에서 쉽게 실수 할 수 있습니다. 동료가 업데이트를 얻으려고 할 때 모든 지옥이 느슨해집니다., 첫 번째 단계를 살펴보십시오.

Git 이 서브 모듈의 리모컨에서 참조 된 커밋을 가져올 수 없다는 표시가 전혀 없습니다. 의 첫 번째 힌트는 이에 상태:

통지의 경고:분명히,새롭게 참조 commit 에 대한 서브모듈은 어디에서도 찾을 수 없었습니다. 면 실제로,우리도 업데이트 서브모듈의 작업 디렉터리를,우리가 얻을:

main (master * u=) $ git submodule update
fatal: reference is not a tree: 12e3a529698c519b2fab790630f71bd531c45727
Unable to checkout '12e3a529698c519b2fab790630f71bd531c45727' in submodule path 'vendor/plugins/demo'

할 수 있는 노골적으로 볼이 얼마나 중요한 것은 기억하 밀어 서브모듈,너무 이기 전에 밀 컨테이너입니다., 을 하자는 것에 동료 및 업데이트를 다시 시도합니다.

참고 해야 하는가 CLI 옵션이 있는지 확인합니다 현재 참조 서브모듈 커밋을 수 있으며,너무는 경우도록 그들을 밀어:그것은 git push—recurse-서브 모듈=on-demand(꽤 길,틀림없이). 그것은 필요가 무언가가 있 컨테이너 수준를 밀어 작동하지만 서브 모듈을 사용하는 것은 좋지 않습니다.

What’s more,(이 없는 구성 설정이,그래서 당신은 절차를 표준화위는 별칭이,예를 들어,spush:)—을 시작으로 Git2.7.0,있다 지금이 중요합니다.,recurseSubmodules 구성 설정 정의 할 수 있습니다(주문형 또는 확인).

git config --global alias.spush 'push --recurse-submodules=on-demand'

제거하는 서브모듈

두 가지 상황을 원하는”제거하는”서브모듈:

  • 당신이 원하는 명확한 작업 디렉터리(아마도 전에 보관용 컨테이너의 WD)하지만 원하는의 가능성을 유지하기 위해 복원하는 이상(그래서 그것을 남아 있습니다.gitmodules 및.git/modules);
  • 현재 분기에서 결정적으로 제거하려고합니다.

각각의 경우를 차례로 보자.,

서브 모듈을 일시적으로 제거

첫 번째 상황은 git 서브 모듈 deinit 에 의해 쉽게 처리됩니다. 직접보십시오:

이것은 컨테이너 상태에 전혀 영향을 미치지 않습니다. 하위 모듈은 더 이상 로컬로 알려져 있지 않습니다(에서 사라졌습니다.git/config),그래서 작업 디렉토리에서 그것의 부재는 주목 간다. 우리는 여전히 공급 업체/플러그인/데모 디렉토리를 가지고 있지만 비어 있습니다.이 작업을 수행 할 때 하위 모듈에 로컬 수정이 없어야하며 그렇지 않으면 호출을—강제해야합니다.,

어떤 나중에 하위 명령의 git 서브모듈이 행복하게 무시 서브모듈할 때까지 init,다시 그것으로 서브모듈지 않을 수도에서는 현지 구성. 이러한 명령에는 업데이트,foreach 및 동기화가 포함됩니다.

반면에 서브 모듈은 정의 된 상태로 유지됩니다.gitmodules:init 뒤에 업데이트(또는 단일 업데이트 init)이 복원으로 새로운

영구적으로 제거하는 서브모듈

이하려고 한다는 것을 의미합니다 제거하의 서브모듈을 위해 좋은 일반 git rm 할 것,다만,다른 부분의 작업 디렉터리입니다., 하위 모듈이 gitfile(에이.디렉토리가 아닌 파일 인 git),이는 Git1.7.8 로 시작하는 경우입니다. 그렇지 않으면 손으로 이것을 처리해야 할 것입니다(나는 마지막에 어떻게 말할 것입니다).

작업 디렉토리에서 하위 모듈을 제거하는 것 외에도 명령을 업데이트합니다.gitmodules 파일 그래서 더 이상 하위 모듈을 참조하지 않습니다. 여기에 당신이 갈:

자연,진보된 상태 정보로 여행을 통해 스스로 여기에 있기 때문에,gitfile 에 대한 서브모듈라(실제로,전체 데모 디렉토리 사라졌다).,

이상한 점은 로컬 구성이 deinit 할 때 발생하는 것과 달리 하위 모듈 정보를 유지한다는 것입니다. 그래서에 대한 종합적인 제거하는 것이 좋습니지,모두 순서대로 그렇게 끝까지 제대로 정리(작동하지 않을 것 후에 우리의 이전을 명령이기 때문에,그것은 지워집니다.gitmodules 이미):

git submodule deinit path/to/module # ensure local config cleanup
git rm path/to/module # clean WD and .gitmodules

당신의 접근 방식에 관계없이 서브 모듈의 repo 는 여전히 존재합니다.힘내/모듈/공급 업체/플러그인/데모,하지만 당신은 당신이 원하는 때마다 죽일 무료입니다.

혹시 Git1.7 이전에 설정 한 서브 모듈을 제거해야하는 경우.,8,따라서 그것의 내장.git 디렉토리에서 컨테이너의 작업 디렉터리(의존하는 대신에 gitfile),당신은 휴식의 불도저:이전의 두 가지 명령을 할 필요가 앞에 설명서 폴더 제거,예를 들어 rm-fr 공급업체/plugins/데모하기 때문에 말하는 명령은 항상 거부를 삭제하려면 실장합니다.피>