2012-03-12 23 views

答えて

9

バージョン管理下にあるファイルは追跡されます。

小さな例としては、C++プロジェクトは、ソースファイルとして

Makefile 
main.cpp 
interface.hpp 
worker.cpp 

を持っているでしょう。これらをバージョン管理下に置きます。ビルド中に

main.o 
worker.o 
myapp 

が生成されます。これらはバージョン管理の対象ではないため、git addは使用しません。 gitは何が起こるのか気にしないので、は未修正のままです。これらのファイルを.gitignoreに追加するまで(デフォルトで.oファイルは無視されます)、gitは追加するか無視するかを知らないので、決定するまでgit statusコマンドで表示します。

ファイルが追跡されているかどうかは、バージョンによっても異なります。worker.cppを自動生成し、後のバージョンでバージョンコントロールから削除するとします。ファイルは、そのバージョンではuntrackedになりました。ファイルがまだバージョン管理下にあったバージョンに戻ると、gitはチェックアウト中にそのファイルを上書きすることを拒否します。

2

Git Pro book chapterあなたは細部しようとするに人跡未踏のファイルの概念を言及:

あなたが与えられたSHA1をチェックアウトすると、あなたはすべてのバージョン管理ファイルの「スナップショット」を取得します。
このスナップショットで参照されていないファイルはすべて、追跡されません。これは、Gitの木の一部ではありません。
見る「git - how to tell if a file is git tracked (by shell exit code)?

(このGitHub help pageで説明したように)あなたが無視したい任意のファイルは、人跡未踏でなければなりません。

gitは、ルールがこのファイルに追加されて無視される前に既に追跡されていたファイルを無視しないことに注意してください。ファイルがなければならないような場合には
通常git rm --cached filename

enter image description here

4

追跡ファイルである国連は、追跡回添加し、コミットされたのGitが扱う一方(バージョン制御します)。あなたが制御したくない時間ファイルのほとんどは、あなたのコンパイラによって生成されるため、非追跡ファイルはほとんどの時間ファイルです。

追跡されていないファイルを.gitignoreファイルに追加すると、Gitは追跡するかどうか尋ねません。

+2

"追跡されたファイル"は、一度追加されてコミットされたファイルであると言うのは全く間違いです。追跡されたファイルは、単にインデックスツリーに存在するファイルです。つまり、ブランチのチェックアウトや、Git plumbingコマンドの追加によるものであった可能性があります。 – Jazimov

0

純粋に技術的な観点から:追跡されたファイルは単にGitインデックスに存在するファイルです。バージョン管理下のファイルであると言うのは誤解を招きます。これは、ファイルをリポジトリに入れたファイルであることを示しているため、ファイルを追跡する必要はありません。

新しいGitリポジトリを初期化すると、インデックスは空になり、作業ディレクトリ内のすべてのファイルは追跡されません。ファイルがインデックスに追加されると、そのファイルが追跡されます。その時点でSHA-1ハッシュが作成され、オブジェクトエントリは.Git \ Objectsフォルダに配置されます。その瞬間から、Gitは作業ディレクトリ内の同じファイルの内容/名前を比較して、変更、名前変更、削除を追跡することができます。インデックスにファイルが存在する限り、そのファイルは追跡されます。

関連する問題