現在のディレクトリのすべてのファイルを新しいディレクトリに移動して履歴を保持する方法を教えてください。現在のディレクトリのすべてのファイルをサブディレクトリに移動して履歴を保持します
私が試してみました:
git mv . old_app
をしかし、私は得る:
fatal: bad source, source=, destination=old_app/
現在のディレクトリのすべてのファイルを新しいディレクトリに移動して履歴を保持する方法を教えてください。現在のディレクトリのすべてのファイルをサブディレクトリに移動して履歴を保持します
私が試してみました:
git mv . old_app
をしかし、私は得る:
fatal: bad source, source=, destination=old_app/
私は、これはあなたがやっている無効な操作だと思います。
現在のディレクトリ(pwd).
を現在のディレクトリの内側にある別のディレクトリに移動することはできません。たとえmv
コマンドが機能しません。出力は、GitのMVに*使用
mv: cannot move ‘.’ to ‘someDir/.’: Device or resource busy
を言うようにも
git mv * someDir
fatal: can not move directory into itself, source=curDir, destination=curDir/someDir
を言う1つのディレクトリレベルを移動し、目的のディレクトリに移動するディレクトリを選択します。この場合でもあなたは、子ディレクトリ内で移動する親ディレクトリを作成することはできません。親ディレクトリの内容/ファイルは、親ディレクトリ自体ではなくターゲットディレクトリに移動することができます。
私はこのエラーメッセージを偶然見つけました。明らかに解決策は非常に簡単です。
まず、mv
とgit move
があることを覚えておいてください。
通常のbash移動の使用法は、mv * ./subDir
です。これにより、警告が生成されますが、ファイルは移動されます。移動致命的なエラーを生成し、中止します用法git mv * ./subDir
とgit mv
一方
:
fatal: can not move directory into itself, source=currentDir/subDir, destination=currentDir/subDir/subDir
git mv
作品を作るための解決策は単純です:
git mv -k * ./subDir
option -k
単純にすべてのアクションをスキップすることエラーが発生します。
正規表現を使用できるように、Extended Globbingを有効にする必要があります。
グロブをフィーチャーしたコマンドを実行する前に入力し、このコマンド:
$ shopt -s extglob
(あなたはこのを毎回入力したくない場合は、あなたもあなたの~/.bash_profile
にこれを追加することができます)
その後のことができます。
:これはあなたのフォルダ構造であれば例えば$ git mv ./!(exclude_me|exclude_me) ./destination_folder
次の構文を使用します。
root
├── aardvark
├── contrib
| ├── folder1
| └── folder2
├── custom
| ├── folder1
| └── folder2
├── elephant
├── hippopotamus
└── zebra
そして、あなたはroot
ディレクトリで次のコマンドを実行します。
$ shopt -s extglob
$ git mv ./!(custom|contrib) ./contrib
あなたはこれで終わるだろう:
root
├── contrib
| ├── aardvark
| ├── elephant
| ├── folder1
| ├── folder2
| ├── hippopotamus
| └── zebra
└── custom
├── folder1
└── folder2
は-n
フラグを追加しますが、テストの実行をしたいされており、コマンドがエラーなしで実行されることを確認してください:
$ git mv -n ./!(exclude_me|exclude_me) ./destination_folder
私の答えを見る方法これはエラーを抑制することなく拡張グローブを使用します。 – featherbelly