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) 도구
복잡한 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
각 행은 다음 형식으로 깃 링크를 설명합니다.
- 리포지토리의 고유 이름
- 저장소의 상대 경로(.gitlinks 파일 경로에서 시작)
- git clone 명령에 사용될 git 저장소 체크아웃할 저장소 분기
- #로 시작하는 빈 줄 또는 줄은 구문 분석되지 않습니다(댓글로 처리됨).
마지막으로 루트 샘플 저장소를 업데이트해야 합니다.
# 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
'programing' 카테고리의 다른 글
Excel 셀 내부의 숫자를 0으로 채우는 방법 (0) | 2023.07.09 |
---|---|
OS.walk의 디렉터리 제외 (0) | 2023.07.09 |
Oracle에서 명명된 제약 조건의 정의를 찾는 방법은 무엇입니까? (0) | 2023.07.09 |
엔티티 프레임워크 코어 - 테이크(1), 싱글(), 퍼스트()...Oracle 공급자와 함께 작동하지 않음(ORA-00933: SQL 명령이 제대로 종료되지 않음) (0) | 2023.07.09 |
루비는 string.starts with("abc") 메서드가 내장되어 있습니까? (0) | 2023.07.09 |