Как удалить удаленные файлы из моего локального статуса git? - PullRequest
12 голосов
/ 11 ноября 2011

Разработчик добавил каталог изображений на сервер, не добавляя эту папку в файл .gitignore. Когда я сделал git pull, он вытащил эти файлы (сотни файлов). Я добавил папку в .gitignore на сервере, но не в моей локальной системе. Затем я удалил файлы локально (навсегда). Когда я делаю состояние git, все эти удаленные файлы все еще отображаются. Как я могу подавить их появление?

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

Ответы [ 6 ]

21 голосов
/ 01 апреля 2016

Я считаю, что это самый простой способ выполнить задачу.

$> git add -u <directory-path>   (or you may use --update)

Исходное состояние:

$> git status .

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
deleted:    .ipynb_checkpoints/Untitled-checkpoint.ipynb
deleted:    CVPR 1 hr tute-Backup.ipynb
deleted:    cifar10-test.t7
deleted:    cifar10-train.t7
deleted:    cifar10torchsmall.zip
deleted:    create_advr.lua
deleted:    criterion_cifar10_lr_0.001_epoch_13.t7
deleted:    train_cifar10.lua
deleted:    trained_net_cifar10_lr_0.001_epoch_13.t7

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

$> git add -u .
$> git commit -m "removing deleted files from tracking"
$> git push origin master

Конечное состояние:

$> git status .

On branch master
nothing to commit, working directory clean

Надеюсь, это поможет:)

10 голосов
/ 11 ноября 2011

Возможно, вам нужно git rm удаленные файлы.Из Pro Git :

Удаление файлов

Чтобы удалить файл из Git, вы должны удалить его из отслеживаемых файлов (точнее, удалить его изваша область подготовки), а затем совершить.Команда git rm делает это, а также удаляет файл из вашего рабочего каталога, поэтому вы не увидите его как неотслеживаемый в следующий раз.

Если вы просто удалите файл из вашего рабочего каталога, он покажетвверх в области «Изменено, но не обновлено» (то есть unstaged ) вашего вывода git status:

$ rm grit.gemspec
$ git status
# On branch master
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#
#       deleted:    grit.gemspec
#

Затем, если вы запустите git rm, он начнетудаление файла:

$ git rm grit.gemspec
rm 'grit.gemspec'
$ git status
# On branch master
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    grit.gemspec
#

При следующей фиксации файл исчезнет и больше не будет отслеживаться.Если вы изменили файл и уже добавили его в индекс, вы должны принудительно удалить его с помощью опции -f.Это функция безопасности, предотвращающая случайное удаление данных, которые еще не были записаны в моментальный снимок и которые невозможно восстановить из Git.

4 голосов
/ 11 ноября 2011

Обновлено после ваших комментариев.

Если вы хотите сохранить изображения на сервере, но удалить файлы из git, вам нужно добавить флаг --cached в git rm.

cd images
git rm --cached *
cd ..
echo "images" > .gitignore
git add .
git commit -m "removed image files from git only"
git push

если вы хотите, чтобы люди создавали каталог с изображениями, когда они тянут (но не имеют файлов), то добавьте images/.gitignore с одной строкой !.gitignore

Обратите внимание, это не удалит их из истории. Для этого я бы посмотрел на этот SO ответ

3 голосов
/ 11 ноября 2011

Поскольку они уже были добавлены в хранилище, это немного больше работы, но все же выполнимо.

Лучшее прохождение, которое я нашел в этой процедуре, - это руководство Github по Удаление конфиденциальных данных..Поскольку вы хотите сохранить файлы, у вас есть шаг до и после руководства.

Перед началом этого процесса скопируйте файлы из вашего рабочего каталога.Как только вы закончите очищать репо, скопируйте их обратно и добавьте в свой .gitignore.

0 голосов
/ 07 января 2016

git rm <deleted file path>, а затем git commit очистит рабочий каталог.

0 голосов
/ 11 ноября 2011

Добавьте папку к вашему .gitignore также локально.

...