Mai mult
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.
1145
15
Puteți utiliza git mv:
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":
Documentația
De
git config
documentația:Caz-insensibil fișier-sisteme
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
Aceasta este ceea ce am făcut pe OS X:
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.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:
Am incercat urmatoarele solutii de alte răspunsuri și le-am't de lucru:
git mv filename
git rm-f filename
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.
redenumiți fișierul
Name.jpg " la " name1.jpg
a comite eliminat fișierul
Name.jpg
redenumiți fișierul
name1.jpg " la " name.jpg
integra adăugat fișier
name.jpg
pentru comiterea precedentă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):
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 majusculep.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
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ă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
șiln-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
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.
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.
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() ``