2013-08-06 3 views
5

우리는 다른 자식 저장소에있는 코드에 의존하는 자식 저장소가 있습니다. 우리는이 관계를 표현하고 지원 코드가 사용자 디렉토리 구조 내의 표준 위치에 있는지 확인하기 위해 서브 모듈을 사용합니다. 지원 코드를 업데이트하는 것만으로는 충분 간단하다 : 강제로 git submodules를 업데이트 할 수 있습니까?

  • 커밋

    • 이 서브 모듈을 변경 한 것이
    • 푸시 그것을
    • 이 서브 모듈의 변경을 커밋 주요 저장소로
    • CD
    • 그것을 밀어 넣으십시오

    문제는 상대방에 온다. 경우 새로운에서 (

    • 자식 풀 (주 저장소를 갱신)
    • 자식 서브 모듈의 초기화 : 다른 개발자가 코드의 완전하고 일관된를 얻을 수에 대한 변화의 이런 종류 후, 그들은 세 가지 명령을 실행해야 서브 모듈은) 서브 모듈은 포함되지 않는, 특히 우리의 다른 저장소 모두에 있기 때문에,이 모든 작업을 수행하는 개발자를 양성하기 어려운 입증

  • 자식 서브 모듈 업데이트 (서브 모듈을 업데이트)를 추가했다 당겨서 충분하다. 그 결과 개발자들은 때때로 서브 모듈의 구식 버전을 사용하는 코드로 작업하기 때문에 가짜 문제가 발생하여 추적하는 데 시간이 오래 걸릴 수 있습니다. 3 가지 명령을 모두 수행하고 "Use this!"라고 주장하는 셸 스크립트를 작성하는 것 이외에 어떤 방식 으로든이 방법을 자동으로 만들 수 있습니까?

  • 답변

    4

    당신은 시도하고 귀하의 동료에게 물어 수 :

    git config --global fetch.recurseSubmodules on-demand 
    

    git config man page에서 :이 옵션 중 하나 부울 값 또는 온으로 설정할 수 있습니다

    fetch.recurseSubmodules 수요. 부울로 설정

    • 페치 true로 설정하면 무조건 서브 모듈로 재귀 당겨 또는 false로 설정하면 모든 재귀하지의 동작을 변경합니다.
    • 주문형 (기본값)으로 설정하면, 수퍼 프로젝트가 하위 모듈의 참조를 업데이트하는 커밋을 검색 할 때 fetch 및 pull은 채워진 하위 모듈로만 반복됩니다.

    다른 대안은 하나 더 복잡한 명령을 수행하도록 요청하는 것입니다 :

    git pull --recurse-submodules=on-demand 
    

    위에서 언급 한 git config 설정은 개발자가 간단한 git pull을 수행 할 수있는 장점이있다.

    +0

    감사 :

    #!/bin/sh git pull git submodule init git submodule update 

    이 자식 별칭을 추가

    스크립트를 작성합니다. 이것은 훌륭합니다. –

    0

    두 가지 해결책을 생각해 볼 수 있습니다.

    #in ~/.gitconfig 
    [alias] update-all = !git pull && git submodule init && git submodule update 
    
    +0

    @VonC는 훨씬 뛰어난 답변을 제공합니다. 나는 그것이 당신이 찾고있는 것이라고 상상합니다.^_ ^ –

    관련 문제