Толкание GIT-репо завершается неудачно с ошибкой: содержит ".git"
Я конвертировал несколько ртутных репозиториев в git с помощью инструмента hg-fast-export, и хотя все они были конвертированы нормально, одна из них вызвала следующую ошибку, когда я нажал на репо.
$ git remote add origin git@github.com:asdf/zxcv.git
$ git push -u origin master
Counting objects: 7840, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2817/2817), done.
error: object 324f9ca2aaae7b1d716db3fc31c02d391c1c2c16:contains '.git'
fatal: Error in object
error: pack-objects died of signal 13
error: failed to push some refs to 'git@github.com:asdf/zxcv.git'
Ошибка "содержит".git "имеет очень широкие термины и не может найти никакой документации, поэтому я попытался найти существующую папку".git "в исходном репо, и я сделал это. Была подпапка-папка, содержащая экземпляр старого git-репозитория, который я удалил с помощью git rm, однако проблема осталась.
Могу ли я в любом случае перенести это на github или новый чистый репо - единственный вариант?
Любая помощь в этом приветствуется. Спасибо!
2 ответа
Вы можете использовать convert
Команда с файловой картой, чтобы убрать git-репо из хранилища. После этого он исчезнет из истории, и хранилище будет безопасно импортировать в git.
Пример:
$ echo "exclude path/to/.git" > my-filemap
$ hg convert --filemap my-filemap originalrepo newrepo
Обратите внимание, что convert
это расширение, которое необходимо включить в .hgrc
вот так:
[extensions]
convert =
Для получения дополнительной информации см. hg help convert
,
Наборы изменений, которые вы пытаетесь отправить, содержат .git
в их истории, даже если не в последней ревизии, так что я бы подумал, что вам нужно будет создать чистое репо.
Однако альтернативой может быть перебазирование некоторых наборов изменений. Предоставление того, что вы хотите подтолкнуть, имеет наборы изменений от до постороннего .git
был добавлен, и вы не возражаете потерять мелкие детали истории, вы можете превратить их в одну ревизию и попробовать нажать на нее. В теории (!!) .git
Каталог будет эффективно "отредактирован" из истории.
Вот пример (обратите внимание, я использую git не так часто, как Mercurial, поэтому понятия не имею, сработает ли это или мои команды действительны, но это может дать вам отправную точку):
$ git log --oneline
1234567 More changes
abcdefa made changes
a5b6482 Added .git sub-sub-sub-directory to repo!
dead123 More things
$ git rm sub-sub-sub/.git
$ git commit -m "Removed .git sub-sub-sub-directory"
$ git log --oneline
beef456 Removed .git sub-sub-sub-directory
1234567 More changes
abcdefa made changes
a5b6482 Added .git sub-sub-sub-directory to repo!
dead123 More things
$ git rebase -i HEAD~4
... at this point you need to interactively specify what to do*
$ git log --oneline
eeee987 Some new commit message that sums up the changes
dead123 More things
Когда я попробовал это, список наборов изменений, которые нужно "сжать", появился в редакторе, который отличается от всех туториалов, которые я видел, - думаю, из-за конфликта добавленных и удаленных файлов. Я изменил команды для трех из четырех наборов изменений так, чтобы они были "сквош", а не "пикап", что дает команду rebase-merge объединить этот набор изменений с его родителем. Я в основном сжал все наборы изменений в один. Кажется, это сработало для меня, ни один из оставшихся наборов изменений не имеет удаленных файлов. Позволит ли это вам подтолкнуть или нет, я не знаю.
Конечно, попробуйте это на клоне или что-то в первую очередь.