Як унесці змены ў імёны файлаў толькі з улікам рэгістра ў 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 ў 01: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
  • Зноў паспрабуйце гэты файл

Гэта трохі стомна, але калі вам трэба ўсяго толькі зрабіць гэта некалькі файлаў, гэта даволі хутка

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

Іншыя пытанні па пазнаках або Задайце пытанне