Как да направя промени в имената на файловете само чувствителни към малки и големи букви в Git?

Промених името на няколко файла, като разделихме първата буква, както в Name.jpg , в Name.jpg . Git не разпознава тези промени и трябваше да изтрия файловете и да ги кача отново. Има ли начин, по който git може да бъде чувствителен към регистъра при проверка за промени в имената на файловете? Не съм направил никакви промени в самия файл.

930
16 июля '13 в 20:41 2013-07-16 20:41 - попита Джил Шулман на 16 юли в 13: 41 \ t
@ 11 отговора

Можете да използвате git mv :

 git mv -f OldFileNameCase newfilenamecase 
1144
03 янв. Отговорено от Keith Smiley на 03 януари 2014-01-03 18:57 '14 в 18:57 2014-01-03 18:57

Git има конфигурационен параметър, който указва дали трябва да е чувствителен или нечувствителен: core.ignorecase . За да укажете на Git стойността на семеен случай, просто задайте този параметър на false :

 git config core.ignorecase false 

документация

От документацията за git config :

border=0

core.ignorecase

Ако е вярно, тази опция ви позволява да използвате различни решения, така че Git да работи по-добре на файлови системи, които не са чувствителни към малки и големи букви, като например FAT. Например, ако списъкът с директории открие makefile файл, когато Git очаква makefile , Git ще приеме, че той наистина е един и същ файл и продължава да го помни като makefile .

Стойността по подразбиране е false, с изключение на git -clone (1) или git -init (1) ще проверява и задава core.ignorecase true, ако е необходимо при създаването на хранилище.

Файлови системи без чувствителност

Двете най-популярни операционни системи, които не разполагат с файлови системи, които не са чувствителни към регистъра, които познавам

  • за прозорци
  • OS X
754
17 июля '13 в 1:52 2013-07-17 01:52 отговорът е даден от user456814 17 юли '13 в 1:52 2013-07-17 01:52

Това е, което направих в OS X:

 git mv File file.tmp git mv file.tmp file 

Две стъпки, защото в противен случай имам грешка "файл съществува". Може би това може да се направи в една стъпка чрез добавяне на --cached или такова.

93
13 нояб. Отговор, даден от Sijmen Mulder 13 ноември 2013-11-13 17:27 '13 в 17:27 2013-11-13 17:27

Използвайки SourceTree, успях да направя всичко това от потребителския интерфейс.

  • Преименувайте FILE.ext в който whatever.ext да whatever.ext
  • етап
  • Сега преименувайте FILE.ext в FILE.ext
  • Повторете отново този файл.

Това е малко досадно, но ако трябва само да направите няколко файла, това е доста бързо.

87
28 окт. отговор, даден от Chris Barr 28 октомври 2016-10-28 17:40 '16 в 17:40 2016-10-28 17:40

В OSX можете да използвате Disk Utility, за да създадете образ / диск на твърдия диск, за да избегнете този проблем и да избегнете други проблеми с разработката във файловата система без чувствителност по случай.

Стартирайте помощната програма за диска, създайте нов образ на диска и използвайте следните настройки (или го променете по ваш вкус, но запазете чувствителни към малки и големи букви):

2019

37
03 окт. отговорът е даден от user1821510 03 oct. 2014-10-03 22:18 '14 в 22:18 ч. 2014-10-03 22:18

Понякога е полезно временно да се промени чувствителността на делата в Git. Два възможни метода:

Метод 1:

git -c core.ignorecase=true checkout mybranch за деактивиране на чувствителността на случаите за една команда за checkout . Или по-общо: git -c core.ignorecase= <<true or false>> <<command>> . (Благодаря на VonC за това, че предложи в коментарите.)

Метод 2:

За да промените настройка за по-дълъг период (например, ако трябва да изпълните няколко команди, преди да я промените отново):

  1. git config core.ignorecase (връща текущите настройки, например false ).
  2. git config core.ignorecase <<true or false>> - задайте желания нов параметър.
  3. ... изпълнява няколко други команди ...
  4. git config core.ignorecase <<false or true>> - връща конфигурационната стойност на предишната стойност.
