Git 如何将回购从Bitbucket复制到具有所有分支但没有历史记录的CodeCommit?

Git 如何将回购从Bitbucket复制到具有所有分支但没有历史记录的CodeCommit?,git,git-clone,aws-codecommit,configserver,spring-cloud-config-server,Git,Git Clone,Aws Codecommit,Configserver,Spring Cloud Config Server,如何将Bitbucket repo复制到CodeCommit,包括所有分支,但不包括所有分支上的所有历史记录 这样做的原因是:我们的配置服务器从CodeCommit读取数据,但事实的来源是Bitbucket。我们这样做的原因说来话长。我们有一个脚本,当前已成功地将Bitbucket repo复制到CodeCommit。我们正在调查是否可以通过同步到CodeCommit而无需所有历史记录来提高配置服务器的响应时间,因此当ConfigServer进行克隆或提取时,不会花费目前常见的15-25秒响应时

如何将Bitbucket repo复制到CodeCommit,包括所有分支,但不包括所有分支上的所有历史记录

这样做的原因是:我们的配置服务器从CodeCommit读取数据,但事实的来源是Bitbucket。我们这样做的原因说来话长。我们有一个脚本,当前已成功地将Bitbucket repo复制到CodeCommit。我们正在调查是否可以通过同步到CodeCommit而无需所有历史记录来提高配置服务器的响应时间,因此当ConfigServer进行克隆或提取时,不会花费目前常见的15-25秒响应时间

我们希望可以简单地将-depth 1添加到git clone-mirror命令中。但是,当将镜像的repo推送到CodeCommit时,我们会得到一个错误。为了看看这是否只是一个CodeCommit问题,我尝试了一些类似于从bitbucket读取并返回到新的bitbucket回购的操作。我得到了一个不同但相似的错误

以下是核心步骤。如果没有-depth 1:

错误发生在git push的最后一个命令上。错误如下所示:

远程:未知提交2280a0e659a1232a402041c27d94d81fd5142edb错误:解包失败:未知提交2280a0e659a1232a402041c27d94d81fd5142edb

每个分支都会出现如下错误:

[远程拒绝]开发->开发解包程序错误

如果我尝试做类似的事情,除了推回bitbucket,我会得到以下错误。我跳过了aws创建存储库的步骤,而是首先在bitbucket中手动创建新的repo

错误:无法读取6B01892796767F3A8C7B190DBC8D7EC91C0BB808A 到ssh://git@bitbucket.pearson.com/pvvts\u configs/vtscoreconfigurations\u仅用于测试\u marnee\u 1g\u copy.git ! [远程拒绝]不允许开发->开发浅层更新

我曾读到,现在可以使用Git 1.9或更高版本进行浅同步。我有git版本2.7.4。请参见以下问题的答案:。但是,从浅同步推送的限制可能已从普通克隆中删除,但未从镜像中删除

有没有办法进行这种浅同步?是否有其他方法可以实现我在CodeCommit中减少复制的回购的大小的目的?请注意,配置服务器本身确实有一个选项可以告诉它进行浅层克隆


我意识到,即使我能够成功地完成这种浅层同步,配置服务器可能也无法很好地使用它,并且可能无法提供我们想要的性能改进。测试这将是下一步。

CodeCommit似乎不允许您进行浅层更新。大多数Git托管提供商不这样做,因为这意味着存储库不完整,这会阻止服务器端的某些操作(如pull请求)工作。浅层请求的服务成本也很高

正如您所注意到的,这是Git中提供的一个功能,但是不同的托管提供商支持协议的不同功能,这是因为对于他们的基础设施来说是有意义的,而且他们中的许多人使用核心Git以外的服务来处理推送中的部分或全部操作

您可以尝试将CodeCommit浅层克隆到配置服务器上,即使您的CodeCommit中有一个完整的镜像,这仍然可以工作。这种技术通常用于CI系统,因为它使操作更快。如果您需要使用额外的获取更新它,由于服务器上的额外工作,这可能会比正常的获取慢,即使原始克隆更快,但无论如何都值得一试


如果您的目标是减少CodeCommit中存储库的大小,那么您就有点运气不佳。除非您想重写历史并将截断的历史推送到CodeCommit,否则没有办法避免将整个历史推到那里。

有所有分支但没有历史分支就是历史。我不认为这种简单化的说法是正确的,尽管作为git的新手,也许我错了。但是考虑一个单一分支的回购。在这一分支上,我称之为所有犯罪的历史。也许有一个比历史更合适的术语?您可以对该repo进行深度1克隆,这样您就没有所有提交的历史记录,但仍然可以访问该分支。因此,我不明白人们怎么能说他们是一体的。也许这只是我最近从Perforce来的术语混淆。我担心你会这么说。非常感谢您的详细解释。\注意:Spring cloud config server当时没有公开任何进行浅层克隆的选项。我们必须注入我们自己的JavaGit实现,这是我们绝对不想支持的。我已经提交了一个特性请求,让他们实现,但是如果你说的是真的,那可能没有帮助,因为fetch必须在请求时过滤掉历史记录 ._
git clone --mirror --depth 1 ssh://<bitbucket> RepoFolder
cd RepoFolder
git remote add codecommit ssh://<codecommit>
git remote update origin
aws codecommit create-repository --repository-name pvvts_configs-RepoFolder --repository-description 'Synced'
git push --mirror codecommit