远程 Git 仓库的完整本地副本,包括所有分支和标签。

3
我想知道,您将如何进行完整的本地复制远程git存储库,以便可以在原始存储库的位置使用。
到目前为止,我找到的所有指南都描述了如何将远程git存储库复制到另一个远程存储库。
其中之一是: 如何移动完整的Git存储库
$ git clone https://github.com/Sample/sample.git
$ cd sample.git
$ git checkout remotes/origin/HEAD
$ git checkout remotes/origin/develop
$ git checkout remotes/origin/master
$ git checkout remotes/origin/micros-integration
$ git checkout remotes/origin/release/0.4.8
$ git checkout remotes/origin/release/0.6.0
$ git checkout remotes/origin/remove-keygen
$ git fetch --tags
$ git remote rm origin
$ git remote add origin https://github.com/Target/target.git
$ git push origin --all
$ git push --tags

又来一个:

在没有本地副本的情况下镜像 git 存储库


$ git clone --mirror git@github.com/Sample/sample.git
$ cd upstream-repository.git
$ git push --mirror git@github.com/Target/target.git

那么,如果您想创建一个本地副本而不链接到原始存储库,应该如何操作呢?如果您只想维护特定的分支并删除所有其他内容,包括所有历史记录(拉取请求、代码更改等),应该怎么办?

我进行了一些网络搜索,但没有在结果中包含这个问题:"git clone absolutely everything branches tags notes"。 - Kenny Evitt
可能重复:完全备份一个git仓库? - Kenny Evitt
1个回答

3

要复制一个仓库,包括所有分支、标签(和其他引用),请使用以下命令:

git clone --mirror <repo-url>

为了将您的副本与原始副本分离,需要进入存储库目录并执行以下操作:
git remote remove origin

如果你只想保留一部分分支,最好的方法取决于具体情况;你可以限制克隆哪些内容,但如何操作取决于你想保留什么。
作为通用解决方案,在克隆后,你可以从克隆中删除不需要的分支(和其他引用),然后运行gc
git branch -D unwanted-branch
git tag -D unwanted-tag
git gc --aggressive --prune=all

gc 不会删除任何可从引用(分支、标签等)或任何引用日志到达的内容,但是一个新的克隆应该没有任何引用日志负担。您可以使用以下命令验证存在哪些引用:

git for-each-ref

如果gc让你感到困扰,另一个选择是克隆克隆。
git clone --mirror file://localhost/path/to/first/clone

不应该期望将不必要的对象传输。 (但是,除非您的克隆命令限制了复制,例如通过--single-branch或浅层历史选项,否则将复制任何可访问的对象。)

使用任一方法,如果对象可达,则将其保留,这可能包括您已删除的分支所构成的提交(例如,如果该分支已合并到您尚未删除的分支中)。因此,如果您有超出上述程序所做的限制历史的特定要求,则可能需要更复杂的工具(如浅层历史记录),并且该过程可能取决于许多细节。

还要注意,拉取请求不是git的概念; PR是托管git远程环境的发明。您可能会有由PR导致的合并提交,这些提交与任何其他历史记录一样处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接