15
10 июля '18 в 14:05 2018-07-10 14:05 отговори на Стив Чембърс 10 юли, 18 в 14:05 часа 2018-07-10 14:05

1) Преименувайте файла name1.jpg на name1.jpg

2) поправете изтрития файл Name.jpg

3) преименувайте файла name1.jpg на Name.jpg

4) добавете добавения файл Name.jpg към предишния ангажимент

 git add git commit --amend 
14
03 окт. отговор, даден razon 03 oct. 2016-10-03 22:13 '16 в 22:13 часа 2016-10-03 22:13

Опитах следните решения от другите отговори и те не работят:

Ако вашето хранилище се хоства в GitHub, подобно на моя, можете да преименувате файла в източника (GitHub.com) и да накарате преименуването на файла отгоре надолу.

Инструкциите по-долу зависят от типа на файла, който се опитвате да преименувате, т.е. от вида на файла, който GitHub счита за редактируем (код, текст и т.н.) или не може да се редактира (изображение, двоичен файл и др.) ,

  1. Посетете GitHub.com
  2. Отидете в хранилището си на GitHub.com и изберете клона, в който работите
  3. Използвайки инструмента за навигация на файла на сайта, преминете към файла, който ще преименувате.
  4. GitHub ви позволява да редактирате файл в браузър?
    • а.) редактируеми
      1. Кликнете върху иконата „Редактиране на този файл“ (изглежда като молив)
      2. Променете името на файла в записа с име на текстов файл
    • б) не може да се редактира
      1. Отворете бутона "Изтегляне" в нов раздел и запишете файла на компютъра си.
      2. Преименувайте изтегления файл
      3. В предишния раздел в GitHub.com кликнете върху иконата „Изтриване на този файл“ (тя изглежда като кошче за боклук)
      4. Уверете се, че е избран бутонът "Напиши директно на branchname " и кликнете върху бутона "Извършване на промени".
      5. В същата директория на GitHub.com кликнете върху „Качване на файлове“
      6. Изтеглете преименувания файл от компютъра си
  5. Уверете се, че е избран бутонът "Напиши директно на branchname " и кликнете върху бутона "Извършване на промени".
  6. Локално издайте / получете / издърпайте клон
  7. Това е направено
8
31 окт. отговорът е даден от gmeben на 31 октомври 2017-10-31 21:22 '17 в 21:22 2017-10-31 21:22

Mac OSX High Sierra 10.13 поправя това малко. Просто създайте виртуален APFS дял за вашите git проекти, по подразбиране той няма ограничение на размера и не заема място.

  1. В Disk Utility щракнете върху бутона +, когато е избран контейнерният диск.
  2. Изберете APFS (-s задължително) във формата
  3. Наречете го Sensitive
  4. печалба
  5. По избор: Създайте папка в Sensitive с името git и ln -s/Volumes/Sensitive/git/Users/johndoe/git

Вашето устройство ще бъде в /Volumes/Sensitive/

2019

Срещал съм този проблем няколко пъти в 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
3
05 авг. Отговор, даден от Ashwin Jayaprakash 05 Aug 2016-08-05 20:23 '16 в 20:23 2016-08-05 20:23

Когато сте направили много преименуване на файлове и някои от тях просто заменят случая, е трудно да си спомните какво е то. ръчно "git преместване", файлът може да бъде доста полезен. Така че, какво да правя в процеса на промяна на името на файла, изпълнете следните стъпки:

  • изтрийте всички файлове и папки без git в друга папка / хранилище.
  • коригирайте текущата празна папка git (това ще се покаже, когато всички файлове са изтрити.)
  • добавете всички файлове обратно към папката източник на git / хранилище.
  • коригирайте текущата непразна папка git.

Това ще премахне всички проблеми, като не се опитвате да определите кои файлове или папки сте преименували.

2
29 апр. Отговор, даден от Рикардо Виртудазо младши 29 април 2017-04-29 14:00 '17 в 14:00 часа 2017-04-29 14:00