我正在使用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,但似乎与人和朋友分享Windows项目并不好玩,因为与tortoisehg或tortoisesvn(不是它的DVCS)相比,gitextensions tortoisegit开箱即用是丑陋的.在bash shell中使用msysgit并不像linux/Mac那样好.
那么有没有新的竞争者(alpha项目等(甚至与其他libs))?
我很想看到这些新的Git库腾飞!
我已经开始在我的项目中使用LibGit2Sharp,我不得不承认它非常棒.我很高兴我没有使用processinfo去命令行路线.但我有一个问题,我无法在维基中找到答案,也无法在源代码中找到测试.如果文件夹是git存储库,如何检查LibGit2Sharp?
我需要删除一个远程分支,并发现这种技术:
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.Empty了objectish结果.第二个选项是我正在尝试的,除了我使用的是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) 我正在尝试将更改从远程分支合并到本地存储库,但是我无法使其正常工作 - 可能是对实现的误解.获取似乎工作正常,因为我可以看到服务器上的更新,但我想我在试图拉动时破坏了一些东西.
我试过了:
repo.Checkout( branch.TrackedBranch, CheckoutOptions.None, OnCheckoutProgress );
Run Code Online (Sandbox Code Playgroud)
这似乎可以满足您对Clone调用的期望.我也找不到合并的方法.正如我所读,git pull就像调用fetch,然后是一个合并.
我已经查看了回购中的一些测试,例如MergeFixture,但它似乎并不是我希望的那样.
我目前正在使用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进行身份验证(示例)
更多跟进
完全卸载并更新到2013 RC,错误消息也已更新,因为它是不同的.
我还尝试将构建控制器设置为在github企业安装中作为经过身份验证的LDAP用户运行.
有时我会尝试同时读取和写入Git存储库.但后来当我尝试提交文件时,我收到以下错误消息:
libgit2引发了一个错误.Category = Index(LockedFile).索引已锁定.这可能是由于同意或崩溃的过程.
提交按预期完成,为什么我收到此错误消息?我怎么摆脱它?
(如果LibGit2Sharp开发人员看到这一点:错误消息中存在拼写错误:concuRRRent.):D
我在 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,下面是重现问题的步骤。
develop分行这是代码:
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) 我需要以编程方式使用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吗?
我正在处理一个 vsix 项目,我需要在其中获取有关本地 git 目录的信息。我正在关注这篇文章。当我使用LibGit2Sharp库时,出现如下图和错误中所述的异常:-
我该如何解决这个问题?
VS 版本详情:
视觉工作室 2019
.Net 框架 4.7.2