Як внести зміни в імена файлів тільки з урахуванням регістра в Git?

Я змінив ім'я декількох файлів, розділивши першу букву, як в Name.jpg , на Name.jpg . Git не розпізнає ці зміни, і мені довелося видалити файли і завантажити їх знову. Чи є спосіб, який Git може бути чутливий до регістру при перевірці змін імен файлів? Я не вніс жодних змін в сам файл.

930
16 июля '13 в 20:41 2013-07-16 20:41 заданий Gil Shulman 16 липня '13 о 20:41 2013-07-16 20:41
@ 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 значення case-senstive, просто встановіть для цього параметра значення false :

 git config core.ignorecase false 

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

З git config документація :

border=0

core.ignorecase

Якщо значення true, цей параметр дозволяє використовувати різні способи обходу, щоб Git працював краще в файлових системах, які не чутливі до регістру, наприклад FAT. Наприклад, якщо список каталогів виявляє makefile , коли Git очікує makefile , Git буде вважати, що це дійсно той же файл, і продовжувати запам'ятовувати його як makefile .

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

Нечутливі до регістру файлові системи

Дві найпопулярніші операційні системи, які не мають файлових систем без регістра, які я знаю, є

  • для Windows
  • OS X
754
17 июля '13 в 1:52 2013-07-17 01:52 відповідь дан user456814 17 липня '13 в 1:52 2013-07-17 1: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
  • Знову повторіть цей файл

Це трохи втомлює, але якщо вам потрібно всього лише зробити це кілька файлів, це досить швидко

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 Жовтня. 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 відповідь дан Steve Chambers 10 липня '18 о 14:05 2018-07-10 14:05

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

2) зафіксувати віддалений файл Name.jpg

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

4) додає доданий файл Name.jpg до попереднього фіксації

 git add git commit --amend 
14
03 окт. відповідь дан razon 03 Жовтня. 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. У Дисковою утиліті натисніть кнопку +, коли обраний для перевантаження контейнерів диск
  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... overwritten by checkout 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 Серпня. 2016-08-05 20:23 '16 о 20:23 2016-08-05 20:23

Коли ви зробили багато перейменування файлів, а деякі з них - просто заміна корпусу, важко пригадати, що є. вручну "git переміщення", файл може бути вельми корисною. Отже, що б я робив в процесі зміни імені файлу, виконайте такі дії:

  • видаліть всі файли і папки без git в іншу папку / репозиторій.
  • фіксувати поточну порожню папку git (це буде відображатися в міру віддалення всіх файлів.)
  • додати всі файли назад у вихідну папку git / репозиторій.
  • фіксувати поточну непорожню папку git.

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

2
29 апр. відповідь дан Ricardo Virtudazo Jr 29 Квітня. 2017-04-29 14:00 '17 о 14:00 2017-04-29 14:00

Інші питання по мітках або Задайте питання