web-dev-qa-db-ja.com

GITのコンテキストでの追跡ファイルと未追跡ファイルとは何ですか?

Gitは初めてです。 trackedおよびntrackedファイルとは何ですか? 「Pro Git」を読みましたが、まだよくわかりません。

誰かが例を提供することで私に2つの違いを説明できますか?

28
Nayan Soni

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

小さな例として、C++プロジェクトは

Makefile
main.cpp
interface.hpp
worker.cpp

ソースファイルとして;これらをバージョン管理下に置くことになります。ビルド中、

main.o
worker.o
myapp

生成されます。これらはバージョン管理下にないため、git addを使用しないでください。 gitはそれらに何が起こるか気にしないので、それらは追跡されないのままです。それらを.gitignoreに追加するまで(デフォルトでは.oファイルは無視されます)、gitはそれらを追加するか無視するかを認識しないため、作成するまでgit statusコマンドで表示します。決定。

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

15
Simon Richter

Git Proブックの章 あなたは、追跡されていないファイルの概念を詳しく説明しようとしています:

特定のSHA1をチェックアウトすると、バージョン管理されたすべてのファイルの「スナップショット」が取得されます。
このスナップショットで参照されていないファイルは追跡されません。これはGitツリーの一部ではありません。
git-ファイルがgitで追跡されているかどうかを確認する方法(シェルの終了コードによる)」を参照

無視したいファイルはすべて追跡解除する必要があります(この GitHubヘルプページ で説明しています)。

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

enter image description here

9
VonC

追跡されたファイルは、Gitによって処理(バージョン管理)され、かつて追加およびコミットされたファイルです。追跡されていないファイルは、ほとんどの場合、制御されたくないファイルです。たとえば、コンパイラによって生成されるためです。

追跡されていないファイルを.gitignoreファイルに追加して、Gitが追跡するかどうか尋ねないようにします。

7
CharlesB

純粋に技術的な観点から:追跡ファイルは、Gitインデックスに存在するファイルです。これが「バージョン管理下」のファイルであると言うのは誤解を招くものです。これは、それがリポジトリに組み込まれたファイルであることを示唆しており、ファイルを追跡する必要がないためです。

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

4
Jazimov