目次
説明
他のVCSシステムとは異なり、Gitはファイル移動操作を明示的に追跡しません。Gitでファイルの名前が変更された場合、ウェアハウスに保存されているメタデータは、これが名前変更操作であることを反映しません。しかし、Gitは非常に賢く、何が起こったのかを推測します。
使用する
git mvコマンドを使用して、ファイルまたはディレクトリを別のファイルまたはディレクトリに移動するか、名前を変更します。
git mv <path> <target_path>
道 | ファイルの現在のパス |
target_path | ファイルのターゲットパス |
説明
git mvコマンドは、実際にはmvコマンドとgitaddコマンドのコレクションです。たとえば、システムディレクトリのlogin.pyをユーザーディレクトリに移動します。
git mv system/login.py user/login.py
これは、次のコマンドの効果と一致しています。
mv system/login.py user/login.py
git add user/login.py
例
ローカルウェアハウスのreadmd_en.mdをreadme.mdに変更します。
$ ll
total 0
drwxr-xr-x 4 liushuochen staff 128 11 15 15:08 ./
drwxr-xr-x+ 124 liushuochen staff 3968 11 15 15:09 ../
drwxr-xr-x 12 liushuochen staff 384 11 15 15:09 .git/
-rw-r--r-- 1 liushuochen staff 0 11 15 15:08 readme_en.md
$ git mv readme_en.md readme.md
$ ll
total 0
drwxr-xr-x 4 liushuochen staff 128 11 15 15:10 ./
drwxr-xr-x+ 124 liushuochen staff 3968 11 15 15:10 ../
drwxr-xr-x 12 liushuochen staff 384 11 15 15:10 .git/
-rw-r--r-- 1 liushuochen staff 0 11 15 15:08 readme.md
$ git commit -m "modify readmd_en.md to readmd.md"
[master aa02620] modify readmd_en.md to readmd.md
1 file changed, 0 insertions(+), 0 deletions(-)
rename readme_en.md => readme.md (100%)
予防
存在しないファイルを移動する
存在しないファイルを移動すると、git mvコマンドは次のエラーを報告します:致命的:不正なソース
$ git mv a.txt b.txt
fatal: bad source, source=a.txt, destination=b.txt
移動のターゲットパスが存在しません
移動先のパスが存在しない場合、gitmvはエラーの宛先ディレクトリが存在しないことを報告します。
たとえば、次のファイル構造のプロジェクトでは、最も外側のreadme.mdをconfigディレクトリ(存在しないディレクトリ)に移動します。
$ tree .
.
├── conf
│ └── readme.md
└── readme.md
1 directory, 2 files
$ git mv readme.md config/
fatal: destination directory does not exist, source=readme.md, destination=config/
移動先のパスに同名のファイルが存在します
移動するターゲットパスに、移動するファイルと同じ名前のファイルがある場合、gitmvはエラーの宛先が存在することを報告します。
たとえば、次のファイル構造のプロジェクトでは、最も外側のreadme.mdをconfディレクトリに移動します。
$ tree .
.
├── conf
│ └── readme.md
└── readme.md
1 directory, 2 files
$ git mv readme.md conf/
fatal: destination exists, source=readme.md, destination=conf/readme.md
ウェアハウスの外にファイルを移動する
パスが正しい場合でも、git mvを使用してウェアハウス内のファイルをウェアハウスの外に移動しようとすると、gitmvはエラーを報告します。
$ git mv readme.md ../
fatal: '../' is outside repository