Элементы, все еще не позволяющие мне вставлять github после их удаления [дублировать]

Объявлено, но не определено переменная или функция.

Типичным объявлением переменной является

extern int x;

. Поскольку это только объявление, требуется одно определение. Соответствующим определением будет:

int x;

Например, следующее генерирует ошибку:

extern int x;
int main()
{
    x = 0;
}
//int x; // uncomment this line for successful definition

Аналогичные замечания относятся к функциям. Объявление функции без ее определения приводит к ошибке:

void foo(); // declaration only
int main()
{
   foo();
}
//void foo() {} //uncomment this line for successful definition

Будьте осторожны, чтобы выполняемая вами функция точно соответствовала той, которую вы объявили. Например, у вас могут быть несогласованные cv-квалификаторы:

void foo(int& x);
int main()
{
   int x;
   foo(x);
}
void foo(const int& x) {} //different function, doesn't provide a definition
                          //for void foo(int& x)

Другие примеры несоответствий включают

  • Функция / переменная, объявленная в одном пространстве имен, определенное в другом.
  • Функция / переменная, объявленная как член класса, определяемая как глобальная (или наоборот).
  • Тип возвращаемого значения функции, номер и типы параметров и соглашение о вызове не совсем точно согласуются.

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

131
задан random 24 October 2013 в 23:03
поделиться

6 ответов

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

Затем я получил ошибку во втором файле, который мне нужно удалить: remote: error: File <path/filename> is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB

Я попробовал тот же шаг, получил ошибку: "A previous backup already exists in <path/filename>"

Из исследования этого веб-сайта я использовал команду: git filter-branch --force --index-filter "git rm --cached --ignore-unmatch <path/filename>" --prune-empty --tag-name-filter cat -- --all

Работал отлично, и большие файлы были удалены.

Невероятно, все еще не удалось с другой ошибкой: error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal: The remote end hung up unexpectedly

Это я исправил, напрямую изменив конфигурационный файл .git - postBuffer = 999999999

. После этого нажатие прошло!

9
ответ дан Andre Odendaal 24 August 2018 в 03:56
поделиться

Если файл был добавлен с вашей последней фиксацией, и вы не нажали на GitHub, вы можете удалить файл и внести поправки в commit, взятый из здесь :

git rm --cached giant_file
    # Stage our giant file for removal, but leave it on disk
git commit --amend -CHEAD
    # Amend the previous commit with your change
    # Simply making a new commit won't work, as you need
    # to remove the file from the unpushed history as well
git push
    # Push our rewritten, smaller commit
25
ответ дан BlueMoon93 24 August 2018 в 03:56
поделиться

Я нашел squashing более полезным, чем filter-branch. Я сделал следующее:

  1. Локально удалять большие файлы.
  2. Зафиксировать локальные удаления.
  3. Мягкий сброс назад X количество коммитов (для меня это было 3): git reset --soft HEAD~3
  4. Затем повторите все изменения вместе (AKA squash) git commit -m "New message for the combined commit"
  5. Push squashed commit.
6
ответ дан But I'm Not A Wrapper Class 24 August 2018 в 03:56
поделиться

Вы можете использовать

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD

. Это приведет к удалению всего в истории этого файла. Проблема в том, что файл присутствует в истории.

287
ответ дан MacGyver 24 August 2018 в 03:56
поделиться

Почему GitHub отклоняет мое репо, даже после того, как я удалил большой файл?

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

Как я могу заставить GitHub принять мое репо?

Вам нужно очистить историю Git вашего проекта локально, удалив нежелательные большие файлы из всей истории, а затем использовать только «очищенную» историю в будущем.

Как очистить большие файлы от моего репозитория Git?

Лучший инструмент для очистки нежелательных больших файлов из истории Git BFG Repo-Cleaner - это более простая и быстрая альтернатива git-filter-branch, специально разработанная для удаления нежелательных файлов из истории Git.

Тщательно следуйте инструкциям по использованию , основная часть - это:

$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git

Любые файлы размером более 100 МБ (которые не входят в ваш последний коммит ) будут удалены из вашего репозитория Git история. Затем вы можете использовать git gc для удаления мертвых данных:

$ git gc --prune=now --aggressive

BFG обычно не менее 10-50x быстрее, чем запуск git-filter-branch, и обычно

Полное раскрытие: я являюсь автором BFG Repo-Cleaner.

3
ответ дан Roberto Tyley 24 August 2018 в 03:56
поделиться

У меня такая же проблема, и ни один из ответов не работает для меня. Я решил следующие шаги:

1. Найти, какие фиксаторы содержат большой файл

git log --all -- 'large_file`

Нижняя фиксация является самой старой фиксацией в списке результатов.

2. Найдите тот, который находится перед самым старым.

git log

Предположим, что вы получили:

commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32

3. Git rebase

git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32

Советы:

  1. Элемент списка
  2. Я просто выбираю drop для коммитов, содержащих большой файл.
  3. Вы можете встретить конфликты во время переустановки, исправить их и использовать git rebase --continue, чтобы продолжить, пока не закончите.
  4. Если что-то пошло не так во время rebase, используйте git rebase --abort, чтобы отменить его.
0
ответ дан William Hu 24 August 2018 в 03:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: