我决定尝试将我的项目从使用GitSharp迁移到LibGit2Sharp,因为不再主动维护GitSharp.使用GitSharp,我能够在给定分支的情况下访问检查到我的仓库中的任何文件的原始字节.我无法使用LibGit2Sharp找到任何文档或示例代码.
有人能给我以及如何做到这一点的例子吗?
我有使用NuGet的LINQPad版本,我添加了libgit2sharp,但这依赖于另一个(本机)dll.
我试过了:
Assembly.GetExecutingAssembly().Location我只是试图用这个库读取日志并将其作为LINQPad中的片段将是整洁的虽然我想我可以使它成为一个控制台应用程序,如果所有其他失败.
任何人都使用libgit2sharp和LINQPad,可以解释如何让它们一起玩得很好吗?
使用libgit2sharp我想做以下事情:
foreach( Commit commit in repo.Commits )
{
// How to implement assignedTags?
foreach( Tag tag in commit.assignedTags ) {}
}
Run Code Online (Sandbox Code Playgroud)
我想将所有标签分配给当前提交.什么是最好的方法呢?迭代所有标签,看看是否tag.Target.Sha == commit.Sha?多数表现不太好.还有另外一种方法吗?
我已经环顾四周,因为我不是安全或加密专家,我仍然对如何在我的程序中实现加密感到困惑.我需要一台服务器登录其gitHub帐户以更新带有特殊标头的代码文件.我现在唯一的挂断是如何存储/检索服务器的凭据.
PushOptions push = new PushOptions
{
Credentials =
new UsernamePasswordCredentials
{
Password = "password",
Username = "Username"
}
};
Run Code Online (Sandbox Code Playgroud)
我如何加密这些凭据以进行存储?我知道将它们存储在代码中是一个坏主意,就像示例那样,并且将它们存储在未加密的任何文件中也是一个坏主意.
此外,我想要的唯一用户交互是在服务器上编译和设置程序时发生的.它是Linux服务器上的cronjob,以防万一.需要注意的另一个细节是,我使用的是libgit2sharp,但之前使用的是bash脚本和ssh进行身份验证以进行测试.
我刚刚下载了libgit2sharp的nugget包.我发现即使是基本的操作也很难.
我有一个现有的git仓库(远程和本地).我只需要在它发生时提交新的更改并将其推送到远程.
我有下面的代码来解释我做了什么.
string path = @"working direcory path(local)";
Repository repo = new Repository(path);
repo.Commit("commit done for ...");
Remote remote = repo.Network.Remotes["origin"];
var credentials = new UsernamePasswordCredentials {Username = "*******", Password = "******"};
var options = new PushOptions();
options.Credentials = credentials;
var pushRefSpec = @"refs/heads/master";
repo.Network.Push(remote, pushRefSpec, options, null, "push done...");
Run Code Online (Sandbox Code Playgroud)
我应该在哪里指定远程网址?这也是做这些操作(提交和推送)的正确方法吗?
谢谢
我们如何更改存储库的远程URL?
using (var repository = new Repository(repositoryPath))
{
//Change the remote url first
//Then checkout
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用库“libgit2sharp”通过 SSH 密钥克隆存储库……我找不到任何东西……我可以通过“https”克隆它,但我想做的是使用一个 SSH 密钥。是否支持它真的不清楚。
我的组织运行自己的GitHub服务器和Web代理.我已经配置了git,以便我可以从命令行使用github.com和我们的内部GitHub.但是使用LibGit2Sharp,我无法对我们的GitHub服务器执行操作.CloneOptions调用的唯一回调是RepositoryOperationStarting.不会调用其他回调.我在下面发布了相关的代码和配置(名称已更改以保持匿名).我正在使用NuGet的LibGit2Sharp v0.25.2.
使用LibGit2Sharp的代码.注释表明在击中我们的内部github时会触发哪些回调.点击github.com时,会按预期调用所有回调.
private static void Main(string[] args)
{
var options = new CloneOptions
{
CertificateCheck = (certificate, valid, host) => true, // never called
CredentialsProvider = (url, fromUrl, types) => null, // never called
OnCheckoutProgress = (path, steps, totalSteps) => { }, // never called
OnProgress = output => true, // never called
OnTransferProgress = progress => true, // never called
OnUpdateTips = (name, id, newId) => true, // never called
RepositoryOperationCompleted = context => …Run Code Online (Sandbox Code Playgroud) 对于一个研究项目,我一直在尝试复制SourceTree或TortoiseGit等版本控制软件中的图形视图.
我试图实现的图表视图

我遇到的最大问题是找到提交所属的分支.如果我有这个,我可以为提交点分配一列和一个颜色.这很困难,因为在引擎盖下,Git不存储最初提交的分支.
看看StackOverflow上的其他解决方案,我发现可以获得包含提交的分支列表,但我需要一种隔离单个方法以在我的图中显示的方法.以同样的方式SourceTree或TortoiseGit以某种方式设法做到这一点.
我的问题也与此问题相同,在LibGit2Sharp中查找提交所属的分支?
看起来他们在私人讨论室中发现了实际的解决方案.但是,我没有评论和询问他们发现了什么的声誉.
有没有人对我如何做到这一点有任何想法?
或者,@ nulltoken如果你偶然看到这个并记住,你知道你们在那个讨论室里发现了什么吗?
使用git show,我可以从特定的提交中获取特定文件的内容,而无需更改本地克隆的状态:
$ git show <file>
$ git show <commit>:<file>
Run Code Online (Sandbox Code Playgroud)
如何使用libgit2sharp以编程方式实现此目的?
libgit2sharp ×10
c# ×4
git ×4
libgit2 ×3
certificate ×1
encryption ×1
f# ×1
gitsharp ×1
http-proxy ×1
linqpad ×1
mono ×1