etc./StackOverFlow

Git으로 특정 태그 다운로드

청렴결백한 만능 재주꾼 2021. 12. 6. 22:01
반응형

질문자 :Jack BeNimble


Git 리포지토리의 특정 태그를 다운로드하는 방법을 알아 내려고 노력 중입니다. 현재 버전보다 한 버전입니다.

git 웹 페이지에 이전 버전에 대한 태그가 있고 긴 16진수의 개체 이름이 있는 것을 보았습니다.

그러나 버전 이름은 사이트에 따라 Tagged release 1.1.5

다음과 같은 명령을 시도했습니다(이름이 변경됨).

 git clone http://git.abc.net/git/abc.git my_abc

그리고 디렉토리, 여러 하위 디렉토리 등을 얻었습니다.

전체 저장소인 경우 찾고 있는 버전을 어떻게 얻습니까? 그렇지 않은 경우 해당 특정 버전을 어떻게 다운로드합니까?



$ git clone

전체 저장소를 제공합니다.

$ git tag -l 사용하여 태그를 나열한 다음 특정 태그를 체크아웃할 수 있습니다.

 $ git checkout tags/<tag_name>

더 나은 방법은 체크아웃하고 분기를 생성하는 것입니다(그렇지 않으면 태그의 개정 번호를 따서 명명된 분기에 있게 됩니다).

 $ git checkout tags/<tag_name> -b <branch_name>

besen

git clone --branch my_abc http://git.abc.net/git/abc.git

리포지토리를 복제하고 관심 있는 태그를 남깁니다.

1.8.0 git clone 상태에 대한 문서입니다.

--branch는 또한 결과 리포지토리의 해당 커밋에서 태그를 가져오고 HEAD를 분리할 수 있습니다.


Toni

배포를 위해 지정된 태그만 체크아웃하려면 다음을 사용합니다.

 git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git

이것은 완전한 저장소 대신 가장 최근의 코드에만 관심이 있는 경우 원격 저장소에서 코드를 체크아웃하는 가장 빠른 방법인 것 같습니다. 이런 식으로 'vn co' 명령과 유사합니다.

참고: Git 매뉴얼 에 따라 --depth 플래그를 전달하는 것은 기본적으로 --single-branch

--깊이

지정된 커밋 수로 잘린 기록으로 얕은 클론을 만듭니다. --no-single-branch가 모든 분기의 끝 근처에서 기록을 가져오기 위해 지정되지 않는 한 --single-branch를 의미합니다. 하위 모듈을 얕게 복제하려면 --shallow-submodules도 전달하십시오.


Yuan HOng

나는 git 전문가는 아니지만 이것이 효과가 있다고 생각합니다.

 git clone http://git.abc.net/git/abc.git cd abc git checkout my_abc

또는

 git clone http://git.abc.net/git/abc.git cd abc git checkout -b new_branch my_abc

두 번째 변형은 태그를 기반으로 새 분기를 설정하므로 '분리된 HEAD'를 피할 수 있습니다. (git-checkout 매뉴얼)

모든 git repo에는 전체 개정 기록이 포함되어 있으므로 repo를 복제하면 최신 커밋과 찾고 있는 태그를 포함하여 이전에 나온 모든 것에 액세스할 수 있습니다.


grossvogel

git archive를 사용하여 주어진 태그 또는 커밋 ID에 대한 tar 볼을 다운로드할 수 있습니다.

 git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar

태그의 zip 아카이브를 내보낼 수도 있습니다.

  1. 목록 태그:

     git tag 0.0.1 0.1.0
  2. 태그 내보내기:

     git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
  3. 노트:

    • 형식을 지정할 필요가 없습니다. 출력 파일 이름으로 선택됩니다.
    • 접두사를 지정하면 코드가 디렉토리로 내보내집니다(후행 슬래시가 포함된 경우).

Chris J

--single-branch 스위치를 사용합니다 (Git 1.7.10부터 사용 가능) . 구문은 다음과 같습니다.

 git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>]

예를 들어:

 git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5

