programing

공통 코드를 git 하위 모듈로 추가하는 데 문제가 발생했습니다. "인덱스에 이미 있습니다."

subpage 2023. 5. 4. 19:56
반응형

공통 코드를 git 하위 모듈로 추가하는 데 문제가 발생했습니다. "인덱스에 이미 있습니다."

깃 서브모듈을 추가하고 싶습니다.공통 코드를 공유하는 두 개의 프로젝트를 받았습니다.공유 코드가 두 프로젝트에 복사되었습니다.하여 공용코별의를도생성하다프로 입니다.git서브 모듈

git submodule add의 경로 옵션을 사용하여 폴더를 지정했습니다.

git submodule add url_to_repo projectfolder

하지만 오류가 발생했습니다.

'projectfolder' already exists in the index"

원하는 저장소 구조는 다음과 같습니다.

repo
|-- projectfolder
    |-- folder with common code

추가할 수 .git하위 모듈을 직접 repo에 넣거나 프로젝트 폴더에는 넣지 않습니다.문제는 정말 프로젝트 폴더에 있어야 한다는 것입니다. add submodule add의 경로 할 수 요? git submodule add의 경로 옵션은 무엇입니까?

귀하의 질문에 대한 정보가 부족하여 무슨 일이 일어나고 있는지 확신할 수 없습니다. 귀하가 제 후속 질문에 답변하지 않았기 때문입니다. 하지만 이는 어떤 경우에도 도움이 될 수 있습니다.

그 오류는 다음을 의미합니다.projectfolder이미 준비되어 있습니다("인덱스에 오류가 있습니다").여기서 무슨 일이 일어나고 있는지 알아보려면 해당 폴더 아래에 있는 인덱스의 모든 항목을 다음과 같이 나열해 보십시오.

git ls-files --stage projectfolder

해당 출력의 첫 번째 열은 인덱스에 어떤 유형의 개체가 있는지 알려줍니다.projectfolder(UNIX 파일 모드처럼 보이지만 git에서는 특별한 의미가 있습니다.)

저는 당신이 다음과 같은 것을 보게 될 것이라고 생각합니다.

160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0   projectfolder

(즉, 행는하시작로))로 시작하는 행160000이 , 의 입니다.projectfolder이미 "gitlink"로 추가되었습니다.에 않경는우의에 나타나지 git submodule서브모듈로 다시 추가하려면 다음 작업을 수행합니다.

git rm --cached projectfolder

단계를 해제하고 다음과 같이 수행합니다.

git submodule add url_to_repo projectfolder

리포지토리를 하위 모듈로 추가합니다.

모드 그나파일모드함와께나열많다된있볼습니수블도롭을은러▁file▁modes▁howeverwithbs▁listed▁(다▁blo니있습▁many,▁possible▁see▁will그수).100644그리고.100755을 제대로 합니다. )에서 파일을 제대로 분할하지 않았습니다.projectfolder새 리포지토리를 복사하기 전에 복사할 수 있습니다.과 같이 파일의 할 수 .

git rm -r --cached projectfolder

그런 다음 다음을 사용하여 하위 모듈을 추가합니다.

git submodule add url_to_repo projectfolder

먼저 하위 모듈 깃 저장소(이 경우 프로젝트 폴더)를 제거해야 합니다.

rm -rf projectfolder

git rm -r projectfolder

그런 다음 서브모듈을 추가합니다.

git submodule add <git_submodule_repository> projectfolder

서브모듈을 수동으로 제거하는 작업은 여러 단계를 거쳐야 하는데, 이 작업은 저에게 효과가 있었습니다.

프로젝트 루트 디렉터리에 있고 샘플 git 모듈 이름이 "c3-pro-ios-framework"라고 가정합니다.

하위 모듈에 연결된 파일을 제거합니다.

rm -rf .git/modules/c3-pro-ios-framework/

구성에서 하위 모듈에 대한 참조를 제거합니다.

vim .git/config

여기에 이미지 설명 입력

.git 모듈 제거

rm -rf .gitmodules

"git" 없이 캐시에서 제거

git rm --cached c3-pro-ios-framework

하위 모듈 추가

git submodule add https://github.com/chb/c3-pro-ios-framework.git

저도 같은 문제를 겪었고 몇 시간 동안 찾아본 후에 답을 찾았습니다.

