Gitから単一のリビジョンを取得する


14

Gitの完全な改訂履歴があることは、開発プロセスの一部として多くの利点があります。

しかし、当社の製品はソースコードであり、コンパイルや処理を必要としないスクリプト言語を使用しているため、Gitの履歴が展開の負担になります。この例では、変更ごとにクリーンな仮想環境を展開し、単一のマシン。

履歴の量を減らす方法がいくつかあります。例えば、効率がブランチのリビジョンの深さに依存する浅いクローン、クローンの代わりにフェッチを実行しますが、リビジョンから履歴を取得して戻す、または完全に取得するリポジトリは一度必要に応じてプルしますが、これはディスク容量の点で無駄であり、信頼性が低くなる傾向があります。

Gitから履歴なしで1つのリビジョンを取得する方法はありますか?


回答:


16

浅いクローン

実際に、Gitから浅いクローンを取得できます。

git clone --depth=1 <url>

これにより、レポジトリのクローンが作成さ.gitれ、オブジェクトを含むフォルダーが作成されますが、サイズは小さくなります(合計ファイルサイズと履歴サイズに応じて異なります)。

Gitアーカイブ

git-archiveを使用してリポジトリのアーカイブを抽出することもできます。

名前付きツリーのツリー構造を含む指定された形式のアーカイブを作成し、標準出力に書き出します。を指定すると、アーカイブ内のファイル名の前に追加されます。

は、例えば、示しています。

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

リリース用の圧縮tarballを作成します。

Hosted Git、アーカイブAPI

GitHubでリポジトリをホストしている場合、アーカイブAPIを使用できます

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.orgには、これに対して同じ機能があります。

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip


7ochem、GZIP -cことにするかもしれないのgzipコマンドが必要....
ロミオNinov

11

gitリポジトリをデプロイしないでください。実際の展開方法を開発します。デプロイされたスクリプトのアーカイブを展開する(=デプロイする必要なファイルのみを含むアーティファクトをビルドする)のと同じくらい簡単な場合でも。

ソースリポジトリの先端を浅くクローン化したとしても、ユニットテスト、ドキュメント、リンティングプロファイル、およびデプロイされた環境でサポートする他のエフェメラは必要ないでしょう。

:実際に「ビルド」ステップがないスクリプト言語のリポジトリの場合、アーティファクトをリリースする簡単な方法は、それらをtarやrpmなどのアーカイブにパッケージ化することです。次に、「展開」するには、アーカイブを展開するか、rpmをインストールします。これにより、デプロイチェーンでgitツールを使用する必要がなくなります(すべてのprodサーバーがこれらの開発ツールを持つわけではありません)。


答えに疑問を呈する(または挑戦する!)こともできます。これがStack Exchangeの優れた点です。実際に「ビルド」ステップを持たないスクリプト言語のリポジトリの場合、アーティファクトをリリースする簡単な方法はパッケージ化ですtarやrpmなどのアーカイブに保存します。次に、「展開」するには、アーカイブを展開するか、rpmをインストールします。これにより、デプロイチェーン内のgitツールが不要になります(すべてのprodサーバーにこれらの開発ツールがあるわけではありません)
RubyTuesdayDONO

1
@ Pierre.Vriensはい、アーカイブをtarすることとして提案されているものが欠落しています。つまり、デプロイに必要なファイルだけでアーティファクトを構築しています。それは質の高い答えではなく、この点を延長する必要があることに同意するということです。私たちはプライベートベータ版であり、答えは明確に示すべきではありません
-Tensibai

そして、私はそれがフィットアーカイブに向けたポイントにいた場合、これは、より多くの受け入れ答えよりももたらすか見ていない...それだけで冗長だ、あなたは私見このように拡張するために編集する必要があります
Tensibai

1
回答の編集内容を確認してください(興味深いコメントを統合してください)。もちろん、自由に改善/リワークしてください。または、私の編集がまったく気に入らない場合は、単にロールバックしてください。ところで、あなたのコメント(=私が追加したメモ)は、「本当に簡単ですか。zOSで物事を成し遂げる方法のサンプル... ダウンタイムゼロの zで...」のように思わせました。同様のコメントを介して、より多くの質問/回答を疑問視する時が
来たと思い

私はこれが完全な回答またはモデルの回答であることを主張しませんが、部屋の象に対処する他の人を見たことはありません:gitを使用してプロジェクトを「展開」すると、「悪い時間を過ごす」 ;)
RubyTuesdayDONO

6

質問履歴なしでGitから単一のリビジョンを取得する方法はありますか?

リポジトリを取得する方法はありません。主に「改訂」がないためです。Gitストアのコミット。以前の状態からの変更です。
特定の時点でリポジトリが必要な場合は、この時点でコミットとそのすべての祖先をプルする必要があります。そうしないと、コミットで行われた変更のみが取得されます。

混乱を避けるために:浅いクローン作成は必要な履歴を取得し、それを空き領域に切り捨てますが、ツリーはまだ履歴から作成されます。

ソリューションについては、@ 7ochemの回答で解決できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.