developer tip

Git 서브 모듈의 대안?

copycodes 2020. 10. 17. 10:39
반응형

Git 서브 모듈의 대안?


나는 Git 서브 모듈을 사용하는 것이 내 개발 워크 플로에서 다소 번거 롭다고 생각합니다. Git 하위 트리와 Gitslave에 대해 들었습니다.

  • 여러 저장소 프로젝트를위한 더 많은 도구가 있으며 어떻게 비교합니까?
  • 이러한 도구를 Windows에서 실행할 수 있습니까?

귀하에게 가장 적합한 것은 귀하의 필요, 욕구 및 워크 플로우에 따라 다릅니다. 그들은 어떤 의미에서 반동 형적이며, 일부는 특정 작업에 대해 다른 것보다 훨씬 사용하기 쉽습니다.

  • gitslave수퍼 프로젝트와 같은 시간에 하위 프로젝트를 제어하고 개발할 때 유용하며 일반적으로 모든 저장소에 태그, 분기, 푸시, 풀 등을 동시에 지정하려는 경우에 유용합니다. gitslave는 내가 아는 창에서 테스트 된 적이 없습니다. perl이 필요합니다.

  • git-submodule 은 하위 프로젝트를 제어하지 않거나 하위 프로젝트가 변경 되더라도 특정 개정판에서 하위 프로젝트를 수정하려는 경우 더 좋습니다. git-submodule은 git의 표준 부분이므로 Windows에서 작동합니다.

  • git-subtree 는 git의 기본 제공 하위 트리 병합 전략에 대한 프런트 엔드를 제공합니다. 단일 저장소 "통합"git 히스토리를 선호 할 때 더 좋습니다. 하위 트리 병합 전략과 달리 다른 (디렉토리) 트리의 변경 사항을 원래 프로젝트로 다시 내보내는 것이 더 쉽지만 gitslave 또는 git-submodule을 사용하는 것처럼 자동이 아닙니다.

  • repo 는 이론적으로 gitslave와 유사하지만 내가 찾은 비 안드로이드 작업에 대해서는 잘 문서화되어 있지 않습니다. Google Android 개발 모델 전용이며 기본적으로 소수의 git 명령 만 지원하며 (임의의 명령을 실행할 수 있음) 제한된 기본 지원은 예를 들어 중앙 집중식 저장소를 지원하지 않습니다. 가지가 상당히 어려워 보입니다.

  • kitenet의 mr 는 여러 버전 제어 시스템을 사용중인 경우 사용하고 싶지만 가장 낮은 공통 분모 접근 방식으로 인해 대부분 git 전용 슈퍼 프로젝트에 제한됩니다. 임의의 명령을 실행하는 방법이 있지만 잘 통합되어 있지 않습니다.


저는 현재 타사 라이브러리와 관련된 것이 아니라 개발을 위해 하위 모듈을 사용합니다. 특히 병합 또는 리베이스 충돌의 원인 인 경우 하위 모듈을 사용하여 생활을 더 쉽게 만들 수있는 몇 가지 방법이 있습니다. ls-tree를 찾아 하위 모듈의 충돌에 관련된 2 개의 커밋을 가져옵니다. 이것은 아마도 사람들이 다루기 가장 어려운 부분 일 것입니다. 지금은 스크립팅으로 작업하기가 훨씬 쉬워집니다. 향후 버전의 Git은이를 처리하기위한 더 나은 기본 지원을 제공해야합니다.

도움이 되었기를 바랍니다.


다양한 언어로 종속성이있는 프로젝트에서 Git 하위 모듈을 사용할 때 비슷한 문제가 발생했습니다. 이를 처리하기 위해 우리는 Git 하위 모듈과 유사한 기능을 갖지만 성가신 워크 플로없이 선언적 버전 제어 Git 종속성을 제공하는 MDLR ( "Modular")이라는 도구를 구축하고 오픈 소스했습니다. GitHub 저장소 의 지침 / 다운로드를 통해이를 설치하고 종속성을 관리 할 수 ​​있습니다.


일부 사용 사례의 경우 다음 두 가지 간단한 접근 방식을 각각 좋아했습니다.

  • 중첩 된 저장소. 소프트웨어 프로젝트에 각 플러그인이 자체 하위 디렉토리에있는 플러그인 메커니즘이있는 경우 이러한 플러그인 디렉토리를 git 무시하고 로컬 파일 시스템에서 각 플러그인을 자체 git 저장소로 만드는 것이 좋습니다. 이렇게하면 모든 파일이 단일 디렉토리 트리를 형성하지만 다른 git 저장소에서 관리됩니다. git을 혼동하지 않습니다.

  • 패키지 별 저장소. 일종의 소스 코드 패키지 관리 시스템 (gem / bundler, npm, pear 등)을 사용하는 소프트웨어 프로젝트의 경우 재사용 된 코드를 별도의 git 저장소에 넣은 다음 소스 패키지를 만드는 것이 합리적 일 수 있습니다. 그런 다음 패키지 관리 도구를 사용하여 상위 프로젝트에 설치합니다. 상위 프로젝트의 git 저장소에는 필수 패키지 및 해당 버전에 대한 참조 만 포함되지만 이러한 패키지의 실제 코드는 다른 모든 패키지 및 외부 라이브러리에서도 수행되는 것처럼 git 무시됩니다. 위에서 제안한 중첩 된 저장소와 비교하여 이것은 설치할 패키지 버전을 지정할 수 있으므로보다 정교한 접근 방식입니다.

참고 URL : https://stackoverflow.com/questions/6500524/alternatives-to-git-submodules

반응형