제가 받은 오류는 조금 달랐습니다.<path> already exists and is not a valid git repo 값을 (SEO 값을여추가됨에기위해

해결책은 하위 모듈을 저장할 디렉터리를 만들지 않는 것입니다.는 디리는생성다니됩의 됩니다.git submodule add지휘권

또한 인수는 작업 디렉터리가 아닌 parent-repo 루트에 상대적일 것으로 예상되므로 주의하십시오.

위의 예에 대한 솔루션:

  1. 상위 레포를 이미 복제해도 괜찮습니다.
  2. 다음을 확인합니다.common_code디렉터리가 없습니다.
  3. cd Repo
  4. git submodule add git://url_to_repo projectfolder/common_code/(필요한 후행 슬래시를 기록합니다.)
  5. 제정신이 회복되었습니다.

이것에 대한 정보는 다른 곳에서 거의 찾을 수 없기 때문에, 저는 이것이 누군가에게 도움이에 대한 정보는 다른 곳에서 찾을 수 없습니다.

이름이 이이지있경우는더가폴정된름"인xgit control에서 동일한 이름의 서브모듈을 추가하려면 먼저 폴더를 삭제하고 커밋해야 합니다.

@ujjwal-singh에 의해 업데이트됨:

커밋할 필요도 없고, 준비도 충분합니다. git add/git rm -r

인간의 언어로 오류가 무엇을 알려주려는 것인지를 명확히 하기.

기본 리포지토리에서 이미 추적된 리포지토리는 이 폴더에 만들 수 없습니다.

예: 예:라는 테마 폴더가 있습니다.AwesomeTheme그것은 전용 저장소입니다. 당신은 그것을 당신의 주 저장소에 직접 덤프하려고 시도합니다.git submodule add sites/themes그리고 당신은 이것을 얻습니다."AwesomeTheme" index already exists.

당신은 단지 그들이 이미 존재하지 않는지 확인하기만 하면 됩니다.sites/themes/AwesomeTheme기본 리포지토리의 버전 추적에서 하위 모듈을 만들 수 있습니다.

빈가 , 빈저가있기저서에장소본으면소장정▁repos▁if▁anitory▁you▁so서▁your▁main,에,▁in.sites/theme/AwesomeTheme디렉터리를 제거합니다. 사용커경우밋한와자와 sites/theme/AwesomeTheme기본 리포지토리의 디렉터리는 다음과 같은 명령을 사용하여 모든 기록을 정리해야 합니다.

git filter-branch --index-filter \
              'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme'     HEAD

이제 실행할 수 있습니다.git submodule add git@AwesomeTheme.repowhateverurlthing sites/themes/AwesomeTheme

주 리포지토리에서 어떤 것도 본 적이 없기 때문에 (예: 색인)sites/themes/AwesomeTheme이전에는 이제 생성할 수 있습니다.

저는 그것을 반대로 해서 그것을 작동시켰습니다.빈 repo로 시작하여 "projectfolder/common_code"라는 새 폴더에 하위 모듈을 추가합니다.그 후 프로젝트 폴더에 프로젝트 코드를 추가할 수 있었습니다.자세한 내용은 아래와 같습니다.

빈 보고서 유형:

git submodule add url_to_repo projectfolder/common_code

그러면 원하는 폴더 구조가 생성됩니다.

repo
|-- projectfolder
    |-- common_code

이제 하위 모듈을 추가할 수 있으며 프로젝트 코드를 프로젝트 폴더에 추가할 수 있습니다.

저는 아직 왜 그것이 다른 쪽이 아니라 이런 식으로 작동했는지 말할 수 없습니다.

리포지토리 폴더로 이동합니다..git 모듈에서 관련 하위 모듈을 삭제합니다.숨겨진 파일 표시를 선택합니다..git 폴더로 이동하여 모듈 폴더 및 구성에서 하위 모듈을 삭제합니다.

IntelliJ 15 내에서 파일을 커밋하려고 할 때 동일한 문제가 발생했지만 이것이 유용한지는 모르겠습니다.결국, 저는 소스 트리를 열었고 그 안에서 간단히 파일을 커밋할 수 있었습니다.문제는 해결됐습니다.화려한 git 명령을 내릴 필요가 없습니다.같은 문제가 있는 사람이 있을 경우를 대비해 언급하는 것입니다.

대상 경로에 .git 파일이 없는 경우 이 문제가 발생합니다.그 일은 내가 사형을 집행한 후에 내게 일어났습니다.git clean -f -d.

된 대상 를 모두 한 후 실행해야 .git submodule update --remote

Ubuntu를 사용하는 경우 휴지통에서도 파일을 삭제해야 합니다.

저의 경우에는 파일을 휴지통으로 옮겼습니다.

Gitdir에서 모든 변경 사항을 동기화했다고 가정합니다.

rm -rf .git 

rm -rf .gitmodules

다음을 수행합니다.

git init
git submodule add url_to_repo projectfolder

언급URL : https://stackoverflow.com/questions/12898278/issue-with-adding-common-code-as-git-submodule-already-exists-in-the-index

반응형