webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Git: име на файл се връща към наследено име след всяко клониране

Преди имах файл с име ViewMVC.java, който съдържаше декларация на ViewMVC клас.

По-късно реших да преименувам класа на ViewMvc. В резултат на това името на файла се промени на ViewMvc.java. Пуснах тази промяна в дистанционно преди много време.

Проблемът, с който се сблъсквам, е, че когато клонирам отдалечено репо, файлът се изтегля като ViewMVC.java (името на класа е ViewMvc, както се очаква). С други думи - по някаква причина името на файла се връща към наследено име.

Опитах се да сменя името отново и да натисна дистанционно, но проблемът не се решава по този начин.

Някакви идеи защо се случва това и как мога да разреша този досаден проблем?

27.03.2017

  • Каква ОС използвате? Чудя се дали нечувствителните към малки и малки букви файлови системи на Windows играят роля в хаоса... 27.03.2017
  • @MarkAdelsberger Използвам микс. Моят работен плот е Windows, лаптопът е OSX и сега се опитвам да изведа сървър за непрекъсната интеграция на centOS. Но съм склонен да вярвам, че оригиналният комит, който промени името на файла, е направен на Windows... 27.03.2017
  • Както Windows, така и OSX използват по подразбиране съпоставяне без значение за главни и малки букви, така че MVC и Mvc да са един и същ файл. Git има копче за конфигурация, core.ignoreCase, за да му каже дали да вярва, че това са един и същи файл или различни файлове. Простото ощипване на копчето не е напълно достатъчно, тъй като използването на копчето от Git е да усети как операционната система ще се справи с него и ви трябват и Git и операционната система, за да бъде случай - чувствителен (както е CentOS) тук. Що се отнася до най-добрия начин да го поправя, избягвам Windows; Бих могъл да тествам на OSX, но не съм, така че не знам. 27.03.2017
  • stackoverflow.com/questions/10523849/ stackoverflow.com/questions/6899582/ stackoverflow.com/questions/26014660/ stackoverflow.com/questions/17683458/ 27.03.2017

Отговори:


1

Според дискусията в коментарите, мисля, че проблемът е, че git всъщност не смята, че сте променили нещо, когато сте преименували файла. Искате да вижда ViewMVC.java като изтрит и ViewMvc.java като нов файл (който понякога ще докладва като ViewMVC.java renamed to ViewMvc.java), но предполагам, че поради настройките за нечувствителност към главни и малки букви той просто каза „не, нищо не е променено, което има значение“.

Проблемът тогава е, че дървовидният обект - по същество текстов файл, който се чете като списък с директории - все още има старите главни букви. Отново поради настройките за нечувствителност към главни букви, той с радост ще адресира файла, използвайки различни главни букви, ако такива съществуват по този начин в работното дърво; но при клониране по подразбиране е капитализацията в дървовидния обект.

И така, трябва да го накарате да актуализира дървовидния обект (в идеалния случай във всеки ангажимент за съвет, който ви интересува).

В система с fs, чувствителен към малки и главни букви (и git config, зададен съответно) можете просто да клонирате репото, да преместите файла (отново), git add ., да използвате git status, за да потвърдите, че вижда преименуване, и да извършите комит.

За да го поправя на система Windows, единственото нещо, което мисля да опитам, е да изтрия файла, да го ангажирам, след това да създам отново файла с правилно име на файл с главни букви и да го направя отново.

27.03.2017
  • Под пресъздаване, разбира се, имам предвид нещо като git checkout HEAD^ -- ViewMVC.java, преименуване на файла, след това git add и т.н. 27.03.2017
  • Страхотно обяснение. В крайна сметка просто промених името на машината с centOS и натиснах промените. 27.03.2017

  • 2

    Това се случва в нашия проект от време на време, когато някой преименува файл със същото име с различен регистър.

    Тъй като git не е чувствителен към малки и главни букви по подразбиране, можете да го промените в настройките, но най-лесното и бързо решение би било да преименувате файла на ViewMvc1.java > ангажиране и натиснете > преименувайте отново на ViewMvc.java > ангажирайте и натиснете.

    27.03.2017
    Нови материали

    Записване на грешки — Как да записвате грешки във вашето приложение, за да ги отстраните по-късно
    Записването на грешки е важна част от „обработването на грешки“. Накратко, когато възникнат определени грешки в програмите, вие искате да знаете за това. Това е особено важно при грешки. Ти..

    Кратко въведение в теорията на графите
    Кратко въведение в теорията на графите Втора част: внедряване на python на пълни графики В моята предишна статия въведох три основни концепции за графите: върхове, ръбове и тегла. В тази..

    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано, искам...
    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано искам да обясня защо машинното обучение има значение. За да бъда съвсем..

    Какво е структурно типизиране и как Typescript го използва в своя полза?
    Всички знаят тези дни, че „Typescript е строго синтактично надмножество на JavaScript и добавя незадължително статично въвеждане към езика.“. Но какво всъщност означава? Защо миграцията от..

    3 начина за премахване на дубликати от масив в Javascript
    Вие сте уеб разработчик? Програмист ли си? Тогава ще сте запознати с JavaScript и различните му вградени функции, методи и т.н. за различни реализации, проблеми и цели. Един от тези широко..

    Архитектура и обучение на конволюционни невронни мрежи (7 точки):
    Тази публикация предоставя подробности за архитектурата на Конволюционната невронна мрежа (CNN), функциите и обучението на всеки слой, завършвайки с резюме на обучението на CNN...

    Създайте разширение за Chrome с помощта на Angular
    Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..