programing

SVN: Git에 해당하는 외부?

css3 2023. 7. 9. 12:35

SVN: Git에 해당하는 외부?

저는 svn:externals를 사용하는 다른 SVN 저장소에서 두 개의 SVN 프로젝트를 사용하고 있습니다.

Git에서 어떻게 동일한 저장소 레이아웃 구조를 가질 수 있습니까?

Git는 svn과 유사하지만 정확하게 동일하지는 않은 두 가지 접근 방식이 있습니다.

  • 하위 트리 병합은 외부 프로젝트의 코드를 저장소 내의 별도 하위 디렉터리에 삽입합니다.이것은 저장소가 체크아웃되거나 복제될 때 자동으로 포함되기 때문에 다른 사용자가 설정하기에 매우 쉽습니다.이렇게 하면 프로젝트에 종속성을 포함하는 편리한 방법이 될 수 있습니다.
    다른 프로젝트에서 변경사항을 끌어오기는 쉽지만 변경사항을 다시 제출하는 것은 복잡합니다.그리고 다른 프로젝트가 코드에서 병합되어야 하는 경우 프로젝트 기록이 병합되고 두 프로젝트가 효과적으로 하나가 됩니다.

  • git 하위 모듈(수동)은 svn: 외부와 마찬가지로 다른 프로젝트의 저장소에 있는 특정 커밋에 연결됩니다.-r논쟁.하위 모듈은 설정하기 쉽지만 모든 사용자가 체크아웃(또는 클론)에 자동으로 포함되지 않는 하위 모듈을 관리해야 합니다.
    다른 프로젝트에 변경사항을 다시 제출하는 것은 쉽지만, 보고서가 변경된 경우 문제가 발생할 수 있습니다.따라서 일반적으로 개발 중인 프로젝트에 변경사항을 다시 제출하는 것은 적절하지 않습니다.

"Git submodule new version update"에서 언급했듯이 Git 1.8.2 하위 모듈에서도 동일한 SVN 외부 기능을 달성할 수 있습니다.

git config -f .gitmodules submodule.<path>.branch <branch>

이는 하위 모듈이 분기를 따라가기에 충분합니다(하위 모듈 업스트림 레포의 원격 분기에 대한 최신 커밋에서처럼).필요한 것은 다음과 같습니다.

git submodule update --remote

그러면 하위 모듈이 업데이트됩니다.

자세한 내용은 "최신 추적"에 git submodule나와 있습니다.

기존 하위 모듈을 하나의 분기 추적으로 변환하려면 "하위 모듈 Git: 분기/태그를 지정하십시오."

나는 gil(git links) 도구의 저자입니다.

나는 그 문제에 대한 대안적인 해결책을 가지고 있습니다 - gil (git links) 도구

복잡한 Git 저장소 종속성을 설명하고 관리할 수 있습니다.

또한 Git 재귀 하위 모듈 의존성 문제에 대한 해결책을 제공합니다.

다음과 같은 프로젝트 종속성이 있다고 가정합니다. 샘플 git 저장소 종속성 그래프

그런 다음 정의할 수 있습니다..gitlinks리포지토리 관계 설명이 있는 파일:

# Projects
CppBenchmark CppBenchmark https://github.com/chronoxor/CppBenchmark.git master
CppCommon CppCommon https://github.com/chronoxor/CppCommon.git master
CppLogging CppLogging https://github.com/chronoxor/CppLogging.git master

# Modules
Catch2 modules/Catch2 https://github.com/catchorg/Catch2.git master
cpp-optparse modules/cpp-optparse https://github.com/weisslj/cpp-optparse.git master
fmt modules/fmt https://github.com/fmtlib/fmt.git master
HdrHistogram modules/HdrHistogram https://github.com/HdrHistogram/HdrHistogram_c.git master
zlib modules/zlib https://github.com/madler/zlib.git master

# Scripts
build scripts/build https://github.com/chronoxor/CppBuildScripts.git master
cmake scripts/cmake https://github.com/chronoxor/CppCMakeScripts.git master

각 행은 다음 형식으로 깃 링크를 설명합니다.

  1. 리포지토리의 고유 이름
  2. 저장소의 상대 경로(.gitlinks 파일 경로에서 시작)
  3. git clone 명령에 사용될 git 저장소 체크아웃할 저장소 분기
  4. #로 시작하는 빈 줄 또는 줄은 구문 분석되지 않습니다(댓글로 처리됨).

마지막으로 루트 샘플 저장소를 업데이트해야 합니다.

# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link

# The same result with a single command
gil update

그 결과 필요한 모든 프로젝트를 복제하고 적절한 방식으로 서로 연결할 수 있습니다.

일부 리포지토리의 모든 변경 사항을 하위 연결 리포지토리의 모든 변경 사항과 함께 커밋하려는 경우 단일 명령으로 이를 수행할 수 있습니다.

gil commit -a -m "Some big update"

풀, 푸시 명령은 다음과 같은 방식으로 작동합니다.

gil pull
gil push

Gil(git links) 도구는 다음 명령을 지원합니다.

usage: gil command arguments
Supported commands:
    help - show this help
    context - command will show the current git link context of the current directory
    clone - clone all repositories that are missed in the current context
    link - link all repositories that are missed in the current context
    update - clone and link in a single operation
    pull - pull all repositories in the current directory
    push - push all repositories in the current directory
    commit - commit all repositories in the current directory

git 재귀 하위 모듈 종속성 문제에 대해 자세히 알아봅니다.

언급URL : https://stackoverflow.com/questions/571232/svnexternals-equivalent-in-git