2017-07-18 13 views
1

作業ディレクトリのファイルを変更すると、gitは変更されたファイルを正確に認識します。どのようにそれを知っていますか?ローカルリポジトリに変更があったとき、gitはどのように知っていますか?

Q1)コミット時にチェックサムを計算し、イベント駆動型の変更(たとえば、作業ディレクトリに作成された新しいファイル)で再計算しますか?

Q2)作業ディレクトリファイルとは別のローカルドライブで、残りのファイルがプロジェクトを増やすにつれて大きくなる場所に保存されますか?私のドライブはいっぱいになっていますC:\Users\<USER NAME>\Downloads\.git\objects私は追跡しようとしていた新しいフォルダを追加して、今私は追跡しようとしていたフォルダを取り消したいと思います、どのように私はそのスペースを取り戻すのですか? ローカルのプロジェクトファイルや他のドキュメントの変更を追跡して、変更されたドキュメントを見て、それらのファイルだけでバックアップを更新するような、GITで何か面白くしようとしていました。

答えて

5

Gitは、ファイルの内容からハッシュを計算し、コミット時にスナップショットを保存します。ハッシュはコンテンツの識別子として使用され、スナップショットを後のバージョンと簡単に比較するために使用されます。

ファイルのコミットバージョンと作業コピーバージョンがある場合、Gitは作業ファイルのハッシュ値を計算し、コミットされたスナップショットからすでに計算されたハッシュ値と比較しなければなりません。ハッシュが同じでない場合、何かが変更されたことがわかります。この計算は、尋ねたときにのみ発生します(例:git statusまたはgit diff)。それは常にそれ自身でチェックしているわけではありません。

Gitはすべてをリポジトリに保存します。これは通常、プロジェクトのルートにある.git/ディレクトリにあります。リポジトリの履歴と内容はすべて内部にあるので、履歴に含まれるものによっては、大きくなることもあります。それは本当にプロジェクトに依存しています。 Gitは内容を圧縮するのには優れていますが、あらかじめ圧縮された大きなファイルを追加する場合は、縮小するだけです。

ご質問にお答えした.git/objects/のディレクトリは、gitリポジトリのメインコンテンツストレージです。すべてのファイルスナップショットとメタデータ(ディレクトリ構造、コミットオブジェクト、タグなど)は、そこに格納されます。したがって、リポジトリフォルダの最大のセクションになるのは普通です。

gitリポジトリを解凍するのは簡単です。.gitフォルダを削除するだけです。ただし、元に戻すことはできません。リポジトリの履歴を失っても問題ない場合は削除してください(GitHubやバックアップコピーのような場所にコピーを作成した場合は、そのコピーに頼っても問題ありません)。

関連する問題