2015-08-26 2 views
1

У меня есть туманно добавленная папка в проекте github, который я больше не хочу быть там. Я хочу/нуждаюсь только в моем местном проекте.github gitignore добавляет папку ранее НЕ на gitignore

поэтому я обновил файл .gitignore, добавив имя каталога, я зафиксировал и нажал изменения, но папка все еще находится на github.

У меня есть еще один вкладчик в проект. что это может быть? может быть, он должен обновить свой gitignore и сделать что-то для этого, чтобы быть эффективным?

Я сделал то же самое в этом же проекте с другим добавленным файлом, и это сработало, единственное отличие в том, что теперь у меня есть дополнительный вкладчик в проект.

+0

Вы пытались удалить папку с помощью 'git rm'? –

+0

Вам также нужно удалить папку, а не только игнорировать ее. – Peque

+2

Используйте 'git rm --cached ', чтобы удалить файл из репо, но сохраните его на своем компьютере. Однако это сохранит файл в истории, поэтому, если у него есть конфиденциальная информация, кто-то все равно сможет его найти, посмотрев историю фиксации. Вам также нужно будет «добавить/зафиксировать/нажать», чтобы увидеть изменения github. – IanAuld

ответ

3

Ваша проблема в том, что мерзавец всегда отслеживать файлы, которые мерзавец знает так что если вы проследили файл ранее, чтобы добавить его в .gitignore, мерзавец не собирается принимать во внимание, что изменения. Будьте внимательны в следующий раз;)

Существует два разных контекста, в которых вы отслеживали файлы, которые вы больше не хотите отслеживать.

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

  2. файлы или каталоги, которые вы не включать в свой файл .gitignore, что вы не хотите, чтобы отслеживать, но что вы не возражаете, чтобы сохранить в истории репозитория

Удалить ПОСТОЯННО

Если в первом случае, вы должны использовать filter-branch --tree-filter и передать команду, которую вы хотите EXEC.

git filter-branch --tree-filter 'YOUR COMMAND' HEAD 

Эта команда удалит навсегда файлы или каталоги, которые вы указывают из истории репозитория всего, и заставить других соавторов выполнить git pull -f синхронизировать репо с новым удаленным государством, так что будьте осторожны, потому что вы можете Не отменяй это!

Например, если вы отследили файл с именем Keys.plist, то традиционная команда для его удаления будет rm Keys.plist.В случае, если вы хотите того убедиться, что это работает, я рекомендую вам добавить -f параметр, чтобы заставить средство удаления

Пример:

git filter-branch --tree-filter 'rm -f Keys.plist' HEAD 

В вашем случае, если вы хотите удалить каталог, так что я полагаю, вам нужно добавить -R для команды ет следующим образом:

git filter-branch --tree-filter 'rm -f -R YourDirectory' HEAD 

Итак, вам нужно нажать вашу ветку к удаленному репозиторию с

git push origin YourBranch -f 

Не забудьте включить -f для принудительного обновления в удаленном репозитории.

Только не отслеживать эти файлы в будущем

Это более простая, вы во втором контексте, и вы не возражаете, что ваши файлы идут появляться в истории репозитория.

Таким образом, в этом случае вы должны использовать git rm --cached -r YourDirectory

Не забудьте включить этот раз ваши dinrectories или файлы, которые вы не хотите отслеживать в файле .gitignore.

+0

Мне нужно удалить папку с именем bower_components. поэтому я набрал git filter-branch --tree-filter 'rm -f -R bower_components' HEAD, но он все еще находится на github:/ – valerio0999

+0

Сделайте толчок с -f, извините, я забыл это, чтобы сказать вам, что в моем ответе. 'git push origin YourBranch -f' – EnriMR

+0

Я продолжаю забывать« нажимать »:) – valerio0999

Смежные вопросы