Удаление каталога .git из git repo? - программирование
Подтвердить что ты не робот

Удаление каталога .git из git repo?

Я пытаюсь перенести репозиторий git из Kiln в Github. Я могу добавить новый пульт просто отлично, но когда я пытаюсь нажать мастер на новый пульт, я получаю следующую ошибку:

Counting objects: 8691, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3000/3000), done.
remote: error: object a9ee490ac00987835de30bdbc851da5e8d45d28b:contains '.git'
remote: fatal: Error in object
error: pack-objects died of signal 13
error: failed to push some refs to '[email protected]:Account/repo.git'

Commit a9ee490ac00987835de30bdbc851da5e8d45d28b имеет в нем следующие файлы:

.git/
CHANGELOG.md
JSONKit.h
JSONKit.m
README.md

Очевидно, что кто-то в прошлом, используя hg, отмечен в полном репозитории git в подкаталоге.

Я хотел бы просто полностью убить этот каталог, но мне трудно удалить этот файл из истории git.

Ответ в нажатие git repo с ошибкой: содержит '.git' не помогает, потому что у меня есть репо как git репо, а не меркурийный.

Я пробовал git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch .git', но получаю ошибку:

Rewrite 7dbd0970d6c79215d11994b4a9b8091b2e954cfb (326/442)error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/HEAD'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/config'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/description'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/applypatch-msg.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/commit-msg.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/post-update.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-applypatch.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-commit.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-rebase.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/prepare-commit-msg.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/update.sample'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/index'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/info/exclude'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/logs/HEAD'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/logs/refs/heads/master'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/objects/pack/pack-43fac03d375df5c1e380c5e522ba6bcb9b4e1ec1.idx'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/objects/pack/pack-43fac03d375df5c1e380c5e522ba6bcb9b4e1ec1.pack'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/packed-refs'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/refs/heads/master'
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/refs/remotes/origin/HEAD'

и история, похоже, не изменяется. Я на пределе своих знаний git. Может ли кто-нибудь помочь?

4b9b3361

Ответ 1

Используйте BFG Repo-Cleaner, более простую и быструю альтернативу git-filter-branch, специально разработанную для удаления файлов из истории Git.

Тщательно выполните следующие действия: https://rtyley.github.io/bfg-repo-cleaner/#usage - но основной бит такой: скачайте банку BFG (требуется Java 8 или выше) и выполните эту команду:

$ java -jar bfg.jar --delete-folders .git --delete-files .git --no-blob-protection my-repo.git

Вся ваша история репозитория будет отсканирована, и все файлы или папки с именем .git будут удалены. Я проверил это на специально сконструированном тестовом репозитории, содержащем папку .git, и он работал просто отлично.

Благодарю Мишеля Жувена за то, что он напомнил мне, что файлы с именем ".git" также недопустимы в Git (а сообщение об ошибке, сообщаемое Git, не дает сразу понять, что это файлы, а не папки), я Я обновил этот ответ, чтобы отразить это.

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

Ответ 2

Пробовали ли вы следующую команду?

git filter-branch --tree-filter 'rm -Rf .git' HEAD

git документация по фильтрам указывает, что это будет медленнее, чем --index-filter, но это может сделать работу.

Ответ 3

Как я понимаю, печь позволит вам клонировать репозиторий как git или Mercurial в эти дни, поэтому клонируйте его как меркурийный, используйте меркантильное решение файлового файла, которое вы уже нашли нажмите, чтобы Mercurial repo стал новым репо в Kiln, а затем клонировал его как git. Тогда у вас будет git репо, которое вы можете нажать на github.

Ответ 4

Другой способ справиться со случаем, когда в репозитории Mercurial (Hg) встроена папка .git, - это сначала "исправить" репозиторий Hg перед экспортом в Git. @laurens-holst предлагает отличный способ сделать это.

Если папка .git была в корне вашего проекта, то вы создаете текстовый файл my-filemap, который выглядит следующим образом:

exclude ".git"

Включите расширение Convert в своем файле .hgrc:

[extensions]
convert =

Затем отфильтруйте папку .git, используя расширение Hg convert:

hg convert --filemap my-filemap originalrepo newrepo

Теперь вы можете экспортировать из newrepo, и у вас не будет проблемы со встроенной папкой .git.

Вы также можете использовать git fsck, чтобы убедиться, что с новым репозиторием Git все в порядке, прежде чем нажать его.