То есть, удалил из солюшена по-очереди каждый проект и пересоздал их с новыми именами (а не просто по F2).
Потом сделал ещё 35 коммитов. Сегодня их все кучей залил. Захожу на гитхаб, а там видно все 6 папок. 3 со старыми именами и 3 с новыми.
Это почему? Как удалить старые?
В этом солюшене я тоже так же переименовывал. Но там видно только папки с новыми именами.
Если через GUI клиент типа того что в студии, то по идее должно быть видно все удаления/переименования в списке измененных файлов при создании коммита, или даже автоматически добавит в staged для следующего коммита если удалять через интерфейс IDE (в IDE Jetbrains так).
Не знаю, что такое staged. А почему они должны где-то отображаться, если в новых коммитах их больше нет?
Например, почему на гитхабе старые папки видно, если в коммите их нет? Ведь если из проекта удалить ненужный более файл - его больше не видно в новых коммитах.
И почему во втором проекте всё нормально?
То есть можно изменить два файла сразу, но закомитить как отдельные коммиты. Или даже части одного файла если добавлять в staged отдельные hunk’и вместо всех изменений файла. Stage lines of code in Visual Studio | Microsoft Learn
Чё за фигня?
Я 15 минут назад это делал. Выдавало:
PS H:\Projects\CSharp\YouTube API> git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
PS H:\Projects\CSharp\YouTube API>
А теперь выдаёт:
PS H:\Projects\CSharp\YouTube API> git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: Console test/App.config
deleted: Console test/Console test.csproj
deleted: Console test/Program.cs
deleted: Console test/Properties/AssemblyInfo.cs
deleted: Console test/packages.config
deleted: GUI test/App.config
deleted: GUI test/Form1.Designer.cs
deleted: GUI test/Form1.cs
deleted: GUI test/Form1.resx
deleted: GUI test/GUI test.csproj
deleted: GUI test/Program.cs
deleted: GUI test/Properties/AssemblyInfo.cs
deleted: GUI test/Properties/Resources.Designer.cs
deleted: GUI test/Properties/Resources.resx
deleted: GUI test/Properties/Settings.Designer.cs
deleted: GUI test/Properties/Settings.settings
deleted: GUI test/packages.config
deleted: YouTube API/App.config
deleted: YouTube API/Properties/AssemblyInfo.cs
deleted: YouTube API/Properties/Resources.Designer.cs
deleted: YouTube API/Properties/Resources.resx
deleted: YouTube API/Properties/Settings.Designer.cs
deleted: YouTube API/Properties/Settings.settings
deleted: YouTube API/YouTube API.csproj
deleted: YouTube API/packages.config
no changes added to commit (use "git add" and/or "git commit -a")
PS H:\Projects\CSharp\YouTube API>
Так, стоп. Я понял! Это я из папки с проектом старые папки удалил. В проекте они не были задействованы, а на HDD продолжали лежать. То есть, при pushе уходит не только то, что отображается в вижуалке, а вообще всё, что лежит в папке
Торвальдс, нельзя так делать!
По-идее, вместо gitignore должен быть gitinclude со списком всех включённых в проект файлов, даже если их миллион! Это во всех смыслах намного логичнее!
Ничего непонятно, как они переименовались-то если не были задействованы, но по ссылке выше написано же, что в студии есть два режима создания коммита: Commit All или самому добавлять (Commit Staged).
Ну и в обоих показано что будет в коммите, надо смотреть )
Непонятно что это решит, но можно сделать через gitignore: убрать всё и отменять через !
Ну яж говорю - удалил проекты из солюшена и пересоздал их заново с новыми именами. Проекты со старыми именами продолжали лежать на HDD (я про них и забыл), но в вижуалке к солюшену не были подключены. То есть - были незадействованы.
Почему же они тогда во все следующие коммиты попали?
Тогда другой логический вопрос. Почему вижуалка сама этого не сделала, если я удалил эти проекты из солюшена? Зачем они нужны в следующих коммитах, если я их удалил? Они даже нигде не отображались.
Это решило бы то, что в коммит не смогло попасть ничего лишнего. Только то, что юзер пропишет сам. Конечно, это было бы неудобно, если в проекте миллион файлов. Но зато безопасно
Можно было бы какую-нибудь GUIёвину запилить для редактирования этого gitinclude. Чтобы кучу файлов вручную не прописывать.
Это имеет смысл если корень репозитория находится в помойке и надо комитить только небольшую часть. Например, папка юзера ОС и надо комитить конфиги.
В остальных случаях это никому не надо, только лишняя сложность.
Надо в любом случае смотреть что попадет в коммит перед его созданием, а то может случайно что-то удалил, не то изменил, забыл убрать отладочные эксперименты, животное по клавиатуре пробежало.
И это в студии по умолчанию кнопка, чтоб закомитить всё. В других клиентах и в консоли обычно не так. Там надо самому сначала добавить всё нужное в staged (есть конечно кнопка Добавить Всё, но всё равно больше вероятность заметить если что-то не так, чем совсем одна кнопка).
Я обычно так комичу: открываю первый файл в списке измененных, смотрю что там, добавляю (дальше гиткракен сам переключает на следующий).
Если сотни измененных файлов, то переключить список в режим дерева.
Показано количество всех категорий изменений (12 изменено, 23 добавлено, 45 удалено, 67 переименовано), можно обратить внимание если оно не соответствует ожиданиям.
И да, переименованные обычно отображаются как переименованные,а не просто добавленные и удаленные.
“Закоммитить всё” должно означать “Закоммитить всё, что включено в солюшен и было изменено”, а не “Закоммитить вообще всё, что лежит в директории с солюшеном, включая все файлы во всех поддиректориях, даже если это не включено в солюшен/проект”.
Это когда в консоли работаешь - да. Должен сам за всем следить.
А тут у нас GIUёвая IDE со своими кнопочками. Я пользуюсь тем, что предоставляет её интерфейс (GUI). Удаляю из проекта лишние файлы/папки и больше их не вижу. Следовательно, я думаю, что этого больше нет. Нафига эта дурацкая IDE пихает в коммиты то, что к проекту больше не подключено?
Вот я об этом и говорю Был бы gitinclude - тогда бы ничего лишнего в принципе не смогло попасть в коммит.
А если каких-то файлов не существует, а они прописаны - гит бы сначала проверял наличие всех прописанных файлов - и если какой-то отсутствует - отображал это как изменение. После коммита удалял бы его из gitinclude.
А, я понял. Вы про другое. Ну да, следить всегда надо