
リポジトリ内のいくつかのファイルを新しいフォルダーに移動しようとしています。git / TortoiseGit に、これが削除や複数の追加ではなく移動であると認識してもらいたいです。
どうすればこれを機能させることができますか? TortoiseGit のドキュメントを確認し、Google で検索しましたが、あまり役に立たないようです。
つまり、私が持っている構造は次のようになります。
repo_root/somefile.txt
私が欲しいもの:
repo_root/new_folder/somefile.txt
もちろん、「somefile.txt」は移動されるすべてのファイルとフォルダーを表します。
答え1
一つ覚えておいてください:Git はファイルの内容のみを追跡します。
からファイルの移動Pro Git ブック v2 のセクション:
他の多くのVCSシステムとは異なり、Gitはファイルの移動を明示的に追跡しません。Gitでファイルの名前を変更しても、ファイル名を変更したことを伝えるメタデータはGitに保存されません。しかし、Gitは事後にそれを認識するのが非常に賢いです。
また、Git では移動と名前変更は同じことです。
それで、Gitは移動/名前変更を自動的に検出しますが、そのファイルは変更されていないという前提でのみ機能します。。
Git は、ファイルを移動または名前変更する場合にのみ次の処理を実行します。
- 追跡されたファイルが削除されると、git はそのファイル コンテンツの SHA-1 を取得し、その値が であると想定します
abc
。 - 追跡されていないファイルが追加されると、git はそのファイル コンテンツの SHA-1 を計算し、値
abc
も であると想定します。 - この時点でコミットすると、git はそれらが同じ SHA-1 値を持っていると判断し、名前変更として扱います。
追跡されているファイルの一部を変更し、それらを別のフォルダーに移動したとします。残念ながら、git はコミット時にそれらの名前変更/移動を自動的に検出できません。
gitで名前の変更や移動を自動的に追跡したい場合は、あなたがする必要がある:
ファイルを絶対に変更しないでください。また、1 回のコミットでのみファイルの名前変更/移動を行ってください。
ファイルの変更とファイルの移動を同時に行い、TortoiseGit を使用して git がそれらを名前変更/移動として検出するようにしたい場合は、次のようになります。
- そのファイルを右クリックし、
TortoiseGit -> Rename...
コンテキスト メニューの項目をクリックします。 new_folder\
ファイル名の プレフィックスについては、次を参照してください。- 専念
注意: ファイルを 1 つずつ名前変更する必要があります。作業量が多くなると想定されます。したがって、ファイルの名前のみを変更する方がよいでしょう。
注2: 変更した場合たくさんファイル上では、git はそれが名前変更/移動であることを認識できません。
答え2
作業ツリー内でファイルを別のサブフォルダーなどに移動したい場合は、マウスの右ボタンによるドラッグ アンド ドロップ ハンドラーを使用できます。
A. 移動したいファイルまたはディレクトリを選択します
B.右ドラッグ作業ツリー内の新しい場所に移動します
C. マウスの右ボタンを放す
D. ポップアップメニューで選択コンテキストメニュー → Git バージョン管理されたファイルをここに移動
答え3
Git はコミット後にバックエンドでこれを処理します。コミットされていないファイルを処理している間は、最初は作成と削除を別々のアクションとして扱いますが、コミット後は、実際にはファイルの移動だけだったかどうかを確認するために、作成で削除を解決しようとします。Git がファイルの移動を検出したとき、コミット ログで「古いファイル ==> 新しいファイル」というメッセージが表示されるので、自分で確認できます。
あるいは、より安全だと感じる場合はgit mvを使用することもできます。 git のドキュメント