标签: libgit2sharp

使用libgit2sharp在提交及其父级之间进行更改

我正在使用libgit2sharp(libgit2的C#包装器)并且一直在遇到问题,因为它没有很多我希望的功能(希望我能尽快做出贡献;这看起来像是一个非常有用的项目)

我现在要做的是获取从特定提交及其父级更改的文件列表.我不会试图找出合并与其两个父母之间的变化.我对常规提交更感兴趣.

这些家伙(https://github.com/libgit2/libgit2sharp/issues/89)正在研究类似的东西.我认为他们的程序是一个合理的想法,但我对GIT内部的理解有点弱(最终用户的GIT指南有很多指南,但内部结构却没有那么多)

我很好奇GIT本身如何执行"git diff"命令.据说GIT实际上并不存储增量,而是文件的完整版本(如果它没有改变,它只会指向现有的SHA.这些信息可以从各种来源找到,例如http://xentac.net/2012/01 /19/the-real-difference-between-git-and-mercurial.html).这似乎使得更难以在两次提交之间进行更改(在我的情况下是特定提交及其单个父级),因为数据不是作为提交的一部分存储的(如果您检查libgit2sharp的Commit.cs中的Commit类,这很明显)文件).

我可以通过提交访问的是树.是否有必要执行以下操作以查找此信息:

1)从所需的提交开始,然后沿着树向下走,并将所有SHA值存储在一个集合中.

2)从父级开始进行所需的提交,然后沿着其树向下移动,将其所有blob SHA值存储在另一个集合中.

3)更改文件的SHA将是不在两组交集中的文件.

我用这种方法看到的问题是它看起来没有办法从blob的SHA值中获取文件名(我没有看到任何可以在libgit2sharp的Blob.cs文件中执行此操作).

我知道这个问题有很多方面,但它们是从git获取特定数据的大目标的一部分.

谢谢.

git libgit2 libgit2sharp

8
推荐指数
1
解决办法
4357
查看次数

有没有用libgit2,libgit2sharp,Ngit用msysgit替换windows?

嗨,我喜欢Git,但似乎与人和朋友分享Windows项目并不好玩,因为与tortoisehg或tortoisesvn(不是它的DVCS)相比,gitextensions tortoisegit开箱即用是丑陋的.在bash shell中使用msysgit并不像linux/Mac那样好.

那么有没有新的竞争者(alpha项目等(甚至与其他libs))?

我很想看到这些新的Git库腾飞!

windows git libgit2 libgit2sharp

8
推荐指数
1
解决办法
2244
查看次数

如何检查目录是否是C#中的git存储库

我已经开始在我的项目中使用LibGit2Sharp,我不得不承认它非常棒.我很高兴我没有使用processinfo去命令行路线.但我有一个问题,我无法在维基中找到答案,也无法在源代码中找到测试.如果文件夹是git存储库,如何检查LibGit2Sharp?

c# git libgit2sharp

8
推荐指数
1
解决办法
2174
查看次数

删除远程分支

我需要删除一个远程分支,并发现这种技术:

git push origin:the_remote_branch

我尝试以下列形式将它传递给Networks Push方法,但似乎没有任何工作(options是我的登录凭据):

_repo.Network.Push(_repo.Network.Remotes["origin"], "origin/:NewBranchForDeletion", options)  
_repo.Network.Push(_repo.Network.Remotes["origin"], ":NewBranchForDeletion", options)  
_repo.Network.Push(_repo.Network.Remotes["origin"], ":origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], ":refs/remotes/:origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], ":refs/remotes/origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], "refs/heads/:origin/NewBranchForDeletion", options)
_repo.Network.Push(_repo.Network.Remotes["origin"], "refs/heads/:NewBranchForDeletion", options)
Run Code Online (Sandbox Code Playgroud)

还有其他一些选择.我根本无法工作,它会返回错误,例如(对于":NewBranchForDeletion"方法):

不是有效的参考"NewBranchForDeletion"

更新:

感谢@Rob在LibGit2Sharp的回购中发现了这条评论:https://github.com/libgit2/libgit2sharp/issues/466#issuecomment-21076975

第一个选项失败,NullReferenceException启用了on objectish,并在上面提到的错误中使用string.Emptyobjectish结果.第二个选项是我正在尝试的,除了我使用的是HTTPS验证版本:

repo.Network.Push(repo.Remotes["my-remote"], objectish: null, destinationSpec: "my-branch");

// Or using a refspec, like you would use with git push...
repo.Network.Push(repo.Remotes["my-remote"], pushRefSpec: ":my-branch");
Run Code Online (Sandbox Code Playgroud)

c# libgit2sharp

8
推荐指数
1
解决办法
643
查看次数

什么是LibGit2Sharp相当于'git pull'?

我正在尝试将更改从远程分支合并到本地存储库,但是我无法使其正常工作 - 可能是对实现的误解.获取似乎工作正常,因为我可以看到服务器上的更新,但我想我在试图拉动时破坏了一些东西.

我试过了:

repo.Checkout( branch.TrackedBranch, CheckoutOptions.None, OnCheckoutProgress );
Run Code Online (Sandbox Code Playgroud)

这似乎可以满足您对Clone调用的期望.我也找不到合并的方法.正如我所读,git pull就像调用fetch,然后是一个合并.

我已经查看了回购中的一些测试,例如MergeFixture,但它似乎并不是我希望的那样.

libgit2sharp

7
推荐指数
2
解决办法
4291
查看次数

如何在TFS Build中使用私有存储库配置libgit2?

