问题标签 [libgit2sharp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 如何使用 LibGit2(Sharp) 为 Git 存储库构建版本树
一些背景:
我正在研究使用 Git 作为数据存储层的可能性。基本上我需要保留一些描述应用程序状态的 XML 文件的所有版本。用户需要一个“时间机器”才能恢复到以前的状态,以及分支以前的状态等。这将隐藏在服务层后面,但我正在考虑在后端使用 Git。
我需要展示应用程序状态随时间的演变,所以我想构建一个网络图来显示变化、分支等。
为此,我需要直观地构建版本树。基本上,我想这样做:
我正在使用 LibGit2Sharp。我已经浏览了 API,但没有立即看到任何有用的东西。我对 Git 也很了解,但这并没有帮助。
libgit2 - libgit2 是否支持 SSH 传输协议?
是否可以使用 ssh-keys 通过 ssh 克隆存储库?
libgit2sharp - 如何确定获取的远程引用是否具有更新版本的文件?
我对从HostA推送到远程的文件 (RemoteTest.txt) 进行了更改。在HostB上,我的状态是没有最后一次推送。
现在,当我使用“git diff”进入 bash 时,我看到了变化。
..等等...
我试图在 C# 中使用
但 tc 显示 0 变化。这样做的正确方法是什么?
提前致谢。
c# - LibGit2Sharp 找不到 git2.dll
我已经构建了一个小型 wpf 应用程序来管理我正在开发的网站。这个应用程序的主要特点是它允许我检出主题存储库的不同分支。这在 Visual Studio 中完美运行,但是当我在我的 Windows 8 机器上发布、安装和运行该应用程序时,它会返回:
我已经通过互联网和stackoverflow进行了搜索。还有类似的问题,如Unable to load DLL 'git2.dll' The specified module could not be found但是提供的答案(以及答案中描述的github问题中显示的答案)又出现了一个错误:
我尝试通过 nuget 安装最新版本,包括编译的 dll 并添加 git2.dll,包括我的解决方案中的 libgit2sharp 项目。再一次,当我通过 Visual Studio 运行它时它运行良好,但当我发布、安装和运行它时失败。
我不确定需要包含哪些信息,因此请随时发表评论并让我知道,以便我更新问题。
谢谢!
push - 如何推送到本地远程?
我很难使用 libgit2sharp 将我的提交推送到远程存储库。使用 git bash 它工作正常。
远程通过 UNC 寻址,例如“//computer_name/remote.git”。所以它是本地网络中机器上的一个文件夹,它有一个可访问的文件夹。
使用 libgit2sharp 将其克隆到本地存储库工作得很好,并且构建远程也成功了
Remote remote = localrepo.Network.Remotes["origin"];
现在,当我尝试使用以下命令推送到遥控器时:
localrepo.Network.Push(remote, "HEAD", "origin");
我在 Proxy.cs 的 git_push_add_refspec() 中遇到异常
所以我尝试了:
repo.Network.Push(remote, "HEAD", @"refs/remotes/origin/master");
并在 Proxy.cs 的 git_push_finish() 中得到了异常
是否有正确的方法可以做到这一点,或者我的用例是否存在支持问题?提前致谢!
[更新]
现在我的命令看起来像这样
它PushStatusErrorHandler
只有一行代码,它应该在其中写入PushErrorStatus
控制台。但是控制台保持空白,然后发生上述异常。
[更新 2]
当我经历上述情况时,静态变量 Repository.Version 为 0.9.5。
c# - 使用 libgit2sharp 进行导出
我在 .net 应用程序中使用 libgit2sharp。我想从 github 获取一个目录。我现在可以通过使用 Repository.Clone 克隆整个目录来做到这一点。但这需要很长时间,而且我获取的文件比我需要的要多。例如 .git-repository 以及一些我不感兴趣的文件夹。
有没有办法可以使用 libgit2sharp 从 git 存储库中导出单个文件夹?还是我应该以另一种方式做到这一点?
c# - 暂存文件和提交的正确方法
当我尝试执行以下操作时,我最终只会生成空提交;也就是说,它创建了一个没有任何更改的提交。
请注意,路径是相对的,这意味着,我创建了我的Repository
usingRepository repo = new Repository(".");
然后使用路径(上面称为文件名), ".gitignore"
或者"files/text.txt"
这似乎是正确的方法,但它不起作用。
可以在此处完整找到演示此“实际操作”的代码,但基本上是这样运行的:
同样重要的是要注意vcs.GetRepository()
返回 aRepository
您还可以看到一些空白提交的示例,因为我使用该工具尝试自行提交。在这里查看一个。
此外,我已经验证我正在尝试暂存然后提交在命令行中标记为已修改的文件,使用git status
. 所以,我不只是尝试提交未修改的文件,也不是提交已经暂存的文件。我(据我所知)正在尝试对.Stage() .Commit()
需要更新的文件执行此过程。
更新
根据 nulltoken 的要求:
在调用 Index.Stage 的行之前添加 Console.WriteLine(string.Format("{0} - {1}", f.GetRepresenation(), vcs.GetRepository().Index.RetrieveStatus(f.GetRepresenation()))) ()。
暂存我的“测试”文件时的结果输出是
在执行 repo.Commit 调用的行上添加断点运行代码。当你命中断点时,请对 vcs.GetRepository() 指向的存储库运行 git status
这会产生 git status 的输出,指示
Commit()
在让执行之前和之后。虽然之后,它确实包含
# Your branch is ahead of 'origin/master' by 1 commit.
也是。
更新 2
这表现如预期,在暂存后产生以下输出:
然后我立即致电 Commit,我得到:
所以,前面的计数增加了一次,表明有一个提交,但文件仍然被报告为新更改,尽管据我所知它不是!
更新 3
我只是在跑步时注意到了一些东西git diff
。发现的差异是文件模式更改(即从 100644 到 100755),也许这就是实际发生的情况。我将尝试使用可以清楚地保持静态的文件(不会在任何地方打开并查看系统是否像 git 一样正常运行,但编辑器正在做一些奇怪的文件模式的事情)。
更新 4
响应更新 3,我意识到我是个白痴。lib2gitsharp 运行正常,但我愚蠢地没有检查 github(显然)没有在视觉上显示的任何内容是否发生了变化。在这种情况下,我试图Stage
并且Commit
不断变化的东西的文件模式(无论出于何种原因,尽管我责怪统一)。这导致它看起来什么都没有改变,当真正的东西在改变时,只是没有文件内容。所以总而言之,这个问题自己回答了,我花了太长时间才意识到它。
我还要花一点时间对nulltoken 表示感谢,因为尽管我无法意识到一些小事,但他提供了一些很大的帮助,最终让我到达了那里。
.net - 由于 Repository Merge 还没有实现,还有其他选择吗?
我们公司有一个项目,它具有复杂的文件同步场景,自然而然地 git 作为解决方案出现了。因为它是一个 .net 项目,所以 libgit2sharp 正是我们正在寻找的 API。
从nullpointer 对此线程的响应看来,merge 仍未实现,并且无法合并来自远程分支的更改可能会导致我们考虑另一种方法来解决这个问题(我们不希望因为我们已经进行了测试使用 libgit2sharp 确实很成功)。
是否有提供远程合并的可能性或替代方案?会在短期内发布吗?
提前致谢。
c# - 进行并行阶段的最佳方法?
我想并行暂存文件并同时提交到不同的分支。
同时会有多个访问。repo.Index.Stage/repo.Commit API 在同一个当前目录上工作,所以我认为这是不可能的。
你们能给我一些关于如何实现这一目标的提示吗?一个普遍的想法?
c# - 如何获得命名分支?
我正在使用 LibGit2Sharp 并希望获得特定分支的最新提交,但是由于缺少文档或我自己的错误,我无法找到如何实现这一点。
因此,获取特定分支当前提交的最简单方法是什么?