이점: Git은 객체를 수신하고 지정된 분기/태그에 대해서만 델타를 해석해야 합니다. 동시에 정확히 동일한 양의 파일을 체크아웃합니다! 소스 리포지토리에 따라 디스크 공간을 많이 절약할 수 있습니다. (게다가 훨씬 빨라집니다.)


eyecatchUp

먼저 특정 리모컨의 모든 태그를 가져옵니다.

 git fetch <remote> 'refs/tags/*:refs/tags/*'

또는 단순히 입력

 git fetch <remote>

그런 다음 사용 가능한 태그를 확인합니다.

 git tag -l

그런 다음 아래 명령을 사용하여 특정 태그로 전환하십시오.

 git checkout tags/<tag_name>

이것이 도움이 되기를 바랍니다!


tk_

sort 명령을 사용하여 태그를 정렬할 수 있는 경우 다음을 사용하십시오.

 git tag | sort -n | tail -1

예를 들어 git tag 가 다음을 반환하는 경우:

 v1.0.1 v1.0.2 v1.0.5 v1.0.4

git tag | sort -n | tail -1 은 다음을 출력합니다.

 v1.0.5

git tag | sort -n | tail -2 | head -1 은 다음을 출력합니다.

 v1.0.4

(두 번째로 최근 태그를 요청했기 때문에)

태그를 체크아웃하려면 먼저 리포지토리를 복제한 다음 다음을 입력합니다.

 git checkout v1.0.4

..또는 필요한 태그.


Peter Johnson

git fetch <gitserver> <remotetag>:<localtag>

=====================================

나는 이것을 했다. 먼저 태그 이름 철자를 알고 있는지 확인했습니다.

 git ls-remote --tags gitserver; : or origin, whatever your remote is called

이것은 내가 선택할 수 있는 내 git 서버의 태그 목록을 제공했습니다. 원래 포스터는 이미 자신의 태그 이름을 알고 있었기 때문에 이 단계가 모든 사람에게 필요한 것은 아닙니다. 실제 목록은 더 길었지만 출력은 다음과 같았습니다.

 8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2 f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1 8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109 9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110

나는 내가 원하는 태그를 선택하고 그것을 가져 왔고 다음과 같이 더 이상 아무것도 가져 오지 않았습니다.

 git fetch gitserver Fix_110

그런 다음 내 로컬 컴퓨터에서 이 태그를 지정하여 내 태그에 동일한 이름을 지정했습니다.

 git tag Fix_110 FETCH_HEAD

다른 사람들이 제안한 것처럼 원격 저장소를 복제하고 싶지 않았습니다. 제가 작업하고 있는 프로젝트가 크고 깨끗한 환경에서 개발하고 싶기 때문입니다. 나는 이것이 전체 저장소 복제를 제안하는 솔루션보다 "특정 태그를 다운로드하는 방법을 알아 내려고 노력하고 있습니다"라는 원래 질문에 더 가깝다고 생각합니다. (예를 들어) DOS 0.1 소스 코드를 보고자 하는 사람이 Windows NT 및 Windows 8.1 소스 코드를 가지고 있어야 하는 이유를 모르겠습니다.

나는 또한 다른 사람들이 제안한 것처럼 CHECKOUT을 사용하고 싶지 않았습니다. 나는 지점을 체크 아웃했고 그것에 영향을 미치고 싶지 않았습니다. 내 의도는 내가 원하는 소프트웨어를 가져와서 선택하여 개발에 추가할 수 있도록 하는 것이었습니다.

태그가 지정된 커밋의 복사본이 아닌 태그 자체를 가져오는 방법이 있을 수 있습니다. 가져온 커밋에 직접 태그를 지정해야 했습니다. 편집: 아 예, 지금 찾았습니다.

 git fetch gitserver Fix_110:Fix_110

콜론이 보이는 곳은 remote-name:local-name이며 여기에 태그 이름이 있습니다. 이것은 작업 트리 등을 화나게하지 않고 실행됩니다. 원격에서 로컬 시스템으로 항목을 복사하여 자신의 복사본을 갖는 것 같습니다.

 git fetch gitserver --dry-run Fix_110:Fix_110

