programing

.git 디렉토리가 없는 Git 클론

yellowcard 2023. 7. 9. 10:59
반응형

.git 디렉토리가 없는 Git 클론

전달할 플래그가 있습니까?git복제를 수행할 때 복제 안 함이라고 말합니다..git디렉토리?만약 그렇지 않다면, 삭제할 플래그는 어떻습니까?.git복제본 뒤에 디렉토리를 지정하시겠습니까?

사용하다

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
  • 깊이 옵션을 사용하면 해당 보고서를 얻기 위해 가능한 최소 기록 비트를 복사할 수 있습니다.
  • 분기 옵션은 선택 사항이며 지정하지 않으면 기본 분기를 가져옵니다.
  • 두 번째 줄은 당신의 디렉토리를 만들 것입니다.dirformynewrepo더 이상 Git 저장소가 아닙니다.
  • 재귀 하위 모듈 복제를 수행하는 경우 깊이 및 분기 매개 변수가 하위 모듈에 적용되지 않습니다.

당신은 파일만 원하기 때문에, 당신은 그것을 기트 레포로 취급할 필요가 없습니다.

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

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

또는 Node.js가 설치된 경우 다음 명령을 사용할 수 있습니다.

npx degit GIT_REPO

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

드짓은 스벳앤롤업을 만든 리치 해리스가 만든 도구로, 그가 깃 폴더를 보관하지 않고 저장소를 복제해 새 프로젝트를 빠르게 만드는 데 사용합니다.하지만 레포를 한 번 복제하는 데도 사용할 수 있습니다.

git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git

나는 이 솔루션이 더 마음에 듭니다. 왜냐하면 나는 좋아하지 않기 때문입니다.rm -rf자동으로 사물을 처리합니다.그냥rms.git 파일로, 그것은 결코 우연히 일어날 수 없다는 것을 의미합니다.rm -rf잘못된 .git 디렉토리

에 의존합니다.mktemp*nix 시스템이 작동하도록 명령합니다(제가 보기에 이것은 더 많은 작업이 필요합니다).mktempMacOS에서 작업하기 때문에, 작업 솔루션에 대해 언급하고 싶은 사람이 있으면 추가하겠습니다.)

zsh에서, 나는 그것을 함수로 만들었다, 그래서 나는 확신합니다.dir값이 정의됩니다.

alias np='node-project'
function node-project() {
  dir=${1:-.}
  git clone --separate-git-dir=$(mktemp -u) --depth=1 <my-node-repo> $dir && rm $dir/.git
}

설명.

--separate-git-dirflag를 사용하여 .git 디렉터리의 경로를 지정할 수 있습니다.결과 "프로젝트"는 디렉터리가 아닌 .git 파일을 가질 것이며 그 내용은 한 줄이 될 것입니다.

gitdir: <the dir you specified in the flag>

왜냐하면 우리는 tmpdir를 사용했기 때문입니다.mktemp명령, 실제.git디렉터리 내용은 tmpdir로 끝날 것입니다.또한 다음을 사용합니다.--depth=1그래서 tmp dirs에서 공간을 덜 차지합니다.

솔루션이 여전히 다운로드되고 있기 때문에 솔루션을 의심하는 사람들을 위해.git디렉터리를 수동으로 제거해야 합니다. 어쩌면 클론이 실제로 어떻게 작동하는지 알아야 할 수도 있습니다.

일반적으로 레포를 복제할 때 모든 파일(커밋에 걸쳐 있음)을 다운로드합니다..git디렉토리입니다.--depth 1만 Git는 최신파다운다니합드로 합니다..git그런 다음 git이 해당 파일을 검색합니다..git작업 디렉토리로 이동합니다(더 이상 다운로드 안 함).

그리고 종종, 파일이 내부의 객체이기 때문에.git을 더 할 수 .git clone --depth 1압축되지 않은 파일을 다운로드하는 대신. 느린 인터넷을 를 치를 .rm -rf).

저는 개인적으로 해결책이 더 좋다고 생각하지만 GitHub에서 지원하지 않기 때문에,--depth 1가는 길입니다.

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo1
rd /s /q  .\dirformynewrepo1\.git

이것은 윈도우 시스템에서 작동합니다.

git archive --remote이미 구현했습니다.

저장소가 GitHub에 있으면 다음 태그의 ZIP 파일을 다운로드하기만 하면 됩니다.

curl -L https://github.com/<user>/<repo-name>/archive/refs/tags/v1.2.3.zip | tar xz

그러면 리포지토리가 다운로드되고 압축이 해제됩니다.내용은 다음과 같습니다.<repo-name>-1.2.3.git폴더를 누릅니다.

언제든지 할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/11497457/git-clone-without-git-directory

반응형