ディレクトリの大文字と小文字を変更すると、Gitがそれを認識しないようです


139

Gitバージョン管理下にあるOS X Lionでプロジェクトを開発しています。私はこれらの小文字のディレクトリを持っていて、後でそれらを大文字にしました(例えばemailaddresses => EmailAddresses)が、Gitは変更を認識していないようです。それでも、私がgit ls-files他のコマンドを実行すると、ディレクトリは小文字であると見なされます。

これは無害ですか、それともGitにこの変更を反映させるために何か他のことをする必要がありますか?



これは私に2日間混乱を引き起こしました。今私はそれを手に入れました。この質問の
Thnx

回答:


199

おそらく大文字小文字を区別しない(ただし大文字小文字を区別する)HFS +を使用しています。私は通常、これを次のように処理します:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
これは私が持っているのと同じ問題であり、これは私がやっていることです。
シダフェレット2011

3
Github for Windowsツールでも同じ問題がありました。再び上記の解決策は問題をうまく回避します:Windows Exploerで一時ファイルに名前を変更し、次に-コミットした後-大文字と小文字を区別して最終的な名前に名前を変更します。
Jason

9
または1つのコマンドでそれを行う:gitのMV --force somenameのsomenameの(からstackoverflow.com/a/16071375/217866
jackocnr

1
変更をリモートリポジトリに反映するには、も行う必要がありgit push origin masterます。gitがリモートの更新を拒否した場合、ダミーファイル(例:)を追加touch stamしてプッシュを実行する必要がある場合があります。続いてstamを削除し、もう一度プッシュします。
Rahav

2
これを機能させるには、ファイルがあるフォルダーにいる必要があることに注意してください。最初は明らかではなく、>>>不正なソース、source = somename、destination = tmpname <<<を繰り返し取得しました。これは、リポジトリのルートからコマンドを実行しようとしたためです。
Parth Tamane

280

次のコマンドを実行すると、ケースを考慮するようにgitに指示できます

git config core.ignorecase false


4
git mv --forceまたは他のCLスクリプトを使用せずにファイル名をすでに変更している場合は、本当に素晴らしい答えです。ありがとうございました!
MeanMatt 2016

4
200個の名前を変更したファイルを手動でgit mvするようなことは特にしなかったので、これは優れた答えです。
アダム・レイス

1
これが一番の答えであることに同意しました。ありがとうございました。
HomerPlata

1
何らかの理由ですべてのファイルが複製されましたが、元のバージョンと大文字と小文字が変更されたバージョンの両方が存在します...
サラティエル

1
@Salatielすでにファイルを追跡しているときに、それらを複製していると思います。
イギー

36

Macで大文字小文字を区別してmvをgitする方法

これは、Mac OS Xが大文字と小文字を区別する機能を実装しているためです。

他の回答の二重の名前変更の提案は機能しますが、ベストプラクティスの結果を得るには、「-force」の使用をお勧めします。

$ git mv --force somename SomeName


注:強制オプションなしで試してみると、gitは次のようにあなたを攻撃します:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

上記の例では、gitコマンドは失敗し、ファイルシステムまたはgitのインデックスでファイルは変更されません。


最初のコマンドで、を取得しfatal: not under version controlます。
2540625

その致命的なエラーは、その場所にGITリポジトリがないことを意味します。gitコマンドは、GITリポジトリのあるディレクトリでのみ機能します。
David Manpearl 2015

しかし、私はGitリポジトリのサブディレクトリにいました...結局、Taranの回答 BTWを介してそれを解決しました。ありがとう。
2540625

19

.gitconfigファイルでgit設定オプションcore.ignorecaseをfalseに変更してみてください。


4
または書き込みgit config core.ignorecase false
iforgotmypassword

2
@iforgotmypassword =あなたはそれに答えるべきだった-私はあなたのために実際に投票しただろう
Abdeali Chandanwala

4

次の手順で問題を解決できました。

  1. フォルダの名前を次のように変更しますtemp

    mv Folder temp                  // It will rename your Folder to temp
    
  2. ステージングとコミット:

    git add .
    git commit -m "Temp"
    
  3. tempフォルダの名前を任意に変更します。

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

完了-これでプッシュできます。


1

git mv AAA aaaまたはを実行するとgit mv -f AAA aaa、機能せず、エラーが発生しますfatal: renaming 'AAA' failed: Invalid argument

ためAAAaaaしているONE SAME大文字小文字を区別しないファイルシステム上のフォルダ/ファイル、移動AAAaaa手段が移動するAAAようaaa/AAA

だからあなたはすべきです

git mv AAA aaa.1
git mv aaa.1 aaa

お役に立てれば幸いです。


1

これは、LINUXベースのOSまたはmacOSがファイル/フォルダー名の大文字と小文字を区別することを無視するためです。以下の手順でこの問題を解決する必要があります

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

これらの解決策はどれも私にとってうまくいきませんでした。SourceTreeは常に、私が望んでいたものとは異なるケースで私のブランチを作成していました。だから私がそれを解決した方法は:

1-Finderでgitファイルを確認します。ターミナルで次のように入力して実行できます。

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2-ファインダーを再起動し、プロジェクトディレクトリに移動します

3-次に、フォルダ名を変更します。たとえば、Featureからfeatureに変更します。そして、あなたは行き​​ます。



0

私は同じ問題があり、以下の解決策を使用しました。私はこれをバッチ、ディレクトリ、ファイルの名前変更などに使用します:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

詳細はこちら。


0

これらのどれも実際には私を助けませんでした、私の変更は隠しておくようにgitに指示していました。私の状況は、ローカルフォルダーが大文字でリモートがそうではなく、ブランチが遅れていて、ファイルの大文字の違いのためにプルできなくなったためです。フォルダ構造内。

これを修正できる唯一の方法は、ローカルブランチを削除してリモートをチェックアウトすることでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.