스택큐힙리스트

어떻게 얕은 복제에서 효율적으로 git fetch를 할까요? 본문

카테고리 없음

어떻게 얕은 복제에서 효율적으로 git fetch를 할까요?

스택큐힙리스트 2023. 11. 26. 18:47
반응형

우리는 git을 사용하여 운영 체제를 배포하고 최신 상태로 유지합니다. 우리는 전체 저장소를 배포할 수 없습니다. 왜냐하면 너무 커서 (>2GB), 그래서 우리는 얕은 복제 (~300M)를 사용하고 있습니다. 그러나 최근에 얕은 복제에서 가져올 때 전체 >2GB 저장소를 비효율적으로 가져옵니다. 이것은 배포에 대한 대역폭의 낭비로 인해 지속적으로 처리할 수 없습니다.


git 문서에는 얕은 저장소에서 가져올 수 없다고 나와 있지만, 엄밀히 말하면 그것이 사실이 아닙니다. git clone --depth 1을 통해 변경된 내용 만 가져올 수 있도록 우회 방법이 있을까요? 또는 업데이트를 수행하는 데 필요한 git의 모든 부분을 가지면서 배포 크기를 가능한 한 작게 유지하기위한 다른 전략이 있을까요?

효율적으로 업그레이드할 수 있는지 확인하기 위해 --depth 20에서 복제시도를 했지만 실패했습니다. 또한 http://git-scm.com/docs/git-bundle도 살펴보았지만 거대한 번들을 생성하는 것 같습니다.

답변 1

--depthgit fetch 옵션입니다. 문서는 git clone이 fetch를 수행한다는 것을 잘 강조하지 않습니다.


fetch를 수행할 때, 두 개의 저장소는 리모트의 헤드에서 시작하여 검색하여 가져온 ref 기록에서 가장 최근에 공유된 커밋을 찾습니다. 그리고 가장 최근에 공유된 커밋과 새로 가져온 커밋 사이에 있는 새로운 커밋들만을 완성하기 위해 누락된 객체들을 채웁니다.


--depth=1 옵션을 사용하면 브랜치의 끝 부분만을 가져오고 이전 기록은 가져오지 않습니다. 위의 절차에 따라 새로운 기록을 가져온 후, 기존에 가져온 커밋이 새로 가져온 기록에 없다면, fetch는 이전에 가져온 모든 커밋을 다시 가져올 것입니다 - 단, --depth로 fetch를 제한하지 않는 한.

고객님이 한 저장소에 대해 depth=1로 풀기(fetch)를 했고, 다른 저장소의 URL로 전환했습니다. 이 새로운 저장소의 참조(refs)에서 한 개 이상의 긴 조상 경로가 현재 저장소에 있는 어떤 커밋과도 공유되지 않는 것으로 보입니다. 이를 조사하는 것이 좋을 수도 있지만, 그렇지 않은 경우에는 특별한 이유가 없다면 고객님은 간단히 --depth=1을 모든 풀(fetch)에 적용할 수 있습니다.

답변 2

얕은 클론으로부터 효율적으로 Git Fetch 하는 방법
Git은 분산 버전 관리 시스템으로, 다양한 개발자들이 협업하고 코드를 효율적으로 관리할 수 있게 도와줍니다. Git을 사용하는 동안 우리는 원격 저장소의 최신 변경 사항을 내려받고 동기화하는 과정이 필요하게 될 수 있습니다. 이러한 경우 Git Fetch 명령을 사용하여 원격 변경 사항을 확인하고 가져올 수 있습니다. 그러나 대용량 저장소의 경우, 모든 변경 이력을 받아오는 것은 시간과 리소스의 낭비가 될 수 있습니다. 이런 상황에서는 얕은 클론(shallow clone)을 사용하여 효율적으로 Fetch하는 방법을 알아보겠습니다.
얕은 클론은 원격 저장소의 일부만을 내려받는 것이며, 모든 변경 이력을 가져오는 것이 아니라 최신 변경 사항만 가져오는 방법입니다. 이를 통해 효율적인 네트워크 사용과 시간 단축을 달성할 수 있습니다.
Git Fetch를 실행하기 전에 먼저 얕은 클론을 생성해야 합니다. 만약 이미 일반적인 클론을 수행한 경우라면, 동일한 저장소 디렉토리에서 다음 Git 명령을 입력하여 얕은 클론을 만들 수 있습니다:
```
git pull --depth=1
```
이 명령은 최신 변경 이력 한 개만을 가져와서 얕은 클론을 만들게 됩니다. 그러나 얕은 클론은 변경 이력의 일부만을 포함하므로, 이후의 커밋과 변경 사항을 확인하기 위해서는 진행한 커밋 히스토리에 대한 추가적인 다운로드가 필요합니다.
얕은 클론 이후, 필요한 경우 추가로 변경 사항을 내려받기 위해 Git Fetch를 실행할 수 있습니다:
```
git fetch --deepen=1
```
이 명령은 원격 저장소의 최신 변경 사항 중 하나만을 추가적으로 다운로드하여 얕은 클론을 보완합니다. 이렇게 함으로써 최신 변경 사항만을 가져와 신속하게 동기화할 수 있습니다.
얕은 클론과 Git Fetch를 통해 효율적으로 변경 사항을 가져오는 방법을 알아보았습니다. 이 방법을 사용하면 대용량 저장소에서도 Git을 효율적으로 활용할 수 있습니다. 커밋 히스토리 전체를 갖고 있을 필요 없이 필요한 최신 변경 사항만을 가져와 작업할 수 있으므로, 네트워크 사용량과 시간을 줄일 수 있습니다. Git의 이러한 기능을 적극 활용하여 개발 작업을 효율적으로 수행해보세요.

반응형
Comments