Я змінюю великі літери каталогів, і Git, здається, не отримує його


139

Я розробляю проект на OS X Lion, який знаходиться під контролем версій Git. У мене були ці маленькі каталоги, а пізніше вони були написані великими літерами (наприклад, emailaddresses => EmailAddresses), але Git, схоже, не визнає зміни. Він все ще вважає, що каталоги мають малі літери, коли я запускаю git ls-filesта інші команди.

Це нешкідливо, чи я повинен зробити щось інше, щоб змусити Git взяти участь у цій зміні?



Це створило для мене плутанину протягом 2 днів. Тепер я розумію. Thnx для цього питання
Number945

Відповіді:


199

Ви, ймовірно, використовуєте HFS +, нечутливий до регістру (але зберігаючи регістр). Я зазвичай працюю так:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
Це те саме питання, яке я маю, і це я роблю.
папороть

3
Була така ж проблема з інструментом Github для Windows. Знову вищезазначене рішення добре вирішує проблему: перейменуйте у тимчасовий файл у Windows Explorer, а потім - після вчинення - перейменуйте на остаточне ім’я з правильним регістром.
Джейсон

9
Або зробити це в одній команді: мерзотник мв --force SomeName SomeName (від stackoverflow.com/a/16071375/217866 )
jackocnr

1
Щоб зміни відображалися у віддаленому репо, вам також потрібно git push origin master. Якщо git відмовляється оновити пульт, можливо, вам доведеться додати фіктивний файл (наприклад touch stam) і зробити натиск. Потім слід видалити штемпель і натиснути знову.
Рахав

2
Варто зазначити, що вам потрібно знаходитись у папці, де працює цей файл. Спочатку мені це було не очевидно, і я продовжував отримувати >>> неправильне джерело, source = деяке ім'я, призначення = tmpname <<<, тому що я намагався запустити команду з кореня репо.
Parth Tamane

280

Ви можете сказати git взяти до уваги справу, запустівши

git config core.ignorecase false


4
Дійсно чудова відповідь, якщо ви вже змінили імена файлів, не використовуючи git mv --force чи якийсь інший скрипт CL. Дякую!
MeanMatt

4
Це чудова відповідь, оскільки я не особливо відчував, як git mv'ing 200 перейменованих файлів вручну!
Адам Рейс

1
Погодилися, що це має бути головна відповідь. Дякую.
HomerPlata

1
чомусь він копіював усі файли, тепер у мене змінилися як оригінальні версії, так і версії з великою літери ...
Salatiel,

1
@Salatiel Я думаю, він копіює їх, коли ви вже відстежуєте файл.
Іггі

36

Як git mv на Mac Case-Sensitively

Це відбувається тому, що 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.
Девід Манперл

Але я був у підкаталозі мого репортажу Git… Зрештою, я вирішив це за допомогою відповіді Тарана , BTW. Дякую.
2540625

19

Спробуйте змінити параметр git config core.ignorecase на false на ваш .gitconfig файл.


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.

Оскільки папка / файл є однієюAAA і тією самою нечутливою до регістру файловою системою, перейдіть до засобів, що рухаються як .aaaAAAaaaAAAaaa/AAA

Тож варто робити

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

Я сподіваюся, що вам це стане в нагоді.


1

Причиною цього є те, що ОС або macOS на основі LINUX ігнорують регістр імені файлу / папки. Нам потрібно вирішити цю проблему за допомогою наведених нижче кроків

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 - Подивіться на ваші файли git у пошуку. Ви можете зробити це, ввівши це на терміналі:

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

2 - Перезапустіть пошук і перейдіть до каталогу проектів

3 - Тепер просто змініть назву вашої папки, скажімо, з Feature на функцію. І ось ти йдеш.


0

Ви також можете це зробити вручну, не використовуючи команди GIT. Всередині .gitпапки просто видаліть папку з потрібним ім'ям, тобто SomeName. А потім перейменуйте папку somenameв SomeName. Детальніше на сторінці: Як виправити назву папки, встановлену на великі регістри, та перетворити git в малі регістри


0

У мене була та сама проблема, і я використовую рішення нижче. Я використовую це для перейменування пакетів, каталогів та файлів тощо:

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

Як детально тут.


0

Жодне з них насправді не допомогло мені, я все ще мав git сказати мені, щоб приховати свої зміни, тому що моя ситуація полягала в тому, що моя локальна папка була написана з великої літери, але віддалена, а моя гілка позаду, і я більше не міг тягнути через відмінності в капіталізації файлів у структурі папок.

Єдиний спосіб, як я міг це виправити, - це видалення моєї локальної філії та перевірка віддаленого.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.