Git Submodule을 정리해 보도록 하겠습니다.

5107 단어 Git

개시하다


Git Submodule에 대해 알고 있는 범위를 요약해 보십시오.
같은 기사가 많았지만 판본이 다르고 움직임도 미묘하게 다르고 자신도 상상할 수 없는 부분도 있어서 기사를 썼다.
Giit 버전:
Git Shell git version 2.11.0.windows.3
(GitHub for Windwos 3.3.4.0)
.

필요조건

  • 상위 항목에서 하위 항목(하위 모듈)을 사용하고 싶습니다.
  • 상위 항목에서 최신 버전의 하위 항목을 자주 사용합니다.
  • 도 상위 항목에서 하위 항목을 업데이트하려고 합니다.
  • 모항목 공개.
  • 하위 항목은 비공개 가능
  • 하위 프로젝트는 별도의 버전 관리를 진행한다.
  • 하위 항목을 하위 모듈로 처리합니다.
  • 세 번째 조건은 좋지 않을 수도 있지만 개인 프로젝트라 편의성을 고려해 이렇게 한 것이다.

    프로비저닝



    상위 항목은 Parent이고 하위 항목은 차일드입니다.
    창고의 구성, 특히 평범한 그림에서.
    하위 프로젝트는 공개하지 않아도 되기 때문에 그림 아래에서 시도해 보았지만 파일의 통합성이 이상해져 포기했다.
    상세한 상황은 뒤에 서술할 것이다.
    각 디렉토리 및 파일의 구성은 다음과 같습니다.
    Child
      child.txt
    
    Parent
      parent.txt
    
    디렉토리에는 텍스트 파일이 하나만 있습니다.
    child.txt는 다음과 같습니다.
    child
    
    parent.txt는 다음과 같습니다.
    parent
    
    그냥 써있어요.

    창고를 만들다


    Child 디렉토리로 이동하고 를 클릭합니다.
    # Child
    git init
    git add .
    git commit -m "first"
    git remote add origin <ChildRemoteURL>
    git push -u origin master
    
    를 입력하고 Parent 디렉토리로 이동합니다.
    # Parent
    git init
    git submodule add <ChildRemoteURL>
    git add .
    git commit -m "first"
    git remote add origin <ParentRemoteURL>
    git push -u origin master
    
    집행하다.
    이렇게 하면 Parent
    Parent
      .gitmodules
      parent.txt
      Child
        child.txt
    
    .
    기존 글에서
    git submodule init
    git submodule update
    
    '필요하다'고 쓰여 있지만 현 상태에서는 필요 없을 것 같다.

    하위 프로젝트 업데이트 가져오는 중


    다음은 하위 항목 업데이트를 시도해 봅시다.
    사전 준비로 차일드 창고, 차일드.txt 열기
    child
    1 on child
    
    업데이트하고 다음 작업을 수행합니다.
    # Child
    git add .
    git commit -m "1 on child"
    git push
    
    Parent 창고로 이동하여 다음 작업을 수행합니다.
    # Parent
    git submodule foreach git fetch
    git submodule foreach git merge origin/master
    
    파렌트 밑에 있는 차일드야.txt가 최신 버전으로 업데이트되었습니다.
    여기, 상술한 명령 대신
    # Parent
    git submodule update --remote --merge
    
    그래도 돼요.
    또한 업데이트만 하면 다음 명령도 가능합니다.
    # Parent
    git submodule update --remote
    
    git submodule update --remote에도 child가 있다.txt의 최신 버전을 수록할 수 있습니다.
    그러나 이 명령의 경우 파렌트 밑의 차일드Detached HEAD가 된다.
    Parent에서 서브 모듈을 업데이트하는 경우 Detached HEAD 시간이 조금 걸립니다.
    하위 모듈만 참고하면 이 명령은 충분합니다.
    지금까지의 작업은 로컬만 업데이트되었습니다.
    원격 업데이트를 위해 다음과 같은 조작을 실행합니다.
    # Parent
    git add .
    git commit -m "update child1"
    git push --recurse-submodules=check
    

    상위 항목에서 하위 항목 업데이트


    Parent 창고 아래에 있는 child입니다.txt를 다음과 같이 편집합니다.
    child
    1 on child
    2 on parent
    
    Parent 창고에서 다음을 수행합니다.
    # Parent
    git submodule foreach git add .
    git submodule foreach git commit -m "2 on parent"
    git submodule foreach git push
    
    원격 차일드가 업데이트됩니다.
    Parent의 원격 주소를 업데이트하려면 다음과 같이 하십시오.
    # Parent
    git add .
    git commit -m "update child 2"
    git push --recurse-submodules=check
    
    마지막 편지의 로컬 주소를 업데이트하려면 Child 창고를 사용하여 다음을 수행합니다.
    # Child
    git fetch
    git merge origin/master
    

    Detached HEAD에서 밀어냄

    git submodule update --remote를 사용하여 서브모듈을 업데이트하는 경우 Parent 산하의 Child는 Detached HEAD입니다.
    이런 상태에서,child.txt가 업데이트되면 Parent가 Child로 밀어넣기를 거부합니다.
    이 경우 아래 명령 등을 통해 압력을 가할 수 있다.
    # Parent
    git submodule foreach git status #HEADのリビジョン名(SHA-1)を調べる
    git submodule foreach git checkout master
    git submodule foreach git merge <HEADのSHA-1> #rebse
    git submodule foreach git push
    

    최후


    이상은 서브모듈 사용 방법의 개요입니다.
    이 글은 모든 창고의 루트 디렉터리를 사용했다git submodule foreach.
    하위 모듈의 루트 디렉토리로 이동하려면(위의 글은 Parent/Child) 없음submodule foreach 명령을 사용할 수 있습니다.
    여러 개의 서브 모듈을 사용하는 경우도 이곳에서 조작해야 하는 경우도 있다.

    명령하다

  • git push --recurse-submodules=check 소속된 하위 모듈을 누르지 않으면 메시지를 표시하고 누르는 것을 중단합니다.
  • 부하의 모든 하위 모듈에 대해 지정된 명령 수행
  • git submodule foreach등록된 제출 ID로 서브 모듈 업데이트
  • 서브모듈을 통한 원격 추적 브랜치 업데이트git submodule update 서브모듈
  • git submodule update --remote 하위 모듈의 현재 분기를 원격 추적 분기
  • 에 재설정
  • git submodule update --remote --rebase 서브모듈의 현재 브랜치를 원격 추적 브랜치와 결합
  • non-bare 창고로 밀어넣기


    하위 모듈과는 직접적인 관계가 없지만 그림에서 보여준 아래의 구조를 구성하지 않는 것이 좋으므로 여기에 기술합니다.
    기본값에서 non-bare 창고를 누르면 모두 거부됩니다.
    따라서 밀어넣기를 수락할 저장소git submodule update --remote --merge를 설정해야 합니다.
    설정하면 단추를 받아서 역사를 업데이트하지만 파일의 내용은 업데이트되지 않습니다.(없어 보인다.)
    왜 업데이트 안 해요?
  • 파일을 누르는 상태로 업데이트합니다.
  • 지금까지의 상태를 새로운 변경으로 해석하고 업데이트한다.즉 1을 삭제한 것이다.
    에 대한 업데이트 2개
  • 버튼 측면의 파일 열기
     a
     b
    
    받는 사람 파일 확인
     a
    
    누르면
     a
     b
    
    업데이트 후
     a
    
    를 새 업데이트로 덮어씁니다.
    결과적으로 파일의 내용은 업데이트되기 전까지 유지된다.

    좋은 웹페이지 즐겨찾기