Skip to main content

이 버전의 GitHub Enterprise는 다음 날짜에 중단되었습니다. 2024-03-26. 중요한 보안 문제에 대해서도 패치 릴리스가 이루어지지 않습니다. 더 뛰어난 성능, 향상된 보안, 새로운 기능을 위해 최신 버전의 GitHub Enterprise Server로 업그레이드합니다. 업그레이드에 대한 도움말은 GitHub Enterprise 지원에 문의하세요.

Git 하위 트리 병합 정보

단일 리포지토리 내에서 여러 프로젝트를 관리해야 하는 경우 하위 트리 병합을 사용하여 모든 참조를 처리할 수 있습니다.

Platform navigation

하위 트리 병합 정보

일반적으로 하위 트리 병합은 리포지토리 내에 리포지토리를 포함하는 데 사용됩니다. “하위 리포지토리”는 주 리포지토리의 폴더에 저장됩니다.

하위 트리 병합을 설명하는 가장 좋은 방법은 예를 들어 보여 주는 것입니다. 다음을 수행합니다.

  • 프로젝트를 나타내는 test라는 이름의 빈 리포지토리를 호출합니다.
  • 다른 리포지토리를 Spoon-Knife라는 하위 트리로 병합합니다.
  • test 프로젝트는 동일한 리포지토리의 일부인 것처럼 하위 프로젝트를 사용합니다.
  • 업데이트를 Spoon-Knife에서 test 프로젝트로 페치합니다.

하위 트리 병합에 대한 빈 리포지토리 설정

  1. Terminal(터미널)Terminal(터미널)Git Bash를 엽니다.

  2. 새 디렉터리를 만들고 해당 디렉터리로 이동합니다.

    mkdir test
    cd test
    
  3. 새 Git 리포지토리를 초기화합니다.

    $ git init
    > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
    
  4. 새 파일을 만들고 커밋합니다.

    $ touch .gitignore
    $ git add .gitignore
    $ git commit -m "initial commit"
    > [main (root-commit) 3146c2a] initial commit
    >  0 files changed, 0 insertions(+), 0 deletions(-)
    >  create mode 100644 .gitignore
    

하위 트리로 새 리포지토리 추가

  1. 관심 있는 별도의 프로젝트를 가리키는 새 원격 URL을 추가합니다.

    $ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git
    > Updating spoon-knife
    > warning: no common commits
    > remote: Counting objects: 1732, done.
    > remote: Compressing objects: 100% (750/750), done.
    > remote: Total 1732 (delta 1086), reused 1558 (delta 967)
    > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done.
    > Resolving deltas: 100% (1086/1086), done.
    > From https://github.com/octocat/Spoon-Knife
    >  * [new branch]      main     -> Spoon-Knife/main
    
  2. Spoon-Knife 프로젝트를 로컬 Git 프로젝트에 병합합니다. 이렇게 하면 파일이 로컬에서 변경되지는 않지만 Git은 다음 단계를 준비합니다.

    Git 2.9 이상을 사용하는 경우:

    $ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main
    > Automatic merge went well; stopped before committing as requested
    

    Git 2.8 이하를 사용하는 경우:

    $ git merge -s ours --no-commit spoon-knife/main
    > Automatic merge went well; stopped before committing as requested
    
  3. spoon-knife라는 새 디렉터리를 만들고 프로젝트의 Git 기록을 Spoon-Knife 프로젝트에 복사합니다.

    $ git read-tree --prefix=spoon-knife/ -u spoon-knife/main
    > fatal: refusing to merge unrelated histories
    
  4. 변경 내용을 커밋하여 안전하게 유지합니다.

    $ git commit -m "Subtree merged in spoon-knife"
    > [main fe0ca25] Subtree merged in spoon-knife
    

하위 프로젝트를 하나만 추가했더라도 여러 하위 프로젝트를 Git 리포지토리에 통합할 수 있습니다.

: 나중에 리포지토리의 새 복제본을 만드는 경우 추가한 원격이 생성되지는 않습니다. git remote add 명령을 사용하여 다시 추가해야 합니다.

업데이트 및 변경 내용과 동기화

하위 프로젝트가 추가되면 업스트림 변경 내용과 자동으로 동기화되지 않습니다. 다음 명령을 사용하여 하위 프로젝트를 업데이트해야 합니다.

git pull -s subtree REMOTE-NAME BRANCH-NAME

위의 예에서는 다음과 같습니다.

git pull -s subtree spoon-knife main

추가 참고 자료