문제

문제: 파일을 추가합니다 ./shells/smallApps/* git에 ./.git/ 파일이 없으면 ./.git/info/exclude 또한 .gitignore -파일.

이 질문은 기반입니다 이 트레드 문제가 완전히 해결되지 않는 곳.

난 달린다

$git status                                                                                                                                          ~/bin
# On branch master
nothing to commit (working directory clean)
$git ls-files                                                                                                                                        ~/bin
Screen/dev/vim-open.screen
--- cut ---

나는 내 git에 "shells/smallapps/*"파일이 없다는 점에 유의하십시오.

$ls shells/smallApps/                                                                                                                                ~/bin
devTodo     extract     
                                                                                                                                             ~/bin

실행하여 내 git에 추가하고 싶습니다.

$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path 'shells/smallApps/devTodo' is in submodule 'shells/smallApps'
$git add .         

어떤 이유로 든 파일이 내 git에 추가되지 않았다는 점에 주목합니다.

$git status                                                                                                                                          ~/bin 
# On branch master
nothing to commit (working directory clean)

.git/info/exclude 또는 .gitignore -files에 파일이 없습니다.

마지막 경고는 무엇을 의미합니까?

도움이 되었습니까?

해결책

업데이트

Git이 파일을 무시하는 두 가지 일반적인 이유가 있습니다. gitignore 그리고 submodules.

보다 구체적으로 말하면 다음 조건은 Git이 파일을 무시하게됩니다.git add'호출 :

  1. 파일은 패턴과 일치합니다 $GIT_DIR/exclude.
  2. 파일은 패턴과 일치합니다 .gitignore Repo 내부에 파일을 파일하십시오.
  3. 파일은 사용자 별 패턴과 일치합니다 .gitignore 파일 ( 'git config --global core.excludesfile').
  4. 파일은 하위 모듈의 일부입니다.

강제 ''git add'무시 된 파일에서 :

호출하여 특정 파일이 무시되는지 확인할 수 있습니다.git add full/path/to/file'.

Man Page는 그것을 나타냅니다 "명령 줄에 무시 된 파일이 명시 적으로 지정된 경우 명령은 무시 된 파일 목록으로 실패합니다."

파일을 무시하면 '파일을 추가하도록 강제로 추가 할 수 있습니다.git add --force full/path/to/file'.

하위 모듈 참조를 제거하기위한 지침 :

이전 답변에서 언급했듯이 shells/smallApps a 하위 모듈 저장소에서.

파일이 하위 모듈의 일부인 경우 상황이 더 복잡합니다. 메인 프로젝트 내에서 하위 모듈의 내용을 수정할 수 없습니다.

하위 모듈 참조를 제거하고 기본 repo에서 파일을 직접 추적하려면 수행해야 할 몇 가지 단계가 있습니다. 하위 모듈에서 ".git"디렉토리를 간단히 제거 할 수는 없습니다. 기본 저장소와 하위 모듈 사이에는 세 가지 링크가 있습니다.

  1. 그만큼 .gitmodules 메인 repo의 파일.
  2. 입력 .git/config 당신의 메인 repo의.
  3. 메인 리포 기록의 하위 모듈과 관련된 커밋.

이것에 따라 관련 질문, 하위 모드를 완전히 제거하려면 다음 단계를 수행해야합니다.

참고 : 다른 지점 이이 하위 모듈에 의존하면 제거하면 저장소가 손상 될 수 있습니다! 이것은 위험한 작업입니다 ...주의해서 사용하십시오.

  1. 관련 라인을 삭제합니다 .gitmodules 파일.
  2. 관련 섹션을 삭제하십시오 .git/config.
  3. 운영 git rm --cached path_to_submodule (후행 슬래시 없음).
  4. 저지르다

하위 모듈의 일부였던 파일은 이제 추적되지 않았으며 원하는대로 보관하거나 삭제하기로 결정할 수 있습니다 (아래 언급 된 하나의 경고와 함께).

이 파일이 필요하지 않으면 단순히 파일을 삭제할 수 있습니다.

경고: 이 파일을 보관하려면 (원하는 것처럼 보이면) 수동으로 제거해야합니다. .git 하위 모듈 폴더의 디렉토리 :

  1. cd path_to_submodule
  2. rm .git
  3. cd ..
  4. git add path_to_submodule
  5. git status
  6. git commit

업데이트:

추가 정보 요청 :

이 문제를 디버깅하는 데 도움이 되려면 다음 전체 명령 세션의 출력을 게시하십시오.

cd to the top-level directory in your repo
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status

지금까지 한 일에 대한 설명을 바탕으로 다음을 기대합니다.

  • 아니 .gitmodules 어디서나 파일
  • 단 하나 .git 디렉토리 (Repo의 루트에서 발견)
  • 아니 .git 디렉토리 editors/vim/vimdoclet
  • 아니 .git 디렉토리 shells/smallApps

다른 팁

나는 당신이 가지고있는 것을 본다 git add 하위 모듈에 대해 말하는 것. Git 리포지토리 중첩이 있습니까? 이 작업을 수행:

$ find . -name .git

얼마나 .git 디렉토리가 나열되어 있습니까? 둘 이상의 것이 있다면 여러 개의 중첩 리포지토리가 있고 이는이 혼란의 원인이 될 수 있습니다.

이 질문을 GIT 메일리스트에 게시해야합니다 (git@vger.kernel.org). 더 신속하고 완전한 응답을 얻을 수 있습니다.

거기에 게시하기로 결정한 경우 다음을 포함시켜야합니다.

  • 달성하려는 것에 대한 설명.
  • 발생한 문제에 대한 설명.
  • 전체 세션 로그 표시 :
    • Repo의 최상위 디렉토리로 CD
    • ls -al
    • cat .git/config
    • find . -name ".git*"
    • git status
    • git add editors
    • git add shells
    • git status
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top