Git Clone : 파일 만주세요.
GIT 저장소를 복제하고 .git
디렉토리로 끝나지 않습니다 . 즉, 나는 파일을 원한다. 이것을 할 수있는 방법이 있습니까?
git clone --no-checkout
내가 원하는 것과 정확히 반대되었습니다 ( .git
디렉토리 만주었습니다 ).
로컬 리포지토리가 아닌 원격 리포지토리 에서이 작업을 수행하려고합니다 . 이는 ""svn export "와 같은"git export "를 수행하는 방법 " 의 사본 이 아닙니다 . 같은).
당신이 찾고있는 것과 가장 가까운 git 명령은 git archive
. git을 사용하는 프로젝트 백업
참조 : 모든 파일을 아카이브에 포함합니다 ( 스크립트를 사용하는 경우 하위 모듈 포함 )git-archive-all
그런 다음 어디에서나 해당 아카이브를 사용하여 .git
디렉토리 없이 파일 만 다시 제공 할 수 있습니다 .
git archive --remote=<repository URL> | tar -t
첫 번째 수준의 폴더와 파일이 필요한 경우 :
git archive --remote=<repository URL> | tar -t --exclude="*/*"
원격 저장소의 첫 번째 레벨 폴더 만 나열하려면 다음을 수행하십시오.
git archive --remote=<repository URL> | tar -t --exclude="*/*" | grep "/"
참고 : GitHub에서는 작동하지 않습니다 (지원되지 않음)
따라서 복제 단계 (빠른 복제 단계를 위해 얕은)를 복제 한 다음 로컬로 아카이브해야합니다 .
git clone --depth=1 git@github.com:xxx/yyy.git
cd yyy
git archive --format=tar aTag -o aTag.tar
또 다른 옵션은 아래에 언급 된 것처럼 얕은 복제를 수행하지만 다른 위치에 .git 폴더를 찾는 것입니다.
git --git-dir=/path/to/another/folder.git clone --depth=1 /url/to/repo
repo 폴더에는 파일없이 파일 만 포함됩니다 .git
.
참고 : git --git-dir
이 아닌 명령git
옵션입니다 git clone
.
Git 2.14.X / 2.15로 업데이트 (2017 년 4 분기) : 빈 폴더를 추가하지 않도록 합니다.
"
git archive
", 특히 pathspec과 함께 사용될 때 Git 자체는 결코 그렇게하지 않더라도 출력에 빈 디렉토리를 저장했습니다.
이것은 수정되었습니다.
참조는 4,318,094 커밋 에 의해 (2017년 9월 12일) 르네 Scharfe를 (``) .
제안 : Jeff King ( peff
) .
(의해 병합 - Junio C 하마노 gitster
- 에 62b1cb7 커밋 2,017 25 구월)
archive
: 아카이브에 빈 디렉토리를 추가하지 마십시오git은 빈 디렉토리를 추적하지 않지만
git archive
일부는 아카이브에 넣도록 속일 수 있습니다.
그것이 객체 데이터베이스에 의해 지원되는 동안, 그것은 색인으로 표현 될 수 없으며 따라서 야생에서 일어날 가능성이 적습니다.빈 디렉토리는 git에서 지원하지 않으므로 아카이브에도 쓰지 않아야합니다.
빈 디렉토리가 실제로 필요한 경우 빈.gitignore
파일을 저장 하여 추적하고 아카이브 할 수 있습니다 .
git archive --format=tar --remote=<repository URL> HEAD | tar xf -
여기 에서 가져온
얕은 복제본을 만들어 마지막 몇 가지 개정 만 가져올 수 있습니다.
git clone --depth 1 git://url
그런 다음 단순히 .git 디렉토리를 삭제하거나 git archive
트리를 내보내는 데 사용 하십시오.
복제본을 수행 한 다음 .git
디렉토리 를 삭제하여 작업 사본이 남아있는 이유는 무엇 입니까?
편집 : 또는 실제로 왜 클론을 사용합니까? .git
디렉토리 없이 git repo를 원한다고 말하면 약간 혼란 스럽습니다 . 트리의 일부 상태의 사본을 원한다면 cp -R
git clone 대신 쉘에서 수행하지 말고 .git
나중에 삭제하십시오 .
소스 코드의 사본을 원하는 것처럼 들립니다. 그렇다면 왜 디렉토리를 복사하고 사본에서 .git 디렉토리를 제외시키지 않습니까?
자식 체크 아웃 -f
작업 트리에서 저장소를 분리하여 다른 방법으로이를 수행 할 수 있습니다.
이 방법은 이러한 git-less git 파일을 정기적으로 업데이트해야하는 경우에 유용합니다. 예를 들어 소스 파일을 체크 아웃하고 아티팩트를 빌드 한 다음 서버에 배치하기 위해 아티팩트를 다른 저장소에 복사하고 소스 코드를 서버에 푸시 할 때도 사용합니다. 체크 아웃하고 www 디렉토리에 빌드 할 소스 코드.
작업 파일 용 git 용 폴더 하나를 만듭니다.
mkdir workingfiles
mkdir barerepo.git
베어 git 저장소를 초기화하십시오.
cd barerepo.git
git --bare init
그런 다음 수신 후 후크를 작성하십시오.
touch hooks/post-receive
chmod ug+x hooks/post-receive
좋아하는 편집기에서 수신 후 편집 :
GIT_WORK_TREE=/path/to/workingfiles git checkout -f
# optional stuff:
cd down/to/some/directory
[do some stuff]
이것을 원격으로 추가하십시오 :
git remote add myserver ssh://user@host:/path/to/barerepo.git
이제이 맨손으로 리포지토리를 푸시 할 때마다 작업 트리를 체크 아웃합니다 /workingfiles/
. 그러나 /workingfiles/
그 자체는 버전 관리하에 있지 않습니다. 실행 git status
에하는 /workingfiles/
오류를 줄 것이다 fatal: Not a git repository (or any parent up to mount point /data)
. 그냥 평범한 파일입니다.
Unlike other solutions rm -r .git
command is not needed, so if /workingfiles/
is some other git repo you don't have to worry about the command used removing the other repo's git files.
Very simple IMHO:
- Just
git clone REPO_URL
it then - Just remove the
.git
dir usingrm -rf ./REPO_NAME/.git
from the repo.
For example, if my repository's name is MyRepo
then to get this repo without metadata I could run either:
git clone https://github.com/MyUser/MyRepo.git && rm -rf ./MyRepo/.git
Or I could get it into a specified directory ( let's say in a dir called MyDir
):
git clone https://github.com/MyUser/MyRepo.git MyDir && rm -rf ./MyDir/.git
Hopefully this helps.
참고URL : https://stackoverflow.com/questions/3946538/git-clone-just-the-files-please
'programing tip' 카테고리의 다른 글
배치 파일에서 if-else 구조를 사용하는 방법은 무엇입니까? (0) | 2020.07.05 |
---|---|
로컬 Git 브랜치를 원격 저장소에 복사하는 방법 (0) | 2020.07.05 |
UNIX에서 벽시계 시간, 사용자 CPU 시간 및 시스템 CPU 시간은 구체적으로 무엇입니까? (0) | 2020.07.05 |
에스컬레이션 잠금-여기서 무슨 일이 일어나고 있습니까? (0) | 2020.07.05 |
신용 카드 유효 기간-포함 또는 독점? (0) | 2020.07.05 |