删除';。吉特';git repo的目录?

删除';。吉特';git repo的目录?,git,mercurial,git-filter-branch,git-rewrite-history,Git,Mercurial,Git Filter Branch,Git Rewrite History,我正在尝试将git回购协议从窑迁移到Github。我可以添加新的遥控器,但当我尝试将master推送到新的遥控器时,会出现以下错误: Counting objects: 8691, done. Delta compression using up to 8 threads. Compressing objects: 100% (3000/3000), done. remote: error: object a9ee490ac00987835de30bdbc851da5e8d45d28b:cont

我正在尝试将git回购协议从窑迁移到Github。我可以添加新的遥控器,但当我尝试将master推送到新的遥控器时,会出现以下错误:

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 'git@github.com:Account/repo.git'
提交
a9ee490ac00987835de30bdbc851da5e8d45d28b
中包含以下文件:

.git/
CHANGELOG.md
JSONKit.h
JSONKit.m
README.md
显然,过去有人使用
hg
,在子目录中签入完整的git repo

我只想完全删除该目录,但从git历史记录中删除该文件时遇到问题

中的答案没有帮助,因为我认为回购是git回购,而不是反复无常的回购

我尝试了git筛选器分支--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知识已经到了极限。有人能帮忙吗?

您试过下面的命令吗

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

指示这将比索引过滤器慢,但它可以完成此任务。

是否尝试使用以下命令

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

表示这将比索引过滤器慢,但它可以完成这项工作。

据我所知,现在Kill将允许您将存储库克隆为git或Mercurial,因此将其克隆为Mercurial,将Mercurial repo作为新的repo推送到Kill,然后将其克隆为git。然后你就有了一个git repo,你可以推送到github。

据我所知,现在Kill会让你将存储库克隆为git或Mercurial,所以将其克隆为Mercurial,使用Mercurial repo作为新的repo推送到Kill,然后将其克隆为git。然后您将拥有一个git repo,您可以将其推送到github。

使用,这是git筛选器分支的一种更简单、更快的替代方法,专门用于从git历史记录中删除文件

请仔细遵循此处的步骤:-但核心部分是:下载(需要Java 8或更高版本)并运行以下命令:

$ java -jar bfg.jar --delete-folders .git --delete-files .git --no-blob-protection my-repo.git
将扫描您的整个存储库历史记录,并删除名为
.git
的任何文件或文件夹。我已经在一个包含
.git
文件夹的特殊构造的文件夹中对此进行了测试,它工作得很好

感谢Michel Jouvin指出名为“.git”的文件在git中也是非法的(git报告的错误消息并没有立即表明它们是文件,而不是文件夹),我更新了这个答案以反映这一点

全面披露:我是BFG回购清理器的作者。

使用,这是一个比
git筛选器分支更简单、更快的替代方法
专门用于从git历史记录中删除文件

请仔细遵循此处的步骤:-但核心部分是:下载(需要Java 8或更高版本)并运行以下命令:

$ java -jar bfg.jar --delete-folders .git --delete-files .git --no-blob-protection my-repo.git
将扫描您的整个存储库历史记录,并删除名为
.git
的任何文件或文件夹。我已经在一个包含
.git
文件夹的特殊构造的文件夹中对此进行了测试,它工作得很好

感谢Michel Jouvin指出名为“.git”的文件在git中也是非法的(git报告的错误消息并没有立即表明它们是文件,而不是文件夹),我更新了这个答案以反映这一点


全面披露:我是BFG回购清理程序的作者。

处理Mercurial(Hg)回购程序中嵌入.git文件夹的另一种方法是在导出到git之前先“修复”Hg回购程序。有

如果.git文件夹位于项目的根目录中,则您可以创建一个文本文件,
my filemap
,该文件如下所示:

exclude ".git"
在.hgrc文件中启用转换扩展名:

[extensions]
convert =
然后使用Hg convert扩展名过滤掉.git文件夹:

hg convert --filemap my-filemap originalrepo newrepo
现在您可以从newrepo导出,而不会出现embedded.git文件夹的问题


您还可以使用
git fsck
在推送新的git repo之前确保其正常。

处理Mercurial(Hg)repo中嵌入.git文件夹的情况的另一种方法是在导出到git之前先“修复”Hg repo。有

如果.git文件夹位于项目的根目录中,则您可以创建一个文本文件,
my filemap
,该文件如下所示:

exclude ".git"
在.hgrc文件中启用转换扩展名:

[extensions]
convert =
然后使用Hg convert扩展名过滤掉.git文件夹:

hg convert --filemap my-filemap originalrepo newrepo
现在您可以从newrepo导出,而不会出现embedded.git文件夹的问题


您还可以使用
git fsck
在推送新的git回购之前确保它是正常的。

从git 2.2.22开始,这样做的方法是使用工具

简单快捷:

git filter-repo --force --invert-paths --path-glob '*/.git' --path '.git'

从Git2.2.22开始,实现这一点的方法是使用该工具

简单快捷:

git filter-repo --force --invert-paths --path-glob '*/.git' --path '.git'

回购协议是开源的吗?你能共享它的副本吗?啊,不需要共享有问题的回购协议的副本,我已经设法用同样的坏树构建了一个Git存储库,我可以用它进行测试。可能是重复的,谢谢@dana!我现在面临着完全相同的问题(以前错误地添加了.git文件夹,而repo仍然在hg中),repo是开源的吗?你能共享它的副本吗?啊,不需要共享有问题的回购协议的副本,我已经设法用同样的坏树构建了一个Git存储库,我可以用它进行测试。可能是重复的,谢谢@dana!我现在正面临着完全相同的问题(以前错误地添加了.git文件夹,而repo仍然在hg中),不幸的是,我认为这种方法不起作用-针对我构建的测试repo运行,这是我得到的输出:$git filter branch--tree filter'rm-Rf foo/.git'HEAD。。。。。重写6652877677cf01a7b668704134d5e8bb62bfe317(6/6)错误:无效路径“foo/.git/folder/zero”错误:无效路径“foo/.git/hero”错误:无效路径“foo/.git/zero”忽略路径foo/.git/folder/zero忽略路径foo/.git/hero忽略路径foo/.git/hero忽略路径foo/.git/zero警告:refs