Лишние папки в проекте

Есть солюшен из трёх проектов:

Сначала проекты назывались неправильно - вот так:

  • Console test
  • GUI test
  • YouTube API

Потом я их переименовал:

  • YouTubeApiLib.ConsoleTest
  • YouTubeApiLib.GuiTest
  • YouTubeApiLib

То есть, удалил из солюшена по-очереди каждый проект и пересоздал их с новыми именами (а не просто по F2).
Потом сделал ещё 35 коммитов. Сегодня их все кучей залил. Захожу на гитхаб, а там видно все 6 папок. 3 со старыми именами и 3 с новыми.
Это почему? Как удалить старые?

В этом солюшене я тоже так же переименовывал. Но там видно только папки с новыми именами.

Если через GUI клиент типа того что в студии, то по идее должно быть видно все удаления/переименования в списке измененных файлов при создании коммита, или даже автоматически добавит в staged для следующего коммита если удалять через интерфейс IDE (в IDE Jetbrains так).

В вижуалке старых вообще не видно. Только новые.

Не знаю, что такое staged. А почему они должны где-то отображаться, если в новых коммитах их больше нет? :thinking:
Например, почему на гитхабе старые папки видно, если в коммите их нет? Ведь если из проекта удалить ненужный более файл - его больше не видно в новых коммитах.
И почему во втором проекте всё нормально?

Ну в гите же для создания коммита обычно надо добавить изменения в staged.
Git - Recording Changes to the Repository

То есть можно изменить два файла сразу, но закомитить как отдельные коммиты. Или даже части одного файла если добавлять в staged отдельные hunk’и вместо всех изменений файла.
Stage lines of code in Visual Studio | Microsoft Learn

Но в VS похоже по умолчанию выбрано Commit All и должно просто коммитить всё если не переключить в Commit Staged Make a Git commit in Visual Studio | Microsoft Learn

Ну они должно были быть помечены как удаленные в том коммите.
Здесь этого нет Переименование, исправление, рефакторинг · BlackMightyRavenDark/YouTube-API@aa41646 · GitHub так что видимо что-то пошло не так (записи об удалении были исключены при создании коммита) и они должны где-то отображаться при создании коммита в студии.

Если нет, то странно, как вариант можно просто заново клонировать с гитхаба, удалить, закомитить )

Если они остались непомеченными, это ведь можно как-то через консоль узнать? Это и в новых коммитах должно где-то отображаться?

git status

Чё за фигня? :dizzy_face:
Я 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>

Так, стоп. Я понял! :point_up: Это я из папки с проектом старые папки удалил. В проекте они не были задействованы, а на HDD продолжали лежать. То есть, при pushе уходит не только то, что отображается в вижуалке, а вообще всё, что лежит в папке :man_facepalming: :man_facepalming: :man_facepalming:
Торвальдс, нельзя так делать! :japanese_goblin:
По-идее, вместо gitignore должен быть gitinclude со списком всех включённых в проект файлов, даже если их миллион! Это во всех смыслах намного логичнее!

Ничего непонятно, как они переименовались-то если не были задействованы, но по ссылке выше написано же, что в студии есть два режима создания коммита: Commit All или самому добавлять (Commit Staged).
Ну и в обоих показано что будет в коммите, надо смотреть )

Непонятно что это решит, но можно сделать через gitignore: убрать всё и отменять через !

*
!myfile.txt
!*.cs

Ну яж говорю - удалил проекты из солюшена и пересоздал их заново с новыми именами. Проекты со старыми именами продолжали лежать на HDD (я про них и забыл), но в вижуалке к солюшену не были подключены. То есть - были незадействованы.
Почему же они тогда во все следующие коммиты попали?

Тогда другой логический вопрос. Почему вижуалка сама этого не сделала, если я удалил эти проекты из солюшена? Зачем они нужны в следующих коммитах, если я их удалил? Они даже нигде не отображались.

Это решило бы то, что в коммит не смогло попасть ничего лишнего. Только то, что юзер пропишет сам. Конечно, это было бы неудобно, если в проекте миллион файлов. Но зато безопасно :point_up:
Можно было бы какую-нибудь GUIёвину запилить для редактирования этого gitinclude. Чтобы кучу файлов вручную не прописывать.

Это имеет смысл если корень репозитория находится в помойке и надо комитить только небольшую часть. Например, папка юзера ОС и надо комитить конфиги.

В остальных случаях это никому не надо, только лишняя сложность.

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

И это в студии по умолчанию кнопка, чтоб закомитить всё. В других клиентах и в консоли обычно не так. Там надо самому сначала добавить всё нужное в staged (есть конечно кнопка Добавить Всё, но всё равно больше вероятность заметить если что-то не так, чем совсем одна кнопка).


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

Если сотни измененных файлов, то переключить список в режим дерева.
Показано количество всех категорий изменений (12 изменено, 23 добавлено, 45 удалено, 67 переименовано), можно обратить внимание если оно не соответствует ожиданиям.
И да, переименованные обычно отображаются как переименованные,а не просто добавленные и удаленные.

“Закоммитить всё” должно означать “Закоммитить всё, что включено в солюшен и было изменено”, а не “Закоммитить вообще всё, что лежит в директории с солюшеном, включая все файлы во всех поддиректориях, даже если это не включено в солюшен/проект”.

Это когда в консоли работаешь - да. Должен сам за всем следить.
А тут у нас GIUёвая IDE со своими кнопочками. Я пользуюсь тем, что предоставляет её интерфейс (GUI). Удаляю из проекта лишние файлы/папки и больше их не вижу. Следовательно, я думаю, что этого больше нет. Нафига эта дурацкая IDE пихает в коммиты то, что к проекту больше не подключено? :thinking:

Вот я об этом и говорю :point_up: Был бы gitinclude - тогда бы ничего лишнего в принципе не смогло попасть в коммит.
А если каких-то файлов не существует, а они прописаны - гит бы сначала проверял наличие всех прописанных файлов - и если какой-то отсутствует - отображал это как изменение. После коммита удалял бы его из gitinclude.

А, я понял. Вы про другое. Ну да, следить всегда надо :man_shrugging: