40

私はgitリポジトリを持っていますが、現在それを使用しているのは私だけです。ルートフォルダの下にあるすべてのファイルとフォルダを取得して、新しいフォルダに入れたいと思います。

現在の構造:

メイン->
  src
  res

新しい構造:

メイン->
  app1
    src
    res

ファイルがgit履歴を失わないようにする方法はありますか?

4

3 に答える 3

53

TL; DR

先に進みましょう。ファイルとディレクトリを移動します。ディレクトリの再構築と同じコミットでファイルを編集しないように注意してください。

なぜそれが機能するのか

Gitはコンテンツトラッカーであり、ファイルトラッカーではありません。ファイルを移動/名前変更したが、それらのファイルの内容に他の変更を加えなかった場合、Gitはツリーオブジェクトを書き換えるだけです。ファイルblobは、ディレクトリ操作によって変更されません。ディレクトリの場所情報は、ツリーオブジェクトに個別に保存されます。

実際の名前変更の検出は、ブロブとツリーを比較し、ファイル間の類似性の構成可能なパーセンテージを探すことによって処理されます。これは、Gitが実際に移動や名前の変更を直接保存しないことを意味します。コミット間の違いからそれらを計算します。

これらすべての結果は、履歴が特定のファイル名またはディレクトリ構造に関連付けられていないことです。これはほとんどのユースケースで非常にうまく機能しますが、名前の変更をファーストクラスの操作として追跡するBazaarのようなシステムとは対照的です。

于 2012-05-31T08:14:53.103 に答える
7

ファイルを移動するだけで、Gitは移動が行われたことに気付く(または気付くはずです)。それは歴史を保ちます。

何らかの理由で移動に気付かない場合は、--find-copies-harderオプション付きの差分を使用してみてください。

于 2012-05-31T06:15:33.600 に答える
3

一部のファイルを移動または名前変更すると、履歴も失われました。しかし、私はTortoiseGitSourceTreeアプリケーションに手を伸ばそうとしていました。

git bashコマンドを実行しようとすると、履歴を確認できることがわかりました。

$Git log

その理由についてインターネットで数時間過ごした後、ついに私は自分の答えを見つけました。

Tortoise gitのデフォルト設定で、実際のファイル履歴だけを表示します。つまり、ファイルやフォルダを移動した場合に名前を変更すると、履歴が表示されなくなります。表示履歴については、TortoiseGit設定のチェックボックスの下をクリックする必要があります。

ここに画像の説明を入力してください

于 2019-03-25T13:59:48.283 に答える