【问题标题】:Git refspec for fetching everything from remote but keep local commits (LibGit2Sharp)Git refspec 用于从远程获取所有内容但保留本地提交 (LibGit2Sharp)
【发布时间】:2016-03-16 20:23:52
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: git libgit2sharp refspec


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。有没有办法以这种方式指定“附加”参考规范?由于本地和远程更改不会触及相同的分支,因此本地和远程更改可以毫无问题地合并(但我想保持仓库裸露,所以如果可能的话,不要签出并进行实际合并)。
    • 嗯,根据您的条件和分支命名约定,可能会或可能不会清楚地将“本地”分支与“远程”分支分开。但通常可以指定多个 fetch 规范,例如描述的 here。我对libgit2sharp 没有经验,但希望那些多重参考规范在图书馆中有直接的对应关系
    猜你喜欢
    • 2016-08-10
    • 2013-11-25
    • 2018-06-07
    • 2021-08-18
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2011-08-09
    相关资源
    最近更新 更多