Cum am comis-case-sensitive numai filename schimbari in Git?

Am schimbat câteva fișiere numele de de-capitalizează prima literă, ca în Name.jpg " la " name.jpg`. Git nu recunoaște acest lucru schimbă și am avut de a șterge fișiere și încărcați-le din nou. Există o modalitate prin care Git poate fi case-sensitive, atunci când verificarea pentru schimbări în nume de fișiere? Nu am făcut modificări la fișierul în sine.

Comentarii la întrebare (8)

Puteți utiliza git mv:

git mv -f OldFileNameCase newfilenamecase
Comentarii (16)

Git are o setare de configurare care spune că dacă a fi caz sensibil sau insensibil: de bază.ignorecase`. Spune Git să fie un caz sensibil, pur și simplu setați această setare pentru a "false":

git config core.ignorecase false

Documentația

De git config documentația:

de bază.ignorecase`

Dacă este adevărat, această opțiune vă permite diverse soluții pentru a permite git pentru a lucra mai bine pe sisteme de fișiere care nu sunt cazuri sensibile, cum ar fi GRAS. De exemplu, dacă o listare director găsește makefilegit se așteaptăMakefile, git va presupune că este într-adevăr același fișier, și de a continua să-l amintesc caMakefile`.

implicit este false, cu excepția git-clona(1) sau git init(1) va sonda și setul de bază.ignorecase` adevărat, dacă este cazul când depozitul este creat.

Caz-insensibil fișier-sisteme

Două dintre cele mai populare sisteme de operare care au case-insensitive sisteme de fișiere care nu sunt

  • Windows
  • OS X
Comentarii (20)

Folosind SourceTree am fost în stare să fac asta tot din UI

  1. Redenumire de FIȘIER.ext " la " orice.ext
  2. Etapa acest fișier
  3. Acum redenumire orice.ext " la " fișier.ext
  4. Etapa acest fișier din nou

L's un pic plictisitor, dar dacă aveți nevoie doar pentru a face câteva fișiere de l's destul de repede

Comentarii (6)

Aceasta este ceea ce am făcut pe OS X:

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

Două etape pentru că altfel am luat un "fișierul există" eroare. Poate se poate face într-un singur pas prin adăugarea de --cached sau cum.

Comentarii (7)

Uneori poate fi util să temporar schimbarea Git's caz de sensibilitate. Există 2 moduri de a face acest lucru...

Metoda #1 - Schimbare caz de sensibilitate pentru o singură comandă:

git c-core.ignorecase=true checkout mybranch pentru a opri caz de sensibilitate pentru un singur "checkout" comanda. Sau, mai general: git c-core.ignorecase= <<adevărat sau fals>> <<command>>. (Credit pentru VonC pentru a sugera acest lucru în comentarii.)

Metoda #2 - Schimbare caz de sensibilitate pentru mai multe comenzi:

Pentru a modifica setarea pentru mai mult timp (de exemplu, dacă mai multe comenzi trebuie să fi rulat înainte de a schimba înapoi):

  1. git config de bază.ignorecase (aceasta revine la setarea curentă, de exemplu, "false").
  2. git config de bază.ignorecase <<adevărat sau fals>> - setarea dorită noua setare.
  3. ...Rula mai multe alte comenzi...
  4. git config de bază.ignorecase <<fals sau adevărat>> - set config valoare înapoi la setarea anterioară.
Comentarii (5)

Sub OSX, pentru a evita această problemă și pentru a evita alte probleme cu dezvoltarea într-un caz-insensibil sistemul de fișiere, puteți folosi Disk Utility pentru a creați un caz sensitive unitate virtuală / imagini de disc.

Rula disk utility, de a crea noi imagini de disc, și de a folosi următoarele setări (sau schimba cum vrei tu, dar nu este case sensitive):

Asigurați-vă că pentru a spune git este acum la un caz sensibil FS:

git config core.ignorecase false
Comentarii (5)

Am incercat urmatoarele solutii de alte răspunsuri și le-am't de lucru:

Dacă depozitul este găzduit de la distanță (GitHub, GitLab, BitBucket), puteți redenumi fișierul de origine (GitHub.com) și forța redenumi fișier într-o manieră descendentă.

Instrucțiunile de mai jos se referă la GitHub, însă ideea generală din spatele ei ar trebui să se aplice la orice depozit la distanță-hosting platform. Păstrați în minte tipul de fișier're încercarea de a redenumi materie, care este, dacă-l's un tip de fișier care GitHub consideră editabil (cod, text, etc) sau needitabil (imagine, binare, etc) în browser-ul.

  1. Vizita GitHub.com
  2. Navigați la depozitul de pe GitHub.com și selectați ramura nu're de lucru în
  3. Utilizarea site-ului's de fișier instrument de navigare, navigați la fișierul pe care intenționați să-l redenumiți
  4. Nu GitHub permite să editați fișierul în browser-ul?
  • o.) Editabile
  1. Faceți clic pe "Editați acest fișier" pictograma (se pare ca un creion)
  2. Schimba denumirea în numele fișierului text de intrare
  • b.) Needitabil
  1. Deschideți "Descărcare" buton într-o filă nouă și de a salva fișierul pe computer
  2. Redenumiți fișierul descărcat
  3. În fila anterioară pe GitHub.com, faceți clic pe "Ștergeți acest fișier" pictograma (se pare că un coș de gunoi)
  4. Asigura "Comite direct la branchname` branch" buton radio este selectată și faceți clic pe "Comite modificările" butonul
  5. În același director pe GitHub.com, faceți clic pe "Încărcați fișiere" butonul
  6. Încărcați fișierul redenumit de pe computerul dvs.
  7. Asigura "Comite direct la branchname` branch" buton radio este selectată și faceți clic pe "Comite modificările" butonul
  8. La nivel local, checkout/aduce/trage ramura
  9. Făcut
Comentarii (4)
  1. redenumiți fișierul Name.jpg " la " name1.jpg

  2. a comite eliminat fișierul Name.jpg

  3. redenumiți fișierul name1.jpg " la " name.jpg

  4. integra adăugat fișier name.jpg pentru comiterea precedentă

git add
git commit --amend
Comentarii (3)

Similar cu @Sijmen's a răspunde, aceasta este ceea ce a lucrat pentru mine pe OSX când redenumirea unui director (inspirat din acest răspunsul la un alt post):

git mv CSS CSS2
git mv CSS2 css

Pur și simplu a face git mv CSS css a dat invalid argument de eroare: fatal: redenumirea '/static/CSS' nu a reușit: Invalid argument` poate pentru OSX's sistem de fișiere este majuscule

p.s BTW, dacă sunteți folosind Django, collectstatic, de asemenea, ar't recunoască caz diferența și te'd trebuie sa faci cele de mai sus, manual, în statică directorul rădăcină precum

Comentarii (0)

Am folosit acele următorii pași:

git rm -r --cache . git add-toate . git commit -o -m "Versiunilor untracked fișiere" git push origin master Pentru mine este o soluție simplă

Comentarii (0)

Mac OSX High Sierra 10.13 rezolvă această oarecum. Face doar un virtual APFS partiție pentru git proiecte, implicit nu are nici o limită de dimensiune și ia nici un spațiu.

  1. În Disk Utility, faceți clic pe butonul + în timp ce Recipientul este selectat disk
  2. Selectați APFS (case-Sensitive) în format
  3. Numele acesta "Sensibile"
  4. Profit
  5. Opțional: Faceți un folder în Sensibil numit git și ln-s /Volume/Sensibil/git /Users/johndoe/git

Unitatea va fi în /Volume/Sensibil/

https://stackoverflow.com/questions/17683458/how-do-i-commit-case-sensitive-only-filename-changes-in-git#comment78880496_26185365

Comentarii (1)

Am'am confruntat cu această problemă de mai multe ori pe MacOS. Git este un caz sensibil, dar Mac este singurul caz de conservare.

Cineva comite un fișier: Foobar.java și după câteva zile se decide să redenumiți-l laFooBar.java. Atunci când te trage cele mai recente codul nu reușește cu următoarele untracked de lucru arbore de fișiere ar fi suprascrise de verificare...

Singura modalitate de încredere pe care am'am văzut că stabilește acest lucru este:

  1. git rm Foobar.java
  2. A comis-o cu un mesaj care nu poate lipsi git commit -m &#39;TEMP COMIS-o!!&#39;
  3. Trage
  4. Acest lucru va apărea un conflict forțându-vă pentru a merge la conflict - pentru a schimba șters-o, dar celelalte schimba redenumit (de aici problema) se
  5. Accepta schimbarea care este 'eliminarea'
  6. git rebazare-continua
  7. Acum picătură soluție git rebazare -am CAPUL~2 " și "drop" la " TEMP COMIS-o!!
  8. A confirma că fișierul este numit acum FooBar.java
Comentarii (0)

Când te'am făcut o mulțime de fișier redenumirea și unele dintre ele sunt doar o schimbare de carcasa, l's greu să-mi amintesc care este care. manual "git mișcare" fișier poate fi ceva de lucru. Deci, ce aș face în timpul filename schimba sarcini sunt:

  1. elimina toate non-git fișiere și foldere într-un folder diferit/depozit.
  2. comite curent gol git folder (acest lucru va arăta ca toate fișierele șterse.)
  3. adăugați toate fișierele înapoi în original git folder/depozit.
  4. comite curent non-gol git folder.

Acest lucru va rezolva toate caz de probleme, fără a încerca să dau seama ce fișiere sau foldere-ai redenumit.

Comentarii (1)

Dacă nimic nu a lucrat folosi git rm nume de fișier pentru a șterge fișierul de pe disc și adăugați-l înapoi.

Comentarii (0)

Mi-am luat @CBarr răspuns și a scris un Script Python 3 de-a face cu o listă de fișiere:

``python

!/usr/bin/env python3

-- coding: UTF-8 --

import os import shlex import subproces

def run_command(absolute_path, nume_comandă): de imprimare( "care Rulează", nume_comandă, absolute_path )

de comandă = shlex.split( nume_comandă ) command_line_interface = subproces.Popen( comanda, stdout=subproces.CONDUCTA, cwd=absolute_path )

ieșire = command_line_interface.comunica()[0] print( ieșire )

dacă command_line_interface.returncode != 0: ridica RuntimeError( "Un proces ieșit cu eroare '%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"), ]

pentru absolute_path, oldname, nou nume în FILENAMES_MAPPING: run_command( absolute_path, "git mv '%s' '%s1'" % ( oldname, nou nume ) ) run_command( absolute_path, "git add '%s1'" % ( nou nume ) ) run_command( absolute_path, "git commit -m 'Normalizat \'%s\' cu minuscule numele de'" % ( nou nume ) )

run_command( absolute_path, "git mv '%s1' '%s'" % ( nou nume, nou nume ) ) run_command( absolute_path, "git add '%s'" % ( nou nume ) ) run_command( absolute_path, "git a comis-o ... modifica-nu-editare" )

dacă name == "principal": main() ``

Comentarii (0)