반응형

"git export"( "svn 수출")를하십시오.


질문

 

.git 저장소 디렉토리가없는 트리 복사본을 만드는 좋은 "Git Export"솔루션이 있는지 궁금해 해왔습니다.내가 알고있는 최소한 세 가지 방법이 있습니다.

  1. git clone followed by removing the .git repository directory.
  2. git checkout-index alludes to this functionality but starts with "Just read the desired tree into the index..." which I'm not entirely sure how to do.
  3. git-export is a third-party script that essentially does a git clone into a temporary location followed by rsync --exclude='.git' into the final destination.

이러한 해결책 중 어느 것도 정말로 나를 만족스럽게 공격하지 않습니다.가장 가까운 하나의 SVN 내보내기는 대상 디렉토리가 먼저 비어있을 필요가 있기 때문에 옵션 1 일 수 있습니다.그러나 옵션 2는 트리를 인덱스로 읽는 것이 무엇을 의미하는지 알아낼 수 있다고 가정합니다.


답변

 

아마도 이것을 달성하는 가장 간단한 방법은 Git 아카이브와 함께합니다.확장 된 나무 만 정말로 필요하다면 이런 일을 할 수 있습니다.

git archive master | tar -x -C /somewhere/else

Git에서 뭔가를 '수출'해야 할 때 대부분의 경우 나는 어떤 경우에도 압축 된 아카이브를 원합니다.

git archive master | bzip2 >source-tree.tar.bz2

ZIP 아카이브 :

git archive --format zip --output /full/path/to/zipfile.zip master 

Git Help Archive 자세한 내용은 매우 유연합니다.


아카이브가 .git 디렉토리를 포함하지 않더라도. 그러나 .gitignore, .gitattributes 등과 같은 다른 숨겨진 된 git 특정 파일이 포함됩니다. 아카이브에서 원하지 않으면.gitAttributes 파일의 export-ignore 속성을 사용하고 아카이브를 수행하기 전에이를 커밋하십시오.자세히보기 ...


참고 : 인덱스를 내보내는 데 관심이있는 경우 명령은 다음과 같습니다.

git checkout-index -a -f --prefix=/destination/path/

자세한 내용은 Greg의 답변을 참조하십시오)



답변

나는 옵션 2가 무엇을 의미하는지 알아 냈습니다.저장소에서 다음을 수행 할 수 있습니다.

git checkout-index -a -f --prefix=/destination/path/

경로 끝에있는 슬래시는 중요합니다. 그렇지 않으면 파일이 '경로'의 접두사가있는 / 대상이 될 것입니다.

정상적인 상황에서 인덱스는 저장소의 내용이 포함되어 있으므로 "원하는 트리를 인덱스로 읽는 데 특별한 것은 없습니다."그것은 이미 거기에 있습니다.

-a 플래그는 인덱스의 모든 파일을 확인하는 데 필요합니다 (이 상황 에서이 플래그를 생략하는 것이 무엇을 생략하는 것이 무엇을 의미하는지 모르겠지만, 내가 원하는 것을하지 않으므로).-f 플래그는이 명령이 일반적으로 수행되지 않는 출력의 기존 파일을 덮어 쓸 것을 강요합니다.

이것은 내가 찾고있는 일종의 "git export"의 일종 인 것으로 보인다.



답변

git

리포지토리가 GitHub에서 호스팅되는 경우 특별한 경우 응답합니다.

SVN 수출을 사용하십시오.

내가 아는 한 github가 아카이브를 허용하지 않습니다. --remote.GitHub는 SVN이 호환되지만 모든 Git Repos SVN이 액세스 할 수 있으므로 일반적으로 GitHub URL에 대한 몇 가지 조정이있는 것처럼 SVN 내보내기를 사용할 수 있습니다.

예를 들어 전체 저장소를 내보내려면 URL의 트렁크가 마스터를 대체하는 방식 (또는 프로젝트의 머리 분기가 설정된 것)을 대체하는 방법을 알아보십시오.

svn export https://github.com/username/repo-name/trunk/

단일 파일이나 특정 경로 또는 폴더를 내보낼 수 있습니다.

svn export https://github.com/username/repo-name/trunk/src/lib/folder

jQuery JavaScript 라이브러리의 예

머리 가지 또는 마스터 브랜치는 트렁크를 사용하여 사용할 수 있습니다.

svn ls https://github.com/jquery/jquery/trunk

비 헤드 지점은 / 분기에서 액세스 할 수 있습니다 / :

svn ls https://github.com/jquery/jquery/branches/2.1-stable

모든 태그 아래 / 태그 / 같은 방식으로 /

svn ls https://github.com/jquery/jquery/tags/2.1.3


답변

Git 아카이브는 원격 저장소에서도 작동합니다.

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master | tar -xf -

repo 내부의 특정 경로를 내보내려면 Git의 마지막 인수로 원하는만큼의 경로를 추가하십시오.

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master path1/ path2/ | tar -xv


답변

질문을 이해할 때, 기록없이, 로컬 리포지토리에서 상태를 추출하는 대신 다른 지점의 데이터가 아닌 다른 지점의 데이터가 없기 때문에 서버에서 특정 상태를 다운로드하는 것에 대해 더 많이 다운로드하십시오.

이렇게 할 수 있습니다.

git clone -b someBranch --depth 1 --single-branch git://somewhere.com/repo.git \
&& rm -rf repo/.git/

- 싱글 브랜치는 GIT 1.7.10 (2012 년 4 월) 이후로 제공됩니다. --depth는 (였습니다.)가 잘못되었지만, 수출의 경우, 언급 된 문제는 중요하지 않아야합니다.



답변

Git Manual에서 :

git-checkout-index를 사용하여 "전체 트리 내보내기"

접두사 능력은 기본적으로 git-checkout-index를 "트리로 내보내기"함수로 사용하는 것이 사소한 일을합니다.원하는 트리를 인덱스로 읽고 다음을 수행하십시오.

$ git checkout-index --prefix = git-export-dir / -a

출처:https://stackoverflow.com/questions/160608/do-a-git-export-like-svn-export
반응형