--dry-run 옵션을 추가하면 원하는 것을 확인하려는 경우 명령이 수행하는 작업을 볼 수 있습니다. 그래서 간단한 것 같아요

 git fetch gitserver remotetag:localtag

진짜 답이다.

=

태그에 대한 별도의 참고 사항 ... 새로운 것을 시작할 때 일반적으로 git init 다음에 빈 저장소에 태그를 지정합니다.

 git rebase -i XXXXX

커밋이 필요하고 "첫 번째 소프트웨어 변경 사항을 포함하는 변경 사항을 어떻게 리베이스합니까?"라는 질문이 생깁니다. 그래서 나는 일을 시작할 때

 git init touch .gitignore [then add it and commit it, and finally] git tag EMPTY

즉, 첫 번째 실제 변경 전에 커밋을 만든 다음 나중에 사용합니다.

 git rebase -i EMPTY

첫 번째 변경 사항을 포함하여 모든 작업을 리베이스하려면 .


Ivan

git checkout documentation 을 확인했는데 흥미로운 사실이 하나 드러났습니다.

git checkout -b <new_branch_name> <start_point> , 여기서 <start_point>는 새 분기를 시작할 커밋의 이름입니다. 기본값은 HEAD입니다.

따라서 우리는 다음과 같이 태그 이름을 언급할 수 있습니다.

>> 자식 체크아웃 -b 1.0.2_분기 1.0.2
나중에 일부 파일 수정
>> 자식 푸시 --태그

추신: Git에서는 태그를 직접 업데이트할 수 없습니다(태그는 커밋에 대한 레이블일 뿐이므로). 브랜치와 동일한 태그를 체크아웃한 다음 커밋한 다음 별도의 태그를 만들어야 합니다.


None-da

Peter Johnson의 답변을 바탕으로 나 자신을 위한 멋진 별칭을 만들었습니다.

 alias gcolt="git checkout $(git tag | sort -V | tail -1)"

일명 'git checkout 최신 태그'.

이것은 lOranger가 지적한 것과 같은 상황을 적절하게 처리하는 GNU 버전의 정렬에 의존합니다.

 v1.0.1 ... v1.0.9 v1.0.10

Mac을 사용하는 경우 brew install coreutils 를 실행한 다음 대신 gsort를 호출합니다.


billkw

노력하다:

 git clone -b <name_of_the_tag> <repository_url> <destination>

Kamil Zając

태그 체크아웃

태그가 가리키는 파일의 버전을 보려면 git 체크아웃을 수행할 수 있습니다. 하지만 이렇게 하면 저장소가 "분리된 HEAD" 상태가 되어 몇 가지 나쁜 부작용이 있습니다.

 $ git checkout 2.0.0 Note: checking out '2.0.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final $ git checkout 2.0-beta-0.1 Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final HEAD is now at df3f601... add atlas.json and cover image

"분리된 HEAD" 상태에서 변경한 다음 커밋을 생성하면 태그는 그대로 유지되지만 새 커밋은 분기에 속하지 않으며 정확한 커밋 해시를 제외하고는 연결할 수 없습니다. 따라서 변경해야 하는 경우(예: 이전 버전에서 버그를 수정하는 경우) 일반적으로 분기를 만들고 싶을 것입니다.

 $ git checkout -b version2 v2.0.0 Switched to a new branch 'version2'

이 작업을 수행하고 커밋하면 새로운 변경 사항과 함께 계속 진행되므로 version2 분기가 v2.0.0 태그와 약간 다를 수 있으므로 주의해야 합니다.


artamonovdev

github API를 통해 이 작업을 수행합니다.

 curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;\ tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; \

J0hnG4lt

나는 아래와 같이 했다

 git checkout tags/20210511 -b 20210511-release

Rajitha Bhanuka

나는 자주 사용했습니다.

 git clone --branch <tag_name> <repo_url>

ßãlãjî

출처 : http:www.stackoverflow.com/questions/791959/download-a-specific-tag-with-git

반응형