我得到了另一个libgit2问题,非常感谢你的帮助.
我正在尝试检索文件历史记录,即更改此文件的提交列表.而且它似乎非常传统......据我所见,没有任何功能.
我能想到的唯一方法是使用版本控制API迭代修订版本,检查附加到提交的树对象并在那里搜索给定文件,如果找到,则将提交添加到我的列表中,否则继续下一次提交.
但它对我来说似乎不是最理想的......
可能是有任何其他方法,例如,直接查看.git文件夹并获取所需信息吗?
提前谢谢了!
启动TortoiseGit时出现此错误:

无法得到所有裁判.
libgit2返回:未找到Refspec'refs/heads/origin/HEAD'
虽然烦人,但它并不妨碍我使用TortoiseGit.但是,我想让它消失,因为它很烦人.我该如何解决?
有没有关于Git如何在其存储库中存储文件的文档?我试图通过互联网搜索,但没有可用的结果.也许我正在使用不正确的查询或者这可能是一个很大的秘密 - Git存储库内部格式?
让我解释一下,为什么我需要这个火箭科学信息:我正在使用C#来获取文件历史表格存储库.但是在libgit2sharp图书馆里,目前尚未实施.所以(作为一个负责任的人;)我需要自己实现这个功能,并为社区做出贡献.
但是在将内核源代码移动到github后,我甚至不知道从哪里开始搜索.
提前谢谢了!
想象一下Git背后的数据结构.它就像一个有条理的持久性数据结构,除了使用散列引用而不是传统的指针.
我需要Git的数据结构,除了没有任何工作树和索引的东西.并且将有数百万个分支机构,每个分支机构跟踪少数其他本地分支机构.提交和合并将在不同的线程上每分钟发生几千次.拉动会每秒发生一次.
在libgit2和jgit之间我可以使用Git的数据存储子系统.
但我使用合适的工具吗?是否有一个具有git功能的数据库,但更快/更多并发/可扩展/更少阻抗不匹配?内存缓存写入非常有用.
一个协作编辑的游戏.每个玩家都有自己的分支,他们对游戏世界所做的每一项改变都只适用于他们的版本.可信用户将更改合并回"主"分支.数据和源代码通常捆绑在一起,需要相同的分支和合并功能.
我不确定我是否理解git和libgit2正确之间的区别,因为存储库git不同libgit2,我的意思是它们不一样.
我想知道这两个库之间有什么区别吗?
如何获取包含特定文件的提交列表,即等效git log path于LibGit2Sharp.
它没有实施,还是有一种我失踪的方式?
我想在分支上进行提交(例如master).
我使用pygit2(pygit2.clone_repository)制作存储库克隆
然后我更改存储库中的现有文件.
然后我运行它来进行提交:
index = repository.index
index.add_all()
index.write()
author = pygit2.Signature(user_name, user_mail)
commiter = pygit2.Signature(user_name, user_mail)
tree = repository.TreeBuilder().write()
oid = repository.create_commit(reference, author, commiter, message,tree,[repository.head.get_object().hex])
Run Code Online (Sandbox Code Playgroud)
但是当我去存储库运行时git status:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: test.txt
Run Code Online (Sandbox Code Playgroud)
似乎添加了修改后的文件以进行提交,但提交未成功.使用返回的Oid,我可以在pygit2存储库中找到commit属性.
我错过了什么 ?
我正在使用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库腾飞!
git ×10
libgit2 ×10
libgit2sharp ×5
c# ×2
github ×1
graph-theory ×1
history ×1
jgit ×1
nosql ×1
pygit2 ×1
tortoisegit ×1
windows ×1