Практические примеры использования с .gitignore
Одним из наиболее распространенных вариантов использования git rm --cached является ситуация, когда вы хотите прекратить отслеживание файлов, которые следует игнорировать. Давайте рассмотрим это на практическом примере.
Создание и фиксация файлов
Сначала давайте создадим ситуацию, когда мы случайно зафиксировали файлы, которые следовало бы игнорировать:
- Убедитесь, что вы все еще находитесь в каталоге
git-index-demo:
cd ~/project/git-index-demo
- Давайте добавим наши существующие файлы в индекс:
git add hello.txt another.txt
- Теперь давайте зафиксируем эти файлы:
git commit -m "Initial commit"
Вы должны увидеть вывод, подтверждающий фиксацию:
[master (root-commit) xxxxxxx] Initial commit
2 files changed, 2 insertions(+)
create mode 100644 another.txt
create mode 100644 hello.txt
- Создайте файл журнала, который имитирует сгенерированный файл, который мы не хотим отслеживать:
echo "Some log data" > application.log
- Давайте случайно добавим и зафиксируем этот файл журнала:
git add application.log
git commit -m "Add log file by mistake"
Вы должны увидеть вывод, подтверждающий фиксацию:
[master xxxxxxx] Add log file by mistake
1 file changed, 1 insertion(+)
create mode 100644 application.log
Использование .gitignore и git rm --cached
Теперь давайте исправим нашу ошибку, создав файл .gitignore и используя git rm --cached:
- Создайте файл
.gitignore, чтобы указать, что мы хотим игнорировать все файлы .log:
echo "*.log" > .gitignore
- Проверим статус:
git status
Вы должны увидеть:
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
Обратите внимание, что, несмотря на то, что у нас есть файл .gitignore с шаблоном *.log, файл application.log не указан как измененный. Это связано с тем, что .gitignore только предотвращает добавление неотслеживаемых файлов в индекс. Файлы, которые уже отслеживаются, будут продолжать отслеживаться.
- Давайте добавим и зафиксируем файл
.gitignore:
git add .gitignore
git commit -m "Add .gitignore file"
- Теперь давайте удалим файл журнала из индекса Git, сохранив его в нашей файловой системе:
git rm --cached application.log
Вы должны увидеть:
rm 'application.log'
- Проверим статус:
git status
Вы должны увидеть:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: application.log
Это указывает на то, что удаление файла из системы отслеживания Git будет включено в следующую фиксацию.
- Давайте зафиксируем это изменение:
git commit -m "Stop tracking application.log"
- Проверим статус еще раз:
git status
Вы должны увидеть:
On branch master
nothing to commit, working tree clean
- Теперь давайте убедимся, что файл все еще существует в нашей файловой системе:
ls -l
Вы должны увидеть, что application.log все еще существует, наряду с другими нашими файлами:
total 16
-rw-r--r-- 1 labex labex 13 [date] another.txt
-rw-r--r-- 1 labex labex 13 [date] application.log
-rw-r--r-- 1 labex labex 6 [date] .gitignore
-rw-r--r-- 1 labex labex 11 [date] hello.txt
- Давайте попробуем изменить файл журнала, чтобы увидеть, отслеживает ли Git изменения:
echo "More log data" >> application.log
git status
Вы должны увидеть:
On branch master
nothing to commit, working tree clean
Несмотря на то, что мы изменили файл журнала, Git не обнаруживает никаких изменений, потому что файл теперь игнорируется из-за шаблона .gitignore.
Это очень распространенный рабочий процесс, когда вы случайно фиксируете файлы, которые следует игнорировать, например:
- Артефакты сборки
- Файлы журналов
- Файлы конфигурации с конфиденциальной информацией
- Каталоги зависимостей (например,
node_modules в проектах JavaScript)
Используя git rm --cached вместе с .gitignore, вы можете:
- Прекратить отслеживание файлов, которые следует игнорировать.
- Сохранить файлы в вашей локальной файловой системе.
- Предотвратить их добавление в репозиторий в будущем.