Git의 특정 하위 디렉터리 복제하기

Git의 특정 하위 디렉터리 복제하기
Git configuration

하위 디렉터리 복제: 빠른 개요

Git으로 버전 제어를 관리할 때 다양한 시나리오에는 SVN과 같은 이전 시스템과 비교하여 다른 접근 방식이 필요합니다. 특히 저장소의 하위 디렉터리를 선택적으로 복제하는 기능은 다양한 개발 작업 흐름에 매우 중요할 수 있습니다. 이 기능은 프로젝트 구조가 복잡하거나 저장소의 일부만 사용하여 작업해야 하는 경우 특히 유용합니다.

SVN에서는 저장소의 하위 디렉터리를 다른 위치로 체크아웃하는 것이 간단했습니다. 그러나 Git은 저장소 데이터를 다르게 처리하므로 'svn co'와 같은 SVN 명령에 직접적으로 대응하는 명령이 덜 명확해집니다. 이 가이드에서는 Git이 Sparse Checkout 및 기타 전략을 사용하여 비슷한 결과를 얻을 수 있는 방법을 살펴봅니다.

명령 설명
git init 필요한 모든 메타데이터가 포함된 초기 .git 디렉터리를 생성하여 새 Git 저장소를 초기화합니다.
git remote add -f Git 구성에 새 원격 저장소를 추가하고 즉시 가져옵니다.
git config core.sparseCheckout true 저장소의 부분 체크아웃을 허용하는 스파스 체크아웃 기능을 활성화합니다.
echo "finisht/*" >> .git/info/sparse-checkout 체크아웃할 하위 디렉터리를 정의하기 위해 sparse-checkout 구성 파일에 'finisht/*' 경로를 추가합니다.
git pull origin master 지정된 하위 디렉터리만 검색하는 스파스 체크아웃 규칙을 사용하여 '원본' 원격에서 '마스터' 분기를 가져옵니다.
git sparse-checkout set 작업 디렉터리 내에 채워져야 하는 경로를 구성합니다.

Git Sparse Checkout 및 스크립트 워크플로 설명

제공된 스크립트는 이전에 SVN에서 사용할 수 있었던 동작을 모방하여 Git 저장소의 특정 하위 디렉터리를 복제하도록 설계되었습니다. 저장소의 특정 부분만 필요한 환경에서는 가져오는 데이터를 크게 줄여 효율성을 높일 수 있습니다. 첫 번째 스크립트는 다음의 조합을 사용합니다. git init, git remote add -f, 그리고 git config core.sparseCheckout true 새 Git 저장소를 초기화하고, 원격 소스를 추가하고, 저장소 콘텐츠를 선택적으로 복제할 수 있는 스파스 체크아웃을 활성화합니다.

그 후 'finisht/*'와 같은 경로가 다음을 통해 희소 체크아웃 구성에 추가됩니다. 명령을 실행하여 Git이 해당 특정 디렉터리만 가져오도록 지시합니다. 명령 git pull origin master 원격 저장소의 마스터 브랜치에서 구성된 하위 디렉터리만 가져오는 데 사용됩니다. 두 번째 스크립트는 git sparse-checkout set 명령은 디렉토리 경로를 직접 지정하는 것을 단순화하고 체크아웃된 항목에 대한 명확성과 제어를 향상시키는 최신 Git 버전에 도입된 더욱 간소화된 접근 방식입니다.

Git 리포지토리에서 복제를 위한 하위 디렉터리 격리

Bash 및 Git 명령 사용

mkdir specific-dir-clone
cd specific-dir-clone
git init
git remote add -f origin https://your-repository-url.git
git config core.sparseCheckout true
echo "finisht/*" >> .git/info/sparse-checkout
git pull origin master
cd ..
mkdir another-specific-dir
cd another-specific-dir
git init
git remote add -f origin https://your-repository-url.git
git config core.sparseCheckout true
echo "static/*" >> .git/info/sparse-checkout
git pull origin master

Git의 하위 디렉터리에 대한 Sparse Checkout 구현

Git Sparse-Checkout 기능 사용

git clone --filter=blob:none --no-checkout https://your-repository-url.git repo-dir
cd repo-dir
git sparse-checkout init --cone
git sparse-checkout set finisht
git checkout
cd ..
git clone --filter=blob:none --no-checkout https://your-repository-url.git another-repo-dir
cd another-repo-dir
git sparse-checkout init --cone
git sparse-checkout set static
git checkout

디렉터리별 작업을 위한 Git의 고급 기술

Git의 하위 디렉터리를 복제하는 기본 방법 외에도 개발자가 많은 프로젝트가 포함된 대규모 저장소를 관리하는 방법을 더욱 최적화할 수 있는 고급 기술이 있습니다. 그러한 방법 중 하나는 git submodule. 이 명령을 사용하면 Git 저장소가 다른 Git 저장소를 하위 모듈로 포함할 수 있습니다. 하위 모듈은 상위 저장소와 함께 복제될 수 있지만 별도로 유지 관리됩니다. 이는 저장소의 여러 부분을 분리해야 하지만 여전히 중앙 저장소에서 제어해야 하는 경우에 특히 유용합니다.

또 다른 고급 기능은 git filter-branch 와 결합 git subtree. 이 조합을 사용하면 기록을 보존하면서 하위 디렉터리를 별도의 새로운 Git 저장소로 추출할 수 있습니다. 이는 프로젝트가 자체 엔터티로 성장하고 역사적 맥락을 잃지 않고 기본 저장소에서 분리되어야 하는 상황에 이상적입니다.

필수 Git 하위 디렉터리 관리 FAQ

  1. Git 리포지토리에서 디렉터리 하나만 복제할 수 있나요?
  2. 예, 다음과 같은 명령을 사용합니다. git sparse-checkout 또는 해당 디렉토리의 내용으로 별도의 분기를 생성할 수도 있습니다.
  3. Git의 스파스 체크아웃이란 무엇입니까?
  4. 스파스 체크아웃을 사용하면 전체 프로젝트를 다운로드하지 않고도 저장소에서 특정 폴더나 파일을 선택적으로 체크아웃할 수 있습니다.
  5. 하위 디렉터리에 대한 하위 모듈을 어떻게 사용합니까?
  6. 다음을 사용하여 하위 모듈을 추가합니다. git submodule add 원하는 저장소와 경로를 가리킵니다.
  7. 하위 디렉터리를 새 저장소로 분리할 수 있나요?
  8. 예, 사용 중입니다 git subtree split 하위 디렉터리의 기록만으로 새 분기를 생성한 다음 복제할 수 있습니다.
  9. git 하위 모듈과 git 하위 트리의 차이점은 무엇입니까?
  10. 하위 모듈은 별도의 저장소를 종속성으로 프로젝트에 연결하는 반면, 하위 트리는 다시 분할할 수 있는 기능을 통해 다른 저장소를 프로젝트에 병합합니다.

Git의 디렉터리별 복제에 대한 최종 생각

Git은 개별 디렉터리에 대한 SVN의 체크아웃과 동일한 직접 명령을 제공하지 않지만 스파스 체크아웃, 하위 모듈 및 하위 트리 전략을 사용하면 강력한 대안을 제공합니다. 이러한 방법은 이전 버전 제어 시스템이 제공하는 기능을 복제할 뿐만 아니라 종종 향상시킵니다. SVN에서 전환하거나 Git 내에서 복잡한 프로젝트를 관리하는 개발자의 경우 이러한 기술을 익히면 개발 프로세스를 크게 간소화할 수 있습니다.