のように、最初の文字を大文字にしないことで、いくつかのファイル名を変更しましName.jpg
たname.jpg
。Gitはこの変更を認識しないため、ファイルを削除して再度アップロードする必要がありました。ファイル名の変更をチェックするときにGitが大文字と小文字を区別する方法はありますか?ファイル自体は変更していません。
git mv
機能します。
のように、最初の文字を大文字にしないことで、いくつかのファイル名を変更しましName.jpg
たname.jpg
。Gitはこの変更を認識しないため、ファイルを削除して再度アップロードする必要がありました。ファイル名の変更をチェックするときにGitが大文字と小文字を区別する方法はありますか?ファイル自体は変更していません。
git mv
機能します。
回答:
git mvを使用できます。
git mv -f OldFileNameCase newfilenamecase
-f
フラグは不要になりました。
-f
ですfatal: destination exists
。そうでない場合、エラーが発生する可能性があります。
Gitには、大文字と小文字を区別するかどうかを指示する構成設定がありますcore.ignorecase
。Gitで大文字と小文字を区別するには、この設定をfalse
次のように設定します。
git config core.ignorecase false
core.ignorecase
trueの場合、このオプションはさまざまな回避策を有効にし、FATなどの大文字と小文字を区別しないファイルシステムでgitが適切に機能するようにします。たとえば、gitがを
makefile
期待しているときにディレクトリリストが見つかった場合Makefile
、gitはそれが実際に同じファイルであると想定し、それを次のように記憶し続けますMakefile
。デフォルトはfalseです。ただし、git-clone(1)またはgit-init(1)は
core.ignorecase
、リポジトリの作成時に必要に応じてプローブし、true を設定します。
私が知っている、大文字と小文字を区別しないファイルシステムを持つ最も人気のある2つのオペレーティングシステムは、
false
は、大文字と小文字を区別しないファイルシステムでこのオプションをに設定することは悪い考えであることに注意してください。これは必ずしも明白ではありません。たとえば、私のMacでこれを試してみたところ、問題が解決すると考えて、ファイルの名前をからproductPageCtrl.js
に変更しましたProductPageCtrl.js
。git status
見た新しいというファイルをProductPageCtrl.js
しかしなかったことを考えるproductPageCtrl.js
削除されていました。新しいファイルを追加してコミットし、GitHubにプッシュすると、GitHubリポジトリには両方のファイルが含まれていました(最新のものと思われる)ローカルリポジトリには1つしかありませんでした。
git mv
ファイルを移動し、gitがそれを管理する方法を確認するために使用します。gitなしでファイルを移動する場合、ファイルシステムがgitに真実を伝えていないため、gitができることは何もありません。これはntfs / fat / hfsなどの問題であり、git / linuxではありません。
SourceTreeを使用して、UIからこれをすべて行うことができました
FILE.ext
を変更whatever.ext
whatever.ext
を変更してくださいfile.ext
少し面倒ですが、いくつかのファイルに対してのみ実行する必要がある場合は、かなり高速です。
これは私がOS Xでやったことです:
git mv File file.tmp
git mv file.tmp file
それ以外の場合は「ファイルが存在します」というエラーが発生したため、2つの手順を実行します。おそらくそれを追加すること--cached
などにより、1つのステップで行うことができます。
-f
(force)はあなたが探しているフラグです
-f
、基礎となるFSで大文字と小文字が区別されない場合、フラグは役に立ちません。しかし、2ステップの解決策は私にとって
-f
ました!先端をありがとう
-f
フラグのないウィンドウのフォルダでも機能しました。
git -c "core.ignorecase=false" add .
コミット用に大文字と小文字が変更されたファイルを考慮します。
Gitの大文字と小文字の区別を一時的に変更すると便利な場合があります。
方法#1-単一のコマンドの大文字と小文字の区別を変更します。
git -c core.ignorecase=true checkout mybranch
1つのcheckout
コマンドの大文字と小文字の区別をオフにします。またはより一般的に:。(コメントでこれを提案したVonCへのクレジット)git -c core.ignorecase=
<<true or false>>
<<command>>
方法#2-複数のコマンドの大文字と小文字の区別を変更します。
設定を長く変更するには(たとえば、元に戻す前に複数のコマンドを実行する必要がある場合):
git config core.ignorecase
(これにより、現在の設定が返されますfalse
)。git config core.ignorecase
<<true or false>>
-必要な新しい設定を設定します。git config core.ignorecase
<<false or true>>
-設定値を以前の設定に戻します。git -c core.ignorecase=<true or false> checkout <<branch>>
ですか?後にリセットするものはありません。
OSXでは、この問題を回避し、大文字と小文字を区別しないファイルシステムでの開発に関するその他の問題を回避するために、ディスクユーティリティを使用して大文字と小文字を区別する仮想ドライブを作成できます。 /ディスクイメージ。
ディスクユーティリティを実行し、新しいディスクイメージを作成し、次の設定を使用します(または必要に応じて変更しますが、大文字と小文字を区別します)。
gitが大文字と小文字を区別するFS上にあることを確認してください。
git config core.ignorecase false
私は他の答えから次の解決策を試しましたが、うまくいきませんでした:
リポジトリがリモートでホストされている場合(GitHub、GitLab、BitBucket)、送信元(GitHub.com)でファイルの名前を変更し、トップダウン方式でファイルの名前を強制的に変更できます。
以下の手順はGitHubに関するものですが、それらの背後にある一般的な考え方は、すべてのリモートリポジトリホスティングプラットフォームに適用する必要があります。名前を変更しようとしているファイルの種類、つまりGitHubがブラウザー内で編集可能(コード、テキストなど)と編集できない(ファイル、バイナリなど)と見なすファイルの種類が重要であることを覚えておいてください。
branchname
ブランチに」ラジオボタンが選択され変更をコミット」ボタンをクリックしますbranchname
ブランチに」ラジオボタンが選択され変更をコミット」ボタンをクリックします@Sijmenの回答と同様に、これはOSXで私がディレクトリの名前を変更するときに機能したものです(別の投稿からのこの回答に触発されています):
git mv CSS CSS2
git mv CSS2 css
単に行うとgit mv CSS css
、無効な引数エラーが発生しました。fatal: renaming '/static/CSS' failed: Invalid argument
おそらくOSXのファイルシステムが大文字と小文字が区別されないためです
ps BTW Djangoを使用している場合、collectstaticも大文字と小文字の違いを認識せず、静的ルートディレクトリでも手動で上記を実行する必要があります。
1)ファイルの名前Name.jpg
をname1.jpg
2)削除されたファイルをコミットする Name.jpg
3)ファイルの名前name1.jpg
をname.jpg
4)name.jpg
前のコミットに追加されたファイルを修正する
git add
git commit --amend
fatal: bad source, source=name1.jpg, destination=name.jpg
はステップ3で取得しています。提案はありますか?Thx
git add
。
私は次の手順を使用しました:
git rm -r --cached .
git add --all .
git commit -a -m "Versioning untracked files"
git push origin master
私にとっては簡単な解決策です
git mvコマンドを使用できます。以下の例では、ファイル名をabcDEF.jsからabcdef.jsに変更した場合、ターミナルから次のコマンドを実行できます。
git mv -f .\abcDEF.js .\abcdef.js
Mac OSX High Sierra 10.13ではこれが多少修正されています。gitプロジェクト用の仮想APFSパーティションを作成するだけです。デフォルトでは、サイズの制限はなく、スペースも必要ありません。
Sensitive
git
、ln -s /Volumes/Sensitive/git /Users/johndoe/git
ドライブが入ります /Volumes/Sensitive/
MacOSでこの問題に何度か遭遇しました。Gitは大文字と小文字を区別しますが、Macは大文字と小文字を区別するだけです。
誰かがファイルをコミットしFoobar.java
、数日後にファイル名を変更することにしましたFooBar.java
。最新のコードをプルすると失敗しますThe following untracked working tree files would be overwritten by checkout...
これを修正する私が見た唯一の信頼できる方法は:
git rm Foobar.java
git commit -m 'TEMP COMMIT!!'
git rebase --continue
git rebase -i HEAD~2
とdrop
TEMP COMMIT!!
FooBar.java
多くのファイル名の変更を行い、その一部が大文字と小文字の変更にすぎない場合、どちらがどれであるかを覚えるのは困難です。手動でファイルを「git move」すると、かなりの作業になる可能性があります。したがって、ファイル名変更タスク中に私が行うことは次のとおりです。
これにより、名前を変更したファイルまたはフォルダーを特定することなく、すべてのケースの問題が修正されます。
git commmit --amend
パラグラフ4ではないのですか?それ以外の場合は、すべてのファイルを削除して、追加のコミットが行われます。またはgit rebase -i
スカッシュと一緒に使用できます。
何もうまくいかない場合は、git rm filenameを使用してファイルをディスクから削除し、再度追加します。
私は@CBarrの回答を受け取り、ファイルのリストでそれを行うためのPython 3スクリプトを作成しました。
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os
import shlex
import subprocess
def run_command(absolute_path, command_name):
print( "Running", command_name, absolute_path )
command = shlex.split( command_name )
command_line_interface = subprocess.Popen(
command, stdout=subprocess.PIPE, cwd=absolute_path )
output = command_line_interface.communicate()[0]
print( output )
if command_line_interface.returncode != 0:
raise RuntimeError( "A process exited with the error '%s'..." % (
command_line_interface.returncode ) )
def main():
FILENAMES_MAPPING = \
[
(r"F:\\SublimeText\\Data", r"README.MD", r"README.md"),
(r"F:\\SublimeText\\Data\\Packages\\Alignment", r"readme.md", r"README.md"),
(r"F:\\SublimeText\\Data\\Packages\\AmxxEditor", r"README.MD", r"README.md"),
]
for absolute_path, oldname, newname in FILENAMES_MAPPING:
run_command( absolute_path, "git mv '%s' '%s1'" % ( oldname, newname ) )
run_command( absolute_path, "git add '%s1'" % ( newname ) )
run_command( absolute_path,
"git commit -m 'Normalized the \'%s\' with case-sensitive name'" % (
newname ) )
run_command( absolute_path, "git mv '%s1' '%s'" % ( newname, newname ) )
run_command( absolute_path, "git add '%s'" % ( newname ) )
run_command( absolute_path, "git commit --amend --no-edit" )
if __name__ == "__main__":
main()