使用libgit2sharp(或其他c#库)镜像存储库

时间:2019-02-19 05:15:22

标签: c# git libgit2sharp

我想克隆一个仓库,并且我希望克隆具有原始标签中的所有标签。 我可以像这样手动进行

$ git clone --mirror https://github.com/{org}/{SourceProjectName}.git
$ cd {SourceProjectName}.git
$ git push --mirror https://github.com/{org}/{ProjectName}

似乎libgit2sharp是执行此操作的最佳方法,但是如果有更好的方法,请告诉我。

我不知道如何使用libgit2sharp 看来我必须做一个克隆,然后以某种方式复制引用 然后,我必须遍历所有这些引用并将它们全部上演...然后提交? 我开始着手做所有这些事情,但是感觉就像我在重新发明轮子...

到目前为止我所处的位置:

2 个答案:

答案 0 :(得分:1)

我不知道这是否是理想的解决方案,但这似乎可以解决问题:

private void DuplicateGitHubRepo()
{
    var clonePath = Path.Combine(Path.GetTempPath(), "Temp-" + Guid.NewGuid() + ".git");
    var co = new CloneOptions
    {
        CredentialsProvider = GetGitCredentials()
    };

    Repository.Clone(SourceProjectUrl+".git", clonePath, co);
    using (var repo = new Repository(clonePath))
    {
        repo.Network.Remotes.Update("origin", x => x.Url = TargetProjectUrl);
        var options = new PushOptions
        {
            CredentialsProvider = GetGitCredentials()
        };
        repo.Network.Push(repo.Network.Remotes["origin"],repo.Refs.Select(x=>x.CanonicalName),options);
    }
}

答案 1 :(得分:0)

您的链接问题已解决。

git镜像克隆只是一个远程源设置为default

的克隆。
<xsl:template match="/">
    <html>
        <body>

            <!-- header content-->
            <xsl:apply-templates select="." mode="header" />

            <h2>=======start content==========</h2>
            <h2>The customer details are: </h2>
                <p>page 1</p>
                <p>page 2</p>
            <!-- footer content -->
            <xsl:apply-templates select="." mode="footer" />
        </body>
    </html>
</xsl:template>

RemoteCollection.Add()方法如下所示: +refs/*:refs/*

基本上,第三个参数是您需要设置特殊refspec的地方。