.git 디렉토리가없는 Git 복제


144

git복제를 수행 할 때 전달할 플래그가 .git있습니까 (예 : 디렉토리를 복제하지 마십시오) ? 그렇지 않은 경우 .git복제 후 디렉토리 를 삭제하는 플래그 는 어떻습니까?


41
이 질문은 하지 의 속는 ( "SVN 수출"와 같은)는 "자식 수출"을 수행하는 방법 . 이 질문하는 방법에 대한 요구 복제 A (원격) 저장소를 하지 않고.git 디렉토리. 주장 된 속임수는 이미 디렉토리 가있는 기존 저장소 를 내보내는 방법을 묻습니다 .git.
mknaf

3
동의하다. 당신은 할 수없는 git archive은 "중복 가능성"솔루션은 원격 저장소라고한다.
Vladislav Rastrusny

답변:


214

사용하다

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
  • 깊이 옵션을 사용하면 해당 리포지토리를 얻을 수있는 최소 기록을 복사해야합니다.
  • 분기 옵션은 선택 사항이며 지정하지 않으면 마스터가됩니다.
  • 두 번째 줄은 dirformynewrepo더 이상 Git 저장소가 아닌 디렉토리를 만듭니다 .
  • 재귀 하위 모듈 복제를 수행하는 경우 깊이 및 분기 매개 변수가 하위 모듈에 적용되지 않습니다.

19
무슨 !$/.git뜻입니까?
Jürgen Paul

15
관심있는 사람들에게는 Bash와 zsh 의 역사 확장 기능의 일부인 단어 지정자 중 하나입니다 .
Rufflewind

리포지토리의 모든 지점의 깊이 = 1을 얻는 방법이 있습니까? 마스터 또는 지정된 지점이 아닌
Gayan Pathirage

2
--no-single-branch 옵션을 사용하면됩니다. --depth는 --single-branch를 의미하므로 --no-single-branch를 사용하여 암시하지 않을 수 있습니다. (git clone 매뉴얼 페이지
Robert Stoddard

8
!$이 예에서는 기술적으로 정확하지만을 사용 하면 구문을 인식하지 못하는 사람들이 실제 질문에 대한 답변을 이해하는 데 도움이되지 않습니다. 또한 첫 번째 명령 바로 다음과 동일한 쉘 내에서 두 번째 명령에 의존합니다. 누군가 암시 적 요구 사항을 생략하면 다른 것을 완전히 삭제할 수 있습니다. 따라서 두 명령 간의 연결을 훨씬 명확하게 dirformynewrepo하기 위해 이름 을 rm명령 의 인수로 명시 적으로 지정하여 답을 향상시킬 수 있다고 제안합니다 .
davidA

29

파일 만 원하므로 파일을 git repo로 취급하지 않아도됩니다.

rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .

이것은 로컬 경로 및 원격 ssh / rsync 경로에서만 작동하며 원격 서버가 git : // 또는 https : // 액세스 만 제공하는 경우 작동하지 않을 수 있습니다.


.gitignore를 고려하지 않을 것입니까?
JJ Roman

itub가 맞습니다. 이것은 작업 트리를 복사하는 것입니다. git checkout이 올바르게 수행되었지만 더 이상 유효하지 않습니다.
Sylvain

서버가 git : // 액세스만을 제공한다면 어떻게해야합니까?
Rainb

3

또는 Node.js가 설치되어 있으면 다음 명령을 사용할 수 있습니다.

npx degit GIT_REPO

npx노드와 함께 제공되며 이진 노드 기반 패키지를 먼저 설치하지 않고 실행할 수 있습니다 (또는 degit먼저을 사용하여 전역으로 설치할 수 있음 npm i -g degit).

DegitSvelte and Rollup을 만든 Rich Harris가 만든 도구로, git 폴더를 유지하지 않고 리포지토리를 복제하여 새 프로젝트를 빠르게 만드는 데 사용합니다. 그러나 그것은 또한 어떤 repo를 한 번 복제하는데 사용될 수 있습니다 ...


-1

당신은 항상 할 수 있습니다

git clone git://repo.org/fossproject.git && rm -rf fossproject/.git

44
모든 것을 다운로드하고 나중에 디렉토리를 삭제 하시겠습니까? 예를 들어 emacs는 .git에서 1GB의 95 %를 차지합니다. 따라서 --depth = 1이 명확하게 해결책입니다.
RParadox

1
내가 깊이 = 1 수행 할 때 난 여전히 .git 폴더를 볼 수
Aryeh ARMON

@AryehArmon 물론입니다. --depth를 사용한다고해서 .git이 생성되는 것을 막을 수는 없으며 단지 .git에 비해 훨씬 작은 크기의 얕은 복사본이됩니다. 그러나 전혀 원하지 않으면 나중에 제거해야합니다.
zeycus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.