2016-03-20 11 views
2

私は理解しています blob、ツリー、または別の注釈付きタグにgitタグを使ってタグ付けすることは可能です。私はこれを可能にするアーキテクチャと概念的な設計を理解しています。なぜgitタグはブロブかツリー(またはタグ)ですか?

しかし、私は実際のアプリケーションの考え方(または「実際のワークフロー」アプリケーション)を考えていません。

ここでスタックオーバーフローの検索私は、advice not to do soとコミットされていないオブジェクトのタグ付けについて言及した答えが1つしか見つかりませんでした。

の可能性状況いつもコミットしていないオブジェクトにタグを付けることは適切でしょうか?

+1

技術的には、注釈付きタグ*はコミットされていないオブジェクトにタグを付ける例ですが、それはあなたが意味するものではないと思います。 – hvd

+0

@hvd、私は実際にそれを認識しませんでした。それを指摘してくれてありがとう!いずれにしても最終的にコミットに結びつくので、私の疑問はまだ残っています。 – Wildcard

+2

これは標準的な方法ではありませんが、必ずしもワークツリー自体に属しているわけではありません。公式のgitリポジトリの場合、メンテナーの公開sshキーにはそのような方法でタグが付けられます。タグはコミットのツリー内にないため、タグにアクセスする唯一の方法です。 – jpaugh

答えて

3

の輸入の最初のツリーにポイントを作成オブジェクトを直接操作する長期実行のユーティリティー・プログラムでは、一時的に適切である可能性があります。タギングを行うと、git gcを安全に並行して実行できます。ユーティリティープログラムは、タグが完了したとき、コミットが作成されたときにタグを削除します。

+0

これはむしろ不要です。 git gcは、オブジェクトのタイムスタンプを調べて、新しいタイムスタンプを削除しないようにします。そして、そうでなければ、あなたはまだレースがあることがわかります.GCは、オブジェクトを作成した後、タグ付けする前に実行できます。 –

+0

@エドワードトムソン私は「長時間走っている」と書きました。それは例えば以下のように解釈できます。あなたが望むならば、 "一ヶ月の休暇を過ごしたユーザーからの入力を待っています"。 – hvd

0

は、非コミットオブジェクトにタグを付けることが適切であろうあらゆるユースケースがありていますか?

あなたが把握した通りです。私はあなたがしなければならない要約non-commitタギング。

が大きく

なぜコミットあなたは、コード(ホット・フィックス)とのその一部を修正した例えばとしましょうか?
このようにコミットされてから、後で1つのファイルだけが必要であることがわかったためです。
この変更のファイル(コンテンツ)を他のすべてのコンテンツにマークすることなくマークします。

サンプル2:
あなたがタグまたはgit noteを使用することができますが、あなたはtagを使用する1つのファイルをマークするために単一のコミットをマークするために、バグの原因となったファイルを把握しようとしているコードの上に行っています。

他にもいくつかの例があります。


Linuxカーネルリポジトリは、非コミットポインティングタグオブジェクトを有している - 最初のタグは、ソースコードツリー又はブロブをタグ付け

+0

Linuxカーネルの例は本当の例なので良いですが、なぜ最初のコミットとタグ付けしかできないのかわかりません。効果は同じではないでしょうか?最終的にコミットは、とにかくツリーへのポインタに過ぎず、(通常は)他のコミットにもポインタです。 – Wildcard

+0

私はこれに同意します。これを避けてください。それでも、あなたは**オプション**を持っています。あなたは赤色のライトで(そして私たちが知っているように)ドライブするオプションを持つこともできますが、この機能を悪用する場合があります。 – CodeWizard

+0

バグの原因となるコードを作成した後、他のファイルの修正をコミットしたとします。今度は、コミットツリーから修正(単一ファイル)だけを取得したい。目的のコンテンツにタグを付けることでそれを行うことができます。 – CodeWizard

関連する問題