2009-07-29 6 views
8

これはGitが使用している問題トラッカー/フォーラムの問題としてはより適切かもしれませんが、私は最初に確認/説明を受け取りたいと思いました:Gitは名前の変更としてadd/removeを扱いますか?

私はリポジトリに複数のインストーラ実行ファイルをトラッキングしています。

たとえば、foo-1.0.exeが既にリポジトリにあるとします。

foo-2.0.exeを同じディレクトリに追加しました(git add foo-2.0.exe)。次に、foo-1.0.exe(git rm foo-1.0.exe)を削除します。

Gitのステータスで、追加されたファイルが1つ、削除されたファイルが1つ表示されると思います。代わりに、私はこれを取得:分岐マスター
変更にコミットすることで



(使用 "gitのリセットHEADを..." unstageする)
名前を変更:FOO-1.0.exe - > foo2.0.exe

これは私のためのWTFです... 2.0は1.0へのアップデートであると推測するために何らかのヒューリスティックを使用しています...私はそれが意味をなさない方法を見ることができますが、私はこの場合、私はそれをしたいとは思わない。

+1

btw、私はバージョン管理だけをソースコードに使用しています。あなたが良い構築システムを持っている限り、実行ファイルは再現可能でなければなりません。 – yairchu

+0

ハハ。はい、私は知っています - それはそれが行われるべきである方法です。あなたのファンシーワンクリックビルドは、これらの部品を歓迎するものではありません。 (インストーラの中にはサードパーティ製のアプリケーションもあります) – fakeleft

答えて

15

Gitがヒューリスティックを使用していることは間違いありません。 Gitはコンテンツのみを追跡するので、リポジトリにはfoo-1.0.exeが存在し、今はfoo-2.0.exeが存在することがわかります。あなたのケースでは、git statusは利用可能な情報をと推測します。名前が変更されている可能性があります(マイナーチェンジも2つあります)。この推測は、リポジトリに記録されているものには影響しません。

Gitは、リポジトリの履歴をナビゲートするための改良されたツールを提供します。最終的に、Gitは、関数やラインレベルで、リネームやリファクタリング、その他のコード修正を通じて、特定のビットの進化を追跡する方法を提供します。リポジトリがこの情報をあらかじめ格納しなくても、これを行うことができます。

+0

おそらく名前を自動的に検出するようにGitが設定されています( 'diff.renames')。 –

+0

@Jakub - それが期待通りに機能する場合、私はそれを受け入れることができるようにあなたのコメントを答えとしておきたいかもしれません。私はすぐにそれをテストします。 グレッグ、全体的な洞察に感謝します。 – fakeleft

+0

ええと...まあ...私の場合、gitは完全に間違っていて、このようなことが起こらないようにする方法を知っていることは素晴らしいことでした。 –

関連する問題