Gitリポジトリの特定のタグをダウンロードする方法を見つけようとしています。現在のバージョンより1つ後ろのバージョンです。
私はgitのWebページに以前のバージョンのタグがあり、そのオブジェクト名が長い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>
git clone --branch my_abc http://git.abc.net/git/abc.git
リポジトリを複製し、興味のあるタグの上に置きます。
git clone statesの1.8.0に関するドキュメント。
--branchはタグを取り、結果として得られるリポジトリのコミット時にHEADを切り離すこともできます。
展開用に特定のタグのみをチェックアウトするには、次のようにします。
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も渡してください。
私は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リポジトリにはすべてのリビジョン履歴が含まれているので、リポジトリを複製することで最新のコミットにアクセスできます。加えて、探しているタグも含めて、前に来たものすべてにアクセスできます。
Git archiveを使って、与えられたタグやコミットIDのtarボールをダウンロードすることができます。
git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar
タグのZipアーカイブをエクスポートすることもできます。
リストのタグ:
git tag
0.0.1
0.1.0
タグをエクスポートします。
git archive -o /tmp/my-repo-0.1.0.Zip --prefix=my-repo-0.1.0/ 0.1.0
ノート:
--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はオブジェクトを受け取り、指定されたブランチ/タグのみのデルタを解決する必要があります - まったく同じ量のファイルをチェックアウトします。ソースリポジトリによっては、これにより多くのディスク容量を節約できます。 (それに、もっと早くなるでしょう。)
最初にその特定のリモートのすべてのタグを取得します
git fetch <remote> 'refs/tags/*:refs/tags/*'
または 単に入力する
git fetch <remote>
それから利用可能なタグをチェックしてください
git tag -l
その後、下記のコマンドを使用してその特定のタグに切り替えます
git checkout tags/<tag_name>
これがお役に立てば幸いです。
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
私のすべての仕事をリベースしたいのなら、 最初の変更を含めて 。
タグが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
..またはあなたが必要とするどんなタグでも。
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では、タグを直接更新することはできません(タグはコミットのラベルにすぎないため)、ブランチと同じタグをチェックアウトしてからコミットしてから、別のタグを作成する必要があります。
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を呼び出します。
試してみてください。
git clone -b <name_of_the_tag> <repository_url> <destination>
タグが指しているファイルのバージョンを表示したい場合は、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タグとは少し違うでしょう。なぜならそれはあなたの新しい変更で前進するから注意してください。
これは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 ; \