Git Оформление заказа, удаление и изменение файлов - PullRequest
1 голос
/ 03 февраля 2020

Прежде всего, я вижу, что есть некоторые вопросы по этой теме c, и я прошел через них, но теперь смог решить мою проблему. Большинство других вопросов, похоже, относятся к EOL, и в моем случае, похоже, к ней больше.

Проблема: git checkout - изменение и удаление файлов.

Я столкнулся с Эта проблема и началась с клонирования новой копии репозитория сегодня утром, поэтому на данный момент в этом репо git было ограниченное количество изменений.

Env:

  • Использование терминала Git Bash, работающего в ConEmu, на Windows 10
  • Открыть код Visual с источником git tab
  • Откройте GitKraken, который является git управляющим приложением
  • git --version = "git версия 2.23.0. windows .1"
  • git config --get core.autocrlf = "true"

Перечислил другие запущенные git связанные приложения, так как я чувствую, что они могут внести определенный вклад

Как вы можете видеть на скриншоте ниже, у меня есть выполните следующее:

  1. Сбросьте мою ветку-кандидата, так как у меня был измененный файл
  2. Сделано git status, чтобы продемонстрировать, что в локальной ветке-кандидате нет измененных файлов
  3. Выполнено извлечение в ветви функций (PDEV-937). Это ветвь функции другого пользователя, которую я извлек из источника.
  4. git status, чтобы показать, что у меня есть изменения в моем рабочем каталоге. Эти изменения кажутся удаленными файлами или файлами, которые были изменены путем удаления всего содержимого (оставлена ​​одна пустая строка).

enter image description here

Я могу Не объясняйте модификацию файла на кассе, и самая неприятная часть в том, что ничего не делается последовательно. Сразу после первого скриншота я попытался сбросить ветку функции, чтобы она соответствовала оригиналу. Вы можете видеть, что каждый сброс достиг своего состояния (я продолжал сброс, и после еще двух вызовов у меня была работа напрямую, без изменений, наконец).

enter image description here

Мой желаемый результат заключается в том, что проверка git не изменяет и не удаляет файлы (это мое ожидание)

Обновление: Кажется, я сталкиваюсь с этой проблемой только при проверке веток другого указанного c разработчика для проверки кода. Он использует Linux, а я Windows, хотя я не понял, как это вызывает проблему; это также очень последовательно. Я могу клонировать репо, сделать проверку указанной ветки c и все в порядке. Сделайте несколько вишневых пиков / сбросов / слияний в этой ветви, а затем в следующей ветви функций, которую я извлечу, будут снова изменяться файлы. Клонируйте репо бесплатно sh и оформите вторую функцию, и все снова будет хорошо.

1 Ответ

0 голосов
/ 03 февраля 2020

Это может произойти, если в хранилище есть файлы с одинаковыми именами, но в разных случаях. Вы можете проверить с помощью git ls-files.

Вот демонстрация на OS X. OS X по умолчанию не учитывает регистр, но я создал файловую систему с учетом регистра для создания тестового репозитория.

$ cd /Volumes/CaseSensitive/tmp/
$ git init test
Initialized empty Git repository in /Volumes/CaseSensitive/tmp/test/.git/
$ cd test
$ echo 'lowercase' > foo
$ git add .
$ git commit -m 'lowercase file'
$ git checkout -b upcase
$ echo 'uppercase' > Foo
$ git commit -m 'uppercase file'

У нас есть хранилище с foo в основной ветке и с foo и Foo в upcase. Давайте клонируем его в нечувствительную к регистру файловую систему.

$ git clone /Volumes/CaseSensitive/tmp/test
Cloning into 'test'...
done.

$ cd test
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

На ветке master все в порядке с foo. Теперь посмотрим, когда мы проверяем ветку upcase с обоими foo и Foo.

$ git checkout upcase
Switched to branch 'upcase'
Your branch is up to date with 'origin/upcase'.

$ git status
On branch upcase
Your branch is up to date with 'origin/upcase'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   foo

no changes added to commit (use "git add" and/or "git commit -a")

$ git ls-files
Foo
foo

Git пытается поместить оба файла на диск, но один перезаписывает другой.


Единственное реальное решение - не иметь файлы с одинаковым именем, но с другим регистром. Войдите в файловую систему с учетом регистра и переименуйте эти файлы. Вы можете попробовать сделать каталоги чувствительными к регистру .

...