我们可以使用libgit2sharp从git服务器获取特定文件吗?

我们可以使用libgit2sharp从git服务器获取特定文件吗?,git,libgit2sharp,Git,Libgit2sharp,假设我们在现实中的某个地方有一个git回购,这将是我们运行的git服务器。在这个存储库中,我们有foo.txt文件,它已经被修改了几次。使用LibGit2Sharp,我们如何从服务器检索最新版本的foo.txt或任何指定的文件来查看 请注意,此过程将用于容量非常大的应用程序中,因此效率是理想的,我们希望避免从服务器获取比文件本身更多的数据 我已经看过了文档,部分原因是我对git还不是很熟悉,我不知道如何实现这一点。我知道有一个命令,看起来可能是我想要的。有没有办法用LibGit2Sharp复制这

假设我们在现实中的某个地方有一个git回购,这将是我们运行的git服务器。在这个存储库中,我们有foo.txt文件,它已经被修改了几次。使用LibGit2Sharp,我们如何从服务器检索最新版本的foo.txt或任何指定的文件来查看

请注意,此过程将用于容量非常大的应用程序中,因此效率是理想的,我们希望避免从服务器获取比文件本身更多的数据

我已经看过了文档,部分原因是我对git还不是很熟悉,我不知道如何实现这一点。我知道有一个命令,看起来可能是我想要的。有没有办法用LibGit2Sharp复制这种行为


此外,如果我们能做到这一点,有没有办法获得foo.txt的特定版本而不是上一个版本?

git协议不允许您通过网络直接访问特定的blob 然而,正如Chris所指出的,一些GitWeb前端可以公开一个api,允许您这样做

为了通过LibGit2Sharp实现这一点,您必须在本地克隆存储库,即检索完整的历史记录或获取已推送到上游但在以前克隆的存储库中不存在的提交,即检索最新的更改

完成后,选择您感兴趣的分支,并利用文件条目索引器访问您感兴趣的内容

字符串clonedrepath=Repository.CloneremoteRepositoryUrl,localPath; 使用var repo=new repositoryclonedrepath { var masterBranch=回购分支机构[主]; var latestCommit=masterBranch.Tip; var blob=latestCommit[path/to/your/file.txt]。目标为blob; Console.WriteLineblob.GetContentText; } 如果您愿意进行特定的修订,而不是某个特定分支的最新提交,以下内容应该可以帮助您

var specificCommit=repo.Lookupe90810b; 这将检索指定的短sha指出的提交。无论如何,Lookup方法支持

考虑到效率的观点,如果您对特定的远程存储库感兴趣,您可能愿意执行以下操作:

克隆存储库一次 通过repo.Network.ListReferences方法检查远程引用是否已更改,定期检查远程存储库是否已超过您的存储库。您可以利用此方法查看测试 如果远程引用与本地引用不同,请通过repo.Network.Fetch使用这些更改更新本地版本 检查文件的新内容
git协议不允许您通过网络直接访问特定blob 然而,正如Chris所指出的,一些GitWeb前端可以公开一个api,允许您这样做

为了通过LibGit2Sharp实现这一点,您必须在本地克隆存储库,即检索完整的历史记录或获取已推送到上游但在以前克隆的存储库中不存在的提交,即检索最新的更改

完成后,选择您感兴趣的分支,并利用文件条目索引器访问您感兴趣的内容

字符串clonedrepath=Repository.CloneremoteRepositoryUrl,localPath; 使用var repo=new repositoryclonedrepath { var masterBranch=回购分支机构[主]; var latestCommit=masterBranch.Tip; var blob=latestCommit[path/to/your/file.txt]。目标为blob; Console.WriteLineblob.GetContentText; } 如果您愿意进行特定的修订,而不是某个特定分支的最新提交,以下内容应该可以帮助您

var specificCommit=repo.Lookupe90810b; 这将检索指定的短sha指出的提交。无论如何,Lookup方法支持

考虑到效率的观点,如果您对特定的远程存储库感兴趣,您可能愿意执行以下操作:

克隆存储库一次 通过repo.Network.ListReferences方法检查远程引用是否已更改,定期检查远程存储库是否已超过您的存储库。您可以利用此方法查看测试 如果远程引用与本地引用不同,请通过repo.Network.Fetch使用这些更改更新本地版本 检查文件的新内容
您将使用什么软件来运行Git服务器?大多数都提供了通过HTTP下载文件的方法,例如。https://raw.githubusercontent.com////path/to/file 或https://gitlab.com///raw//path/to/file.@Chris你有什么建议或者知道在哪里可以找到这样的软件吗?这取决于你将在哪里运行它,你需要什么功能,以及你愿意支付多少。两个流行的免费选项是托管,或者托管你自己的Ruby on Rails,在Linux上运行良好,托管你自己的IIS和Windows。什么软件可以
您使用什么来运行Git服务器?大多数都提供了通过HTTP下载文件的方法,例如。https://raw.githubusercontent.com////path/to/file 或https://gitlab.com///raw//path/to/file.@Chris你有什么建议或者知道在哪里可以找到这样的软件吗?这取决于你将在哪里运行它,你需要什么功能,以及你愿意支付多少。两个流行的免费选项是托管,或者托管你自己的Ruby on Rails,在Linux上运行良好,托管你自己的IIS和Windows;不幸的是,这不是我们想要的解决方案。看起来我将不得不研究使用HTTPREST,正如Chris在对我的问题的评论中所建议的那样。您对服务器软件或在哪里查找这些信息有什么建议吗?谢谢您提供的信息,但是是的,这似乎效率非常低。我们希望阅读一个特定的文件,以便从大约30个存储库中的每个存储库中获取发行说明。克隆所有这些基因对我们来说都是不可能的。我还要继续调查。谢谢你的意见;不幸的是,这不是我们想要的解决方案。看起来我将不得不研究使用HTTPREST,正如Chris在对我的问题的评论中所建议的那样。您对服务器软件或在哪里查找这些信息有什么建议吗?谢谢您提供的信息,但是是的,这似乎效率非常低。我们希望阅读一个特定的文件,以便从大约30个存储库中的每个存储库中获取发行说明。克隆所有这些基因对我们来说都是不可能的。我还得继续调查。