Ваша ситуация действительно непростая, но есть несколько подходов, которые могут помочь вам решить проблему с игнорированием файлов в подпапке `public_html/` и одновременно не потерять управление над этими файлами в вашем репозитории. Рассмотрим возможные варианты:
### 1. Использование `.gitignore`
Вы можете добавить необходимые паттерны в файл `.gitignore`, чтобы игнорировать неотслеживаемые файлы в папке `public_html/`, но сначала вам нужно удалить их из индекса Git (не удаляя с диска). Для этого выполните команду:
```bash
git rm -r --cached public_html/*
```
Эта команда уберёт все файлы из индекса, но они останутся на диске. Далее добавьте в `.gitignore` нужные паттерны. Например:
```
/public_html/*
!/public_html/файлыКоторыеНужны
```
Теперь Git будет игнорировать все файлы в `public_html/`, кроме тех, которые вы явно указали.
### 2. Использование `assume-unchanged`
Если у вас есть конкретные файлы, которые вам нужно игнорировать, но они уже были закоммичены, вы можете использовать команду `git update-index --assume-unchanged`. Это не идеальный способ, так как он не предотвращает их отображение в статусе при `git status`, но может помочь в некоторых случаях.
Например:
```bash
git update-index --assume-unchanged public_html/файл
```
Для отмены действия используйте:
```bash
git update-index --no-assume-unchanged public_html/файл
```
### 3. Работа с отдельным клонов (Local Clone)
Как вариант, вы можете сделать отдельный клон вашего репозитория для работы с SFTP и игнорирования изменений. В этом клоне вы можете настроить `.gitignore` так, как это необходимо для сайта. Это позволит вам сохранить основной репозиторий чистым и без лишних файлов.
### 4. Поддержка структуры с использованием `git clean`
Если вы хотите очищать временные или не нужные файлы, но не хотите удалять файлы вищанних репозиториях, используйте `git clean -n` для проверки, какие файлы будут удалены, а затем `git clean -f` для удаления, если это подходит. Это можно делать только с файлам, которые точно не нужны в `public_html/`.
### 5. Уточнение процесса деплоя
Обеспечьте, чтобы ваш процесс деплоя (например, в боевой среде) направлял только необходимые файлы на сервер. Это может потребовать настройки вашего инструмента для деплоя (например, rsync, scp и т.д.), чтобы исключить лишние файлы.
### Заключение
К сожалению, универсальное решение в Git для такой специфической структуры может оказаться сложным, но приведенные выше методы должны помочь вам организовать работу с файлами. Используйте комбинацию `gitignore`, `assume-unchanged`, создания отдельного клона репозитория и тщательного деплоя, чтобы достичь идеального баланса между локальной и удаленной работой.