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.
Puteți utiliza git mv:
git mv -f OldFileNameCase newfilenamecase
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
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 makefile
git se așteaptă
Makefile, git va presupune că este într-adevăr același fișier, și de a continua să-l amintesc ca
Makefile`.
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.
Două dintre cele mai populare sisteme de operare care au case-insensitive sisteme de fișiere care nu sunt
Folosind SourceTree am fost în stare să fac asta tot din UI
de FIȘIER.ext " la " orice.ext
orice.ext " la " fișier.ext
L's un pic plictisitor, dar dacă aveți nevoie doar pentru a face câteva fișiere de l's destul de repede
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):
git config de bază.ignorecase
(aceasta revine la setarea curentă, de exemplu, "false").git config de bază.ignorecase
<<adevărat sau fals>>
- setarea dorită noua setare.git config de bază.ignorecase
<<fals sau adevărat>>
- set config valoare înapoi la setarea anterioară.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
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.
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
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.
git
și ln-s /Volume/Sensibil/git /Users/johndoe/git
Unitatea va fi în /Volume/Sensibil/
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 la
FooBar.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:
git rm Foobar.java
git commit -m 'TEMP COMIS-o!!'
git rebazare-continua
git rebazare -am CAPUL~2 " și "drop" la " TEMP COMIS-o!!
FooBar.java
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:
Acest lucru va rezolva toate caz de probleme, fără a încerca să dau seama ce fișiere sau foldere-ai redenumit.
Mi-am luat @CBarr răspuns și a scris un Script Python 3 de-a face cu o listă de fișiere:
``python
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() ``