.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).

Degit 은 Svelte 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.