web-dev-qa-db-ja.com

Gitで特定のタグをダウンロード

Gitリポジトリの特定のタグをダウンロードする方法を見つけようとしています。現在のバージョンより1つ後ろのバージョンです。

私はgitのWebページに以前のバージョンのタグがあり、そのオブジェクト名が長い16進数であることを確認しました。

しかし、サイトによるとバージョン名は "Tagged release 1.1.5"です。

私は(名前を変えて)このようなコマンドを試しました:

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

そして私は何かを得ました - ディレクトリ、たくさんのサブディレクトリなど。

リポジトリ全体の場合、探しているバージョンを入手するにはどうすればよいですか。そうでない場合、どうやってその特定のバージョンをダウンロードするのですか?

1800
Jack BeNimble
$ git clone

リポジトリ全体を提供します。

クローン作成後、$ git tag -lを使用してタグを一覧表示してから、特定のタグをチェックアウトできます。

$ git checkout tags/<tag_name>

さらに良いことには、ブランチをチェックアウトして作成してください(そうでなければ、タグのリビジョン番号にちなんで名付けられたブランチにいるでしょう):

$ git checkout tags/<tag_name> -b <branch_name>
2732
besen
git clone --branch my_abc http://git.abc.net/git/abc.git

リポジトリを複製し、興味のあるタグの上に置きます。

git clone statesの1.8.0に関するドキュメント。

--branchはタグを取り、結果として得られるリポジトリのコミット時にHEADを切り離すこともできます。

351
Toni

展開用に特定のタグのみをチェックアウトするには、次のようにします。

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

完全なリポジトリではなく最新のコードにしか関心がない場合は、これがリモートリポジトリからコードをチェックアウトする最も速い方法のようです。このように、それは 'svn co'コマンドに似ています。

注意:Per Gitマニュアル--depthフラグを渡すことはデフォルトで--single-branchを意味します。

--depth

指定されたコミット数に切り捨てられた履歴を持つ、シャロークローンを作成します。 --no-single-branchがすべてのブランチの先端近くの履歴を取得するために与えられていない限り、--single-branchを意味します。サブモジュールを浅くクローン化したい場合は--shallow-submodulesも渡してください。

132
Yuan HOng

私はGitのエキスパートではありませんが、これでうまくいくはずだと思います。

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

2番目のバリエーションは、タグに基づいて新しいブランチを確立します。これにより、 'detached HEAD'を回避できます。 (git-checkout manual)

すべてのgitリポジトリにはすべてのリビジョン履歴が含まれているので、リポジトリを複製することで最新のコミットにアクセスできます。加えて、探しているタグも含めて、前に来たものすべてにアクセスできます。

96
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. ノート:

    • フォーマットを指定する必要はありません。それは出力ファイル名によって拾われます。
    • 接頭辞を指定すると、コードはディレクトリにエクスポートされます(末尾のスラッシュを含める場合)。
79
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はオブジェクトを受け取り、指定されたブランチ/タグのみのデルタを解決する必要があります - まったく同じ量のファイルをチェックアウトします。ソースリポジトリによっては、これにより多くのディスク容量を節約できます。 (それに、もっと早くなるでしょう。)

48
eyecatchUp

最初にその特定のリモートのすべてのタグを取得します

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

または 単に入力する

git fetch <remote>

それから利用可能なタグをチェックしてください

git tag -l

その後、下記のコマンドを使用してその特定のタグに切り替えます

git checkout tags/<tag_name>

これがお役に立てば幸いです。

27
tk_
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 

私のすべての仕事をリベースしたいのなら、 最初の変更を含めて

16
user3070485

タグがlinux 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

(あなたが2番目に最近のタグを求めたので)

タグをチェックアウトするには、まずリポジトリを複製してから、次のように入力します。

git checkout v1.0.4

..またはあなたが必要とするどんなタグでも。

16
Peter Johnson

git checkoutのドキュメントをチェックしました 、興味深いことが1つ明らかになりました。

git checkout -b <new_branch_name> <start_point>。ここで、<start_point>は新しいブランチを開始するコミットの名前です。デフォルトはHEAD

それで、タグ名を(タグはコミットの名前に過ぎないので)次のように言うことができます。

>> git checkout -b 1.0.2_ブランチ1.0.2
後で、いくつかのファイルを変更します
>> git Push - タグ

P.S:Gitでは、タグを直接更新することはできません(タグはコミットのラベルにすぎないため)、ブランチと同じタグをチェックアウトしてからコミットしてから、別のタグを作成する必要があります。

16
None-da

Peter Johnsonの答えを元にして、私は自分のためにNiceという小さなエイリアスを作りました。

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

別名 'git checkout latest tag'。

これはGNUバージョンのsortに依存しており、lOrangerが指摘したような状況を適切に処理します。

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

Macの場合は、brew install coreutilsを呼び出してからgsortを呼び出します。

8
billwanjohi

試してみてください。

git clone -b <name_of_the_tag> <repository_url> <destination>
6
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タグとは少し違うでしょう。なぜならそれはあなたの新しい変更で前進するから注意してください。

5
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 ; \
4
J0hnG4lt