我目前正在使用TFS 2013(本地安装)尝试使用LDAP身份验证从内部GitHub Enterprise安装进行构建.

我得到的问题是它无法访问源代码,如何配置TFS Build以使用特定的身份验证?

从TFS构建日志

异常消息:libgit2引发了一个错误.Category = Net(错误).

VS30063:您无权访问https:// user:password@githubrepository.corp.company.net.(输入LibGit2SharpException)

异常数据字典:

libgit2.code = -1

libgit2.category = 11

异常堆栈跟踪:

服务器堆栈跟踪:

在LibGit2Sharp.Core.Ensure.HandleError(的Int32结果)在LibGit2Sharp.Core.Proxy.git_clone(字符串URL,字符串WORKDIR,GitCloneOptions选择采用)在LibGit2Sharp.Repository.Clone(字符串sourceUrl,字符串workdirPath,布尔裸露,布尔结帐,TransferProgressHandler System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object []上的Microsoft.TeamFoundation.Build.Activities.Git.GitPull.GitClone.GetRepository(String repositoryUrl,String workingFolder)上的onTransferProgress,CheckoutProgressHandler onCheckoutProgress,Credentials credentials)指定参数时,对象服务器,对象[]&outArgs)在System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(即时聊天味精,IMessageSink replySink)

在[0]处重新抛出异常:

在System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(消息reqMsg,布尔bProxyCase)在System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(对象NOTUSED,MessageData&MSGDATA)在System.Func 3.EndInvoke(IAsyncResult result) at Microsoft.TeamFoundation.Build.Activities.Git.GitPull.GitRepositoryBase.EndExecute(AsyncCodeActivityContext context, IAsyncResult result) at System.Activities.AsyncCodeActivity1.System.Activities.IAsyncCodeActivity. FinishExecution(AsyncCodeActivityContext上下文,IAsyncResult的结果)在System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor执行者,bookmarkManager bookmarkManager)

跟进

我尝试过URL params进行身份验证(示例)

https://开头的用户名:password@domain.com/user/project.git

更多跟进

完全卸载并更新到2013 RC,错误消息也已更新,因为它是不同的.

我还尝试将构建控制器设置为在github企业安装中作为经过身份验证的LDAP用户运行.

tfs tfsbuild libgit2 libgit2sharp tfs2013

7
推荐指数
1
解决办法
1329
查看次数

LibGit2Sharp索引被锁定 - 错误

有时我会尝试同时读取和写入Git存储库.但后来当我尝试提交文件时,我收到以下错误消息:

libgit2引发了一个错误.Category = Index(LockedFile).索引已锁定.这可能是由于同意或崩溃的过程.

提交按预期完成,为什么我收到此错误消息?我怎么摆脱它?

(如果LibGit2Sharp开发人员看到这一点:错误消息中存在拼写错误:concuRRRent.):D

versioning git github libgit2 libgit2sharp

7
推荐指数
2
解决办法
7966
查看次数

什么相当于 LibGit2Sharp 上的 git checkout branch_name

我在 git 服务器中有 2 个分支,分别是 master 和 develop。我使用下面的代码将存储库克隆到我的机器上。

var options =
    new CloneOptions()
    {
        CredentialsProvider = this.credentialsHandler,
    };

return
    Repository.Clone(
        gitHttpUrl,
        localPath,
        options);
Run Code Online (Sandbox Code Playgroud)

默认分支是 master。我想使用以下代码切换到开发分支。

using (var repo = new Repository(localPath))
{
    var branch = repo.Branches[branchName];

    repo.Checkout(branch);
}
Run Code Online (Sandbox Code Playgroud)

但分支为空。

如何使用 LibGit2Sharp 切换分支?

更新
默认分支是master,下面是重现问题的步骤。

  1. 结账develop分行
  2. 拉,这里抛出异常。

这是代码:

private void Checkout(string localPath, string branchName)
{
    using (var repo = new Repository(localPath))
    {
        var branch = repo.Branches[branchName];

        if (branch == null)
        {
            branch = repo.CreateBranch(branchName, "origin/" + …
Run Code Online (Sandbox Code Playgroud)

git libgit2sharp

7
推荐指数
1
解决办法
3758
查看次数

以编程方式在C#中执行"Git blame -w"

我需要以编程方式使用C#获取Git历史记录中特定行的最后一位作者.我尝试使用libgit2sharp:

var repo = new LibGit2Sharp.Repository(gitRepositoryPath);
string relativePath = MakeRelativeSimple(filename);
var blameHunks = repo.Blame(relativePath);
// next : find the hunk which overlap the desired line number
Run Code Online (Sandbox Code Playgroud)

但这相当于命令

git blame <file>

事实上我需要

git blame -w <file> (比较时忽略空格)

Libgit2sharp不设置-w开关,也不提供任何参数/选项来设置它.我有什么选择?你知道其他任何与命令-w切换兼容的库blame吗?

c# git libgit2 libgit2sharp git-blame

7
推荐指数
1
解决办法
671
查看次数

LibGit2Sharp DllNotFoundException:无法加载 DLL 'git2-106a5f2'

我正在处理一个 vsix 项目,我需要在其中获取有关本地 git 目录的信息。我正在关注这篇文章。当我使用LibGit2Sharp库时,出现如下图和错误中所述的异常:-

我该如何解决这个问题?

VS 版本详情:

视觉工作室 2019

.Net 框架 4.7.2

c# extensibility visual-studio vsix libgit2sharp

7
推荐指数
1
解决办法
1399
查看次数