programing

Git로 특정 태그 다운로드

padding 2023. 4. 28. 20:19
반응형

Git로 특정 태그 다운로드

Git 저장소의 특정 태그를 다운로드할 수 있는 방법을 찾고 있습니다. 현재 버전보다 한 버전 뒤에 있습니다.

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

"하지만버입이름은전 "니다입다▁"니▁but"입니다.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>
git clone --branch my_abc http://git.abc.net/git/abc.git

레포를 복제하여 관심 있는 태그에 남겨 둡니다.

git 클론 상태 1.8.0에 대한 설명서.

--branch는 태그를 사용하여 결과 저장소에서 해당 커밋 시 HEAD를 분리할 수도 있습니다.

배포를 위해 지정된 태그만 체크아웃하는 경우 다음과 같이 사용합니다.

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

완전한 저장소가 아닌 최신 코드에만 관심이 있다면 원격 저장소에서 코드를 체크아웃하는 것이 가장 빠른 방법인 것 같습니다.이러한 방식으로 'svnco' 명령과 유사합니다.

참고: Git 매뉴얼에 따라 다음을 통과합니다.--depth깃발은 의미합니다.--single-branch결석으로

--깊이

기록이 지정된 커밋 수만큼 잘린 얕은 복제본을 만듭니다.모든 분기의 끝 근처에서 기록을 가져오도록 --단일 분기가 지정되지 않은 경우 --단일 분기를 의미합니다.하위 모듈을 얕게 복제하려면 --shallow-submodules도 통과합니다.

저는 기트 전문가는 아니지만, 이것이 효과가 있을 것이라고 생각합니다.

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

OR

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

두 번째 변형은 태그를 기반으로 새 분기를 설정하여 '헤드 분리'를 방지합니다. (git-checkout 매뉴얼)

모든 Git repo에는 전체 수정 내역이 포함되어 있으므로 repo를 복제하면 최신 커밋뿐만 아니라 찾고 있는 태그를 포함하여 이전에 나온 모든 항목에 액세스할 수 있습니다.

git 아카이브를 사용하여 지정된 태그 또는 커밋 ID에 대한 tarball을 다운로드할 수 있습니다.

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. 주의:

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

스위치 사용합니다(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는 객체를 수신하고 지정된 분기/태그에 대해서만 델타를 해결해야 합니다. 동일한 양의 파일을 체크아웃합니다!원본 리포지토리에 따라 디스크 공간이 많이 절약됩니다.

먼저 해당 원격에서 모든 태그를 가져옵니다.

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

아니면 그냥 간단하게 타이핑하세요.

git fetch <remote>

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

git tag -l

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

git checkout tags/<tag_name>

이것이 여러분에게 도움이 되기를 바랍니다!

할 수 있는 을 참조하십시오.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

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

태그를 체크아웃하려면 먼저 repo를 복제한 후 다음을 입력합니다.

git checkout v1.0.4

..아니면 필요한 태그가 뭐든지.

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 소스 코드의 복사본이 있어야 하는 이유를 모르겠습니다.

저도 다른 사람들이 제안한 것처럼 CHECKINE을 사용하고 싶지 않았습니다.지점을 체크아웃했는데 영향을 주고 싶지 않았습니다.제 의도는 제가 원하는 소프트웨어를 가져와서 제가 원하는 것을 골라 제 개발에 추가하는 것이었습니다.

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

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 뒤에 빈 저장소에 태그를 붙입니다.

git rebase -i XXXXX 

는 커밋을 요구하며, "첫 번째 소프트웨어 변경을 포함한 변경 사항을 어떻게 기본으로 변경합니까?"라는 질문이 제기됩니다.그래서 일을 시작하면 저는 합니다.

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

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

git rebase -i EMPTY 

번째 변경사항을 포함하여 모든 작업의 기본을 변경하려면 다음과 같이 하십시오.

Git Checkout 문서를 확인해보니 한 가지 흥미로운 점이 있었습니다.

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

따라서 태그 이름(태그는 커밋의 이름에 불과하므로)을 다음과 같이 언급할 수 있습니다.

checkout 1 1 1.0.2_git 1.0.2_git 1.0.2
일부 합니다.
--dll >> git push --dll.

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

피터 존슨의 대답을 바탕으로, 저는 제 자신을 위한 멋진 작은 별명을 만들었습니다.

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

일명 'git checkout latest tag'입니다.

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

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

당신이 맥을 짚는다면,brew install coreutils대신 gsort를 불러주세요.

시도:

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

태그 체크아웃

태그가 가리키는 파일 버전을 보려면 Git Checkout을 수행할 수 있습니다. 이렇게 하면 리포지토리가 "분리된 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'

이 작업을 수행하고 커밋하면 버전 2 브랜치가 새 변경 사항과 함께 진행되므로 v2.0.0 태그와 약간 다를 수 있으므로 주의해야 합니다.

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 ; \

자주 사용했습니다.

git clone  --branch <tag_name> <repo_url>

하기와 같이 하였습니다.

git checkout tags/20210511 -b 20210511-release

언급URL : https://stackoverflow.com/questions/791959/download-a-specific-tag-with-git

반응형