web-dev-qa-db-ja.com

TortoiseGit:新しいフォルダにファイルを移動すると、移動と認識されない

リポジトリ内のいくつかのファイルを新しいフォルダに移動しようとしています。 git/TortoiseGitに、これが削除や複数の追加ではなく移動であることを認識させたいです。
どうすればこれを機能させることができますか? TortoiseGitのドキュメントをチェックしてGoogleを検索しましたが、あまり役に立ちませんでした。

だから、私が持っているのはこの構造です:

repo_root/somefile.txt

私が欲しいもの:

repo_root/new_folder/somefile.txt

もちろん、「somefile.txt」は、移動されるすべてのファイルとフォルダーを表します。

9
Dries

次の点に注意してください:Gitはファイルのコンテンツのみを追跡します

From Moving Files Pro Git book v2のセクション:

他の多くのVCSシステムとは異なり、Gitはファイルの移動を明示的に追跡しません。 Gitでファイルの名前を変更した場合、ファイルの名前を変更したことを示すメタデータはGitに保存されません。しかし、Gitは事後にそれを理解することについてかなり賢いです

そして、移動と名前の変更はGitでも同じです。

したがって、Gitは、移動/名前の変更が自動的に機能することを検出し、それらのファイルが変更されていないことを前提としています

ファイルを移動/名前変更する場合にのみ、Gitは次のことを行います。

  1. 追跡されたファイルが削除され、gitはそのファイルコンテンツのSHA-1を取得します。値は、abcであると想定します。
  2. アントラックファイルが追加され、gitはそのファイルコンテンツのSHA-1を計算します。値もabcであると想定します。
  3. この時点でコミットすると、gitはそれらが同じSHA-1値を持っていることを認識し、名前変更として扱います。

追跡されたファイルをいくつか変更し、それらを他のフォルダーに移動したとします。その後、残念ながら、gitはコミット時に名前の変更/移動としてそれらを自動的に検出できません。

本当にgitに名前の変更/移動を自動的に追跡させたい場合は、実行する必要があります

ファイルを変更せず、1回のコミットでファイルの名前変更/移動のみを行うようにしてください。


ファイルの変更とファイルの移動を同時に行い、GitがTortoiseGitを使用して名前の変更/移動としてそれらを検出するようにしたい場合は、次のようにします。

  1. そのファイルを右クリックし、コンテキストメニューのTortoiseGit -> Rename...項目をクリックします。
  2. ファイル名のプレフィックスnew_folder\、参照: enter image description here
  3. コミット

注:ファイルの名前を1つずつ変更する必要があります。やらなければならない仕事がたくさんあるとします。したがって、ファイルの名前のみを変更することをお勧めします。

注2:ファイルでたくさんを変更すると、gitはそれが名前変更/移動であると理解できません。

14
Yue Lin Ho

TortoiseGitドキュメント から:

作業ツリー内でファイルを移動したい場合、おそらく別のサブフォルダーに移動したい場合は、右マウスのドラッグアンドドロップハンドラーを使用できます。

A.移動するファイルまたはディレクトリを選択します

B.right-dragそれらを作業ツリー内の新しい場所にドラッグします

C.マウスの右ボタンを離す

D.ポップアップメニューでコンテキストメニュー→Gitバージョン管理されたファイルをここに移動を選択します

3
Narvarth

コミットした後、Gitはバックエンドでこれを処理します。コミットされていないファイルを処理している間は、最初は作成と削除を別々のアクションとして扱いますが、コミットした後は、作成を使用して削除を解決し、実際に単なるファイル移動であるかどうかを確認します。 gitがファイルの移動を見つけたときに、「古いファイル==>新しいファイル」というメッセージのあるコミットログでこれを確認できます。

または、安全に感じる場合はgit mvを使用できます https://git-scm.com/docs/git-mv

1
Mike Gonzales