私はgitリポジトリを持っていますが、現在それを使用しているのは私だけです。ルートフォルダの下にあるすべてのファイルとフォルダを取得して、新しいフォルダに入れたいと思います。
現在の構造:
メイン-> src res
新しい構造:
メイン-> app1 src res
ファイルがgit履歴を失わないようにする方法はありますか?
私はgitリポジトリを持っていますが、現在それを使用しているのは私だけです。ルートフォルダの下にあるすべてのファイルとフォルダを取得して、新しいフォルダに入れたいと思います。
現在の構造:
メイン-> src res
新しい構造:
メイン-> app1 src res
ファイルがgit履歴を失わないようにする方法はありますか?
先に進みましょう。ファイルとディレクトリを移動します。ディレクトリの再構築と同じコミットでファイルを編集しないように注意してください。
Gitはコンテンツトラッカーであり、ファイルトラッカーではありません。ファイルを移動/名前変更したが、それらのファイルの内容に他の変更を加えなかった場合、Gitはツリーオブジェクトを書き換えるだけです。ファイルblobは、ディレクトリ操作によって変更されません。ディレクトリの場所情報は、ツリーオブジェクトに個別に保存されます。
実際の名前変更の検出は、ブロブとツリーを比較し、ファイル間の類似性の構成可能なパーセンテージを探すことによって処理されます。これは、Gitが実際に移動や名前の変更を直接保存しないことを意味します。コミット間の違いからそれらを計算します。
これらすべての結果は、履歴が特定のファイル名またはディレクトリ構造に関連付けられていないことです。これはほとんどのユースケースで非常にうまく機能しますが、名前の変更をファーストクラスの操作として追跡するBazaarのようなシステムとは対照的です。
ファイルを移動するだけで、Gitは移動が行われたことに気付く(または気付くはずです)。それは歴史を保ちます。
何らかの理由で移動に気付かない場合は、--find-copies-harder
オプション付きの差分を使用してみてください。
一部のファイルを移動または名前変更すると、履歴も失われました。しかし、私はTortoiseGitとSourceTreeアプリケーションに手を伸ばそうとしていました。
git bashコマンドを実行しようとすると、履歴を確認できることがわかりました。
$Git log
その理由についてインターネットで数時間過ごした後、ついに私は自分の答えを見つけました。
Tortoise gitのデフォルト設定で、実際のファイル履歴だけを表示します。つまり、ファイルやフォルダを移動した場合に名前を変更すると、履歴が表示されなくなります。表示履歴については、TortoiseGit設定のチェックボックスの下をクリックする必要があります。