programing tip

Git Clone : 파일 만주세요.

itbloger 2020. 7. 5. 08:10
반응형

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 -Rgit 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:

  1. Just git clone REPO_URL it then
  2. Just remove the .git dir using rm -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

반응형