0

我正在使用 LibGit2Sharp 管理 git 存储库。我有一个从远程 A 克隆的git 存储库。现在我想从远程 B 获取所有更改(即所有头和标签)并这样做:

repository.Network.Fetch("git-url", new[] { "+refs/*:refs/*" })

或 git 命令行中的等价物(如果我没记错的话):

git fetch "git-url" +refs/*:refs/*

然而,碰巧远程 B 与 A 相同,除了两个新提交不存在(哪些提交在两个分支头上)。这会导致 fetch 操作删除克隆中的这两个提交,如果我从远程 B 克隆,基本上会产生相同的结果。

什么是正确的 refspec(或其他正确的方法)进行获取,以保持本地提交完整,同时允许从远程 B 获取新提交?我也尝试过+refs/*:+refs/*,但这会将分支标签添加到较旧的提交中,同时refs/*:refs/*也不会获取新的更改。

4

1 回答 1

1

通常来自远程存储库的引用会转到refs/remotes/<remote_name>/...因此您可以分离引用,从不同的远程获取和/或在本地创建。

这就是为什么典型的 fetch 参考映射如下所示:+refs/heads/*:refs/remotes/origin/*

当您选择直接一对一地映射引用时,您实际上创建了给定远程存储库的完整镜像

于 2015-12-11T03:27:10.680 回答