Git에서 단일 개정판 받기


14

전체 Git 개정 내역을 보유하면 개발 프로세스의 일부로 많은 이점이 있습니다.

그러나 우리의 제품은 소스 코드이며 컴파일 또는 처리가 필요없는 스크립트 언어를 사용하고 있으며, Git 히스토리는 배치에 부담이됩니다.이 예에서는 변경이있을 때마다 깨끗한 가상 환경을 배치합니다. 단일 기계.

히스토리의 양을 줄이는 몇 가지 방법이 있습니다 (예 : 효율성이 분기에 얼마나 깊은 지에 따라 달라지는 얕은 클론, 클론 대신 가져 오기를 수행하지만 여전히 개정에서 히스토리를 가져 오거나 전체를 가져 오는 방법) repo를 한 번 잡아 당기면 필요할 때 당기지 만 디스크 공간 측면에서 낭비이며 신뢰성이 떨어집니다.

역사없이 Git에서 단일 개정판을 얻는 방법이 있습니까?


답변:


16

얕은 클론

실제로 다음을 사용하여 Git에서 얕은 복제본을 얻을 수 있습니다.

git clone --depth=1 <url>

그래도 저장소를 복제하고 .git크기가 더 작은 개체 만 있는 폴더를 만듭니다 (총 파일 크기와 기록 크기에 따라 다름).

힘내 아카이브

git-archive 를 사용하여 저장소의 아카이브 를 추출 할 수도 있습니다 .

명명 된 트리의 트리 구조를 포함하는 지정된 형식의 아카이브를 작성하여 표준 출력에 기록합니다. 지정된 경우 아카이브의 파일 이름 앞에 붙습니다.

에서 는 예를 들어 보여줍니다

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

릴리스 의 압축 된 tarball을 작성하십시오 .

호스팅 된 Git, 아카이브 API

GitHub에서 리포지토리를 호스팅하는 경우 해당 아카이브 API를 사용할 수 있습니다 .

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.org의 기능은 다음과 같습니다.

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip


7ochem, 어쩌면 gzip을 명령 할 필요가 GZIP -c .... 할 수
로미오 Ninov

11

자식 저장소를 배포하지 마십시오. 실제 배포 방법론을 개발하십시오. 배포 된 스크립트의 아카이브 (= 필요한 파일 만 포함하여 아티팩트 빌드)를 손상시키는 것만 큼 간단합니다.

소스 리포지토리의 팁을 얕게 복제하더라도 배포 된 환경에서 단위 테스트, 설명서, 보푸라기 프로파일 및 기타 지원 ephemera가 필요하지 않을 수 있습니다.

참고 : 실제로 "빌드"단계가없는 스크립트 언어의 저장소의 경우 아티팩트를 릴리스하는 간단한 방법은 tar 또는 rpm과 같은 아카이브에 패키지를 패키지하는 것입니다. 그런 다음 "배포"하려면 아카이브를 압축 해제하거나 rpm을 설치하십시오. 이렇게하면 배포 체인에서 git 툴링이 필요하지 않습니다 (모든 prod 서버에 그러한 개발 툴이있는 것은 아닙니다).


실제로 "빌드"단계가없는 스크립트 언어의 리포지토리에 대해 답변을 질문하거나 도전하는 것도 괜찮습니다. 즉, 아티팩트를 릴리스하는 간단한 방법은 패키지입니다. tar 또는 rpm과 같은 아카이브에 있습니다. 그런 다음 "배포"하려면 아카이브를 압축 해제하거나 rpm을 설치하십시오. 이렇게하면 배포 체인에서 git 툴링이 필요하지 않습니다 (일부 제품 서버에 이러한 개발 툴이있는
것은 아님

1
@ Pierre.Vriens 그렇습니다. 아카이브를 taring하는 것, 즉 배포 할 파일에 필요한 파일 만있는 아티팩트를 빌드 할 때 제안되는 내용이 없습니다. 그것은 품질 답변이 아니라는 점에 동의 하며이 시점을 연장해야합니다. 우리는 비공개 베타 버전이며 답변은 명시
적이 지

그런 다음 이것이 수용 가능한 답변보다 더 많은 것을 가져 오는 것을 보지 못합니다. 아카이브에 적합하다면, 중복됩니다. iMHo
Tensibai

1
답변의 편집 내용을 확인하십시오 (재미있는 의견을 통합했습니다). 물론 개선 / 재 작업이 가능하거나 편집 내용이 마음에 들지 않으면 롤백하십시오. BTW : 귀하의 의견은 (= 내가 추가 참고) 나 "? 정말 간단 우리가 Z와 함께 ... ZOS에서 일을 얻을 방법을 다시 샘플처럼 생각하게 다운 타임 ...". 비슷한 의견을 통해 더 많은 질문과 답변을 질문 할 때가되었다고 생각합니다 ... 너무 많이 도전하지 마십시오 ...
Pierre.Vriens

나는 이것이 완전한 또는 모델 답변이라고 생각하지는 않지만 다른 누군가가 방에있는 코끼리를 다루는 것을 보지 못했습니다 : git을 사용하여 프로젝트를 "배치"하면 "나쁜 시간이 있습니다" ;)
RubyTuesdayDONO

6

질문 Git에서 역사없이 단일 개정판을 얻는 방법이 있습니까?

저장소를 얻으려면 '수정'이 없기 때문에 방법이 없습니다. Git 저장소 커밋 (이전 상태에서 변경됨)
특정 시점에 리포지토리를 원할 경우 현재 커밋을 가져와 모든 조상이거나 커밋에서 변경된 내용 만 가져옵니다.

혼동을 피하기 위해 : 얕은 복제는 필요한 이력을 얻은 다음 여유 공간으로 잘라내지만 여전히 이력으로 만들어집니다.

솔루션의 경우 @ 7ochem 답변이 해당 내용을 다룹니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.