source

Git Clone: 파일만 부탁합니다.

manycodes 2023. 8. 24. 22:17
반응형

Git Clone: 파일만 부탁합니다.

로 끝나지 않기를 ..git디렉토리입니다.다시 말해, 나는 단지 파일들을 원합니다.이것을 할 수 있는 방법이 있습니까?

git clone --no-checkout의 일을 ..git디렉토리)를 선택합니다.

로컬 레포가 아닌 원격 레포를 위해 이 작업을 수행하려고 합니다. 즉, "git export"(예: "svn export")수행하는 방법"(솔루션이 동일하게 될 수도 있음)과 중복되지 않습니다.

찾고 있는 것과 가장 가까운 git 명령어는 다음과 같습니다.
git를 사용하는 백업 프로젝트 참조: 아카이브에 모든 파일(스크립트를 사용하는 경우 하위 모듈 포함)이 포함됩니다.

만 반환하고 할 수 ..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 되고 repo 파일은 포함되지 ..git.

참고:git --git-dir명령의 옵션이지, 는 아닙니다.


Git 2.14.X/2.15(2017년 4분기)로 업데이트: 폴더를 추가하지 않도록 할 것입니다.

"git archive특히 pathspec과 함께 사용될 때 Git 자체가 결코 그렇게 하지 않음에도 불구하고 빈 디렉토리를 출력에 저장했습니다.
이것은 수정되었습니다.

르네 샤페('')의 커밋 4318094(2017년 9월 12일) 참조.
제안자: Jeff peffKing().
(주니오 C 하마노에 의해 합병 -- 62b1cb7, 2017년 9월 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디렉토리입니다.만약 당신이 단지 트리의 어떤 상태의 복사본을 원한다는 것을 의미한다면 그렇게 하지 않는 이유는 무엇입니까?cp -R▁theit▁in를 삭제합니다..git

git checkout -f

작업 트리에서 레포를 분할하여 이 작업을 수행하는 또 다른 방법이 있습니다.

이 방법은 이러한 깃이 없는 깃 파일을 정기적으로 업데이트해야 하는 경우에 유용합니다.예를 들어, 소스 파일을 체크아웃하고 아티팩트를 빌드해야 할 때 사용하고, 아티팩트를 다른 저장소에 복사하여 서버에 배포하고, 소스 코드를 체크아웃하여 www 디렉토리에 빌드하기를 원할 때 서버에 소스 코드를 서버에 푸시할 때도 사용합니다.

두 개의 폴더를 만들 것입니다. 하나는 작업 파일을 위한 깃 폴더입니다.

mkdir workingfiles
mkdir barerepo.git

Bare Git repo 초기화:

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)그냥 단순한 파일일 뿐입니다.

솔루션과 »rm -r .git 없기 에 만약 명이필않으로므지요하라면, 만약./workingfiles/다른 Git repo의 Git 파일을 제거하는 데 사용되는 명령에 대해 걱정할 필요가 없습니다.

git를 전혀 사용할 필요가 없으며 URL(소스)에 "/zipball/master/"를 추가하기만 하면 됩니다.

다운로드 중

이 솔루션은 github 페이지의 "ZIP 다운로드" 버튼에 가장 가깝습니다.한 가지 장점은 .git 디렉터리가 없다는 것입니다.다른 하나는, 각 파일 대신 하나의 ZIP 파일을 하나씩 다운로드하는 것인데, 이것은 큰 차이를 만들 수 있습니다.명령줄에서 wget을 사용하여 수행할 수 있습니다.wget -O "$(basename $REPO_URL)".zip "$REPO_URL"/zipball/master/유일한 문제는 일부 리포지토리에 마스터 분기가 전혀 없을 수 있다는 것입니다.이 경우 URL의 "master"를 해당 분기로 대체해야 합니다.

압축 풀기

ZIP이 도착한 후에도 최종 압축 해제 디렉토리 이름은 여전히 매우 이상하고 예상치 못한 이름일 수 있습니다.이 문제를 해결하기 위해, 이 스크립트로 이름을 추출할 수 있습니다.mv to -ed to -ed tobasename Final URL. 최. 종의.script.sh다음과 같이 보일 수 있습니다(공간 처리를 위한 evals).

#Script for downloading from github. If no BRANCH_NAME is given, default is "master".
#usage: script.sh URL [BRANCH_NAME]
__repo_name__='basename "$1"'
__repo_name__="$(eval $__repo_name__)"
__branch__="${2:-master}"
#downloading
if [ ! -e ./"$__repo_name__"".zip" ] ; then
wget -O "$__repo_name__"".zip" "$1""/zipball/$__branch__/"
fi
#unpacking and renaming
if [ ! -e ./"$__repo_name__" ] ; then
unzip "$__repo_name__"".zip" && 
__dir_name__="$(unzip -qql $__repo_name__.zip | sed -r '1 {s/([ ]+[^ ]+){3}\s+//;q}')" &&
rm "$__repo_name__"".zip" &&
mv "$__dir_name__" "$__repo_name__"
fi

유지관리

이 접근 방식은 "파일만" 처리해야 하며, 소규모 저장소에 대한 신속한 단일 사용 액세스에 적합합니다.

할 수 모두 업데이트없습니다..git-less 디렉토리. 따라서 전체 repo를 다시 다운로드해야 합니다.은 - 했듯이 - 카피를 입니다. - VonC가 설 명 했 그 듯 카 고 것 입 는 니 하 수 얕 다 를 은 피 렇 이 다 책 은 해 결 가 좋 장 면 미 이 은 ▁then ▁copy ▁with ▁shallow ▁is ▁stick ▁- ▁to 그 니 ▁von 렇다 입 얕 것 c 은 다 ▁the 는 ▁-git clone --depth 1 $REPO_URL하지만 다음은?"업데이트 확인"은 링크를 참조하고, 업데이트는 Wiki와 유사한 답변을 참조하십시오.

git --work-tree=/tmp/files_without_dot_git clone --depth=1 \
  https://git.yourgit.your.com/myawesomerepo.git \
  /tmp/deleteme_contents_of_dot_git

/tmp의 두 디렉터리는 모두 즉시 생성됩니다.미리 생성할 필요가 없습니다.

당신은 단지 소스 코드의 복사본을 원하는 것처럼 들립니다.그렇다면 디렉터리를 복사하고 복사본에서 .git 디렉터리를 제외하는 것이 어떻습니까?

언급URL : https://stackoverflow.com/questions/3946538/git-clone-just-the-files-please

반응형