211

Git でやや紛らわしい質問があります。たとえば、コミットされたファイルdir1/A.txtがあり、git がコミットの履歴を保持しているとします。

ここで、ファイルをコピーする必要がありますdir2/A.txt(移動ではなくコピー)。git mvコマンドがあることは知っていますが、dir2/A.txtと同じコミット履歴が必要であり、そこにとどまる必要があります。dir1/A.txtdir1/A.txt

コピーが作成されたら更新する予定はなくA.txt、今後のすべての作業は上で行われますdir2/A.txt

紛らわしいと思いますが、この状況は Java ベースのモジュール (Mavenized プロジェクト) にあることを付け加えておきます。お客様が実行時に 2 つの異なるバージョンを使用できるように、新しいバージョンのコードを作成する必要があります。アライメントが完了すると、バージョンは最終的に削除されます。もちろん、Maven のバージョン管理を使用できます。私は Git の初心者であり、ここで Git が提供できるものに興味があります。

4

7 に答える 7

85

Subversion とは異なり、git にはファイルごとの履歴がありません。コミット データ構造を見ると、以前のコミットと、このコミットの新しいツリー オブジェクトのみを指しています。コミットによってファイルが変更されるコミットオブジェクトには、明示的な情報は保存されません。また、これらの変更の性質。

変更を検査するツールは、ヒューリスティックに基づいて名前の変更を検出できます。たとえば、「git diff」には、名前変更の検出をオンにするオプション -M があります。そのため、名前を変更する場合、「git diff」を実行すると、1 つのファイルが削除され、別のファイルが作成されたことが示されますが、「git diff -M」を実行すると、実際に移動が検出され、それに応じて変更が表示されます (「man git diff」を参照してください)。詳細)。

したがって、git では、これは変更をコミットする方法の問題ではなく、コミットされた変更を後でどのように見るかという問題です。

于 2013-06-05T10:43:11.433 に答える
10

完全を期すために、制御されたファイルと制御されていないファイルでいっぱいのディレクトリ全体をコピーする場合は、次を使用できることを追加します。

git mv old new
git checkout HEAD old

制御されていないファイルはコピーされるため、クリーンアップする必要があります。

git clean -fdx new
于 2014-01-29T11:29:14.920 に答える