Gitリポジトリで、ディレクトリの名前を正しく変更するにはどうすればよいですか?


655

私はそれが目的の名前で新しいディレクトリに名前を変更するディレクトリをコピーするために動作するはずだと思うし、古いディレクトリを削除し、そしてgit addgit commitそしてpushすべてのもの。しかし、これは最善の方法ですか?



5
Gitに関する限り、コピーと削除は移動と同じです。Gitは(コピー+削除)と(移動)の両方を同じ方法で記録します。
ディートリッヒエップ2012年

回答:


1183

基本的な名前変更(または移動):

git mv <old name> <new name>

大文字と小文字を区別する名前変更-例 from casesensitiveからCaseSensitive—2つのステップを使用する必要があります。

git mv casesensitive tmp
git mv tmp CaseSensitive

Gitでの大文字と小文字の区別の詳細…

…コミットとプッシュが後に続くのは、gitリポジトリのディレクトリの名前を変更する最も簡単な方法です。


231
しかし、あなたがから名前を変更したい場合casesensitiveCaseSensitive、この方法を行うことができます git mv casesensitive Tempし、その後 git mv Temp CaseSensitive
ViliusK

3
すべてのログと統計を保存しますか?
オレズヴァニ2014年

23
@ViliusK大文字と小文字を区別するディレクトリを処理している場合、私が見つけた簡単な方法でgit rm -rf --cached path/to/your/directories、再度追加してコミットします
dtothefp

1
しかし、なぜGITがパッケージ/ディレクトリの名前変更を適切にサポートしていないのですか?別のフォルダを作成する必要があるのはなぜですか。パッケージの名前を変更すると、違いとしてそれを取り、コミットとプッシュ時にそれを処理するべきではありませんか?
アーメド

1
どうもありがとうございました。私にとっては、最初にgit config core.ignorecase falseコマンドを実行してから、続けてコマンドを実行する必要があり、2番目の部分ではsource is emptyエラーが発生しました。
リカ

107

このエラーを受け取った場合:致命的: 'foldername'の名前変更に失敗しました:無効な引数

これを試して:

git mv foldername tempname && git mv tempname folderName


8
これは、ディレクトリで大文字と小文字を変更するために必要なことです。
cjserio 2015

トークン「&&」は、このバージョンでは有効なステートメントセパレータではありません。gitバージョン2.11.0.windows。
ティムハーディ

@Timハーディは、それは、2つの別々のコマンドとして実行することができますgit mv foldername tempnameし、git mv tempname folderNameWindows上で動作するはずです。
ラーケイス2018年

これは動作しません !最終結果は、新しい「folderName」フォルダを「tempname」フォルダ内に配置します
賭け

61

1.フォルダの名前をoldfolderからnewfolderに変更します

git mv oldfolder newfolder

2.新規フォルダをリポジトリにすでに存在する&あなたはそれを上書きして使用したい場合: -

git mv -f oldfolder newfolder

git mvで名前を変更した後、インデックスに変更を追加してコミットすることを忘れないでください。

3.大文字と小文字を区別しないファイルシステムでのfoldernameの名前をfolderNameに変更

通常のmvコマンド(git mvではない)を使用した単純な名前変更は、gitからのファイル変更として認識されません。次の行のように「git mv」コマンドで試してみると

git mv foldername folderName

大文字と小文字を区別しないファイルシステムを使用している場合、たとえばMacを使用していて、大文字と小文字を区別するように構成していない場合、次のようなエラーメッセージが表示されます。

致命的: 'foldername'の名前変更に失敗しました:無効な引数

そして、それを機能させるためにあなたができることは次のとおりです:-

git mv foldername tempname && git mv tempname folderName

これは、最初にフォルダの名前を完全に異なるフォルダ名に変更することにより、名前変更プロセスを分割します。別のフォルダー名に名前を変更した後、最終的にフォルダーの名前を新しいfolderNameに変更できます。これらの「git mv」の後、再び、変更を追加してコミットすることを忘れないでください。これはおそらく美しいテクニックではありませんが、完璧に機能します。ファイルシステムはまだ大文字と小文字の変更を認識しませんが、gitはそれを新しいフォルダ名に名前変更するために認識します。


9

ファイルシステムを使用してディレクトリの名前を変更できます。次に、あなたが行うことができますgit rm <old directory>し、git add <new directory>ヘルプページ)。その後、コミットしてプッシュできます。

Gitは内容が同じであり、名前変更操作であることを検出し、履歴の名前変更エントリとして表示されます。あなたが使用するコミットの前にこれが事実であることを確認することができますgit status


12
ちょっと、でもこのようにして、私はコミット履歴全体を失います。
ViliusK 14

1
-followフラグを使用すると、保持できます。
Oleksi 2014

1つではなく2つのコマンドで、フラグを追加する必要がありますか?これはgit mvよりも優れていますか?
antgel 14

4
@topperいいえ、git mvはrm + addのエイリアスです。git mvを使用する方が優れたソリューションです。
Oleksi 14

5
@topperファイルの移動に使用する方法に関係なく、履歴を表示するには--followを使用する必要があることに注意してください。
Oleksi 14

3

Webアプリケーションからはできないと思いますが、Gitクライアントですべてのフォルダーの名前を変更できます。ファイルは新しい名前が変更されたフォルダーに移動し、コミットしてリモートリポジトリにプッシュします。

私は非常に似た問題 を抱えていました異なるフォルダーの名前を大文字から小文字に変更する必要があり(Abc-> abcなど)、すべてのフォルダーの名前を( 'abc___'などの)ダミー名に変更し、リモートリポジトリにコミットした後、すべてのフォルダーの名前を小文字で(abcのように)元の名前に変更しました。


0

2つのステップで解決しました。mvコマンドを使用してフォルダの名前を変更するには、そのための権限が必要です。権限がない場合は、次の手順に従ってください。casesensitiveをCasesensitiveに名前変更したいとします。

手順1:エクスプローラーで、フォルダーの名前を(大文字と小文字を区別して)別の名前に変更します。たとえば、大文字と小文字を区別して名前をfolder1に変更すると、この変更がコミットされます。

手順2:この新しく名前が付けられたフォルダー(folder1)の名前を、大文字と小文字を区別する予定の名前(Casesensitive)に変更します。folder1の名前をCasesensitiveに変更します。この変更をコミットします。


0

大文字と小文字を区別する名前の変更についてgit mv somefolder someFolderは、以前は機能していましたが、なぜか今日は機能しませんでした。したがって、回避策として、新しいフォルダを作成し、のtempすべてのコンテンツをsomefolderに移動しtemp、削除しsomefolder、コミットしtemp、次にを作成しsomeFolder、にすべてのコンテンツをtempに移動しsomeFolder、削除しtemp、コミットし、プッシュsomeFolderして、うまくいきました。someFoldergitのように表示されます。


-16

フォルダの名前を変更するだけです。gitは「コンテンツトラッカー」なので、SHA1ハッシュは同じで、gitは名前を変更することを知っています。変更されるのはツリーオブジェクトだけです。

rm <directory>
git add .
git commit

1
これは常に機能するとは限りません。それは確かに私にとってはうまくいきませんでした。20%のファイル...のような
トマーシュFejfar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.