Nice programing

.gitignore의 git 하위 모듈을 무시하거나 저장소에 커밋합니까?

nicepro 2020. 10. 27. 23:29
반응형

.gitignore의 git 하위 모듈을 무시하거나 저장소에 커밋합니까?


나는 내 프로젝트에 서브 모듈을 추가 한 project_dir/vendor/submodule_one내가 지금 실행 때마다 git status내가 얻을 modified: vendor/submodule_one (new commits).

내 질문은 이것을 처리하는 가장 좋은 방법은 무엇입니까? 내 메인 프로젝트가 내 서브 모듈의 세부 사항에 대해 알 필요가 없기 때문에 vendor/submodule_one-folder를 내 폴더에 추가 .gitignore합니까?

아니면 서브 모듈을 변경하고 커밋 할 때 메인 프로젝트에서도 커밋해야합니까?

서브 모듈을 시작하기 만하면 설정 외에 많은 정보를 찾을 수없는 것 같습니다.


아니요, 하위 모듈을 추가 할 필요가 없습니다 .gitignore. 부모가 하위 모듈에서 보게되는 것은 gitlink ( 특수 항목,mode 160000 )입니다.

즉, 하위 모듈에서 직접 변경 한 내용은 상위 디렉토리에서 커밋이 뒤따라야합니다.
이렇게하면 상위 디렉토리는 하위 모듈의 상태에 대한 올바른 커밋을 기록합니다. 해당 커밋은 위에서 언급 한 "gitlink"입니다.

" git submodule update (true nature of submodules) " 에서 해당 정책에 대한 자세한 내용을 읽을 수 있습니다 .
서브 모듈의 기본 아이디어 는 특정 커밋에서 다른 저장소를 참조 하는 구성 요소 기반 접근 방식 입니다. 그러나 해당 하위 모듈에서 변경 사항이있는 경우 상위 저장소에서도 해당 참조를 업데이트해야합니다.


Git 2.13 (Q2 2017)에서는 gitlink를 무시 하지 않고 다음을 사용하여 하위 모듈을 무시할 수 있습니다.

git config submodule.<name>.active false

" Ignore new commits for git submodule " 참조하십시오 .


참고 : Git 2.15.x / 2.16 (2018 년 1 분기)에서는 하위 모듈을 무시하는 것이 더 정확합니다.
" git status --ignored --untracked"은 (는) 무시 된 디렉터리 자체를 무시한 것으로 표시하는 대신 무시 된 디렉터리에 포함 된 별도의 프로젝트와 해당 다른 프로젝트의 파일을 나열하는 작업 트리에서 멈추지 않았습니다.

Johannes Schindelin ( )의 commit fadb482 (2017 년 10 월 25 일)를 참조하십시오 . (Merged by Junio ​​C Hamano -- in commit da7996a , 06 Nov 2017)dscho
gitster

status: 제외 된 디렉토리의 하위 모듈로 인해 혼동하지 마십시오.

반복 될 때 추적되지 않는 파일이 아니라 제외되었음을 나타낼 수 있도록 exclude플래그를 treat_directory()함수에 꼼꼼하게 전달합니다 .

그러나 우리는 아직 하위 모듈을 같은 방식으로 취급하지 않았습니다.

그 때문에, git status --ignored --untracked서브 모듈로 submodulegitignored에서 tracked/은 "에서 서브 모듈을 보여줄 것 Untracked files"섹션, 예를 들어,

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    tracked/submodule/

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/initial.t

대신 " Ignored files"섹션에 하위 모듈을 표시하려고합니다 .

On branch master
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/

어떤 이유로 submodule.module-name.active 가 나를 위해 작동하지 않았습니다.

그래서 submodule.module-name.ignore를 사용 했습니다.

git config submodule.<your module path>.ignore all

https://git-scm.com/docs/gitmodules- 여기서 매개 변수의 가능한 값에 대한 설명을 찾을 수 있습니다.

(새 커밋) 및 (수정 된 콘텐츠) 메시지에 대해 나를 위해 작동합니다.

참고 URL : https://stackoverflow.com/questions/7912022/do-you-ignore-a-git-submodule-in-your-gitignore-or-commit-it-to-your-repo

반응형