我得到了另一个libgit2问题,非常感谢你的帮助.
我正在尝试检索文件历史记录,即更改此文件的提交列表.而且它似乎非常传统......据我所见,没有任何功能.
我能想到的唯一方法是使用版本控制API迭代修订版本,检查附加到提交的树对象并在那里搜索给定文件,如果找到,则将提交添加到我的列表中,否则继续下一次提交.
但它对我来说似乎不是最理想的......
可能是有任何其他方法,例如,直接查看.git文件夹并获取所需信息吗?
提前谢谢了!
所以使用LibGit2Sharp https://github.com/libgit2/libgit2sharp你可以像这样走过分支
using (var repo = new Repository(@"path to .git"))
{
foreach (var branch in repo.Branches)
{
Debug.WriteLine(branch.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
但是如何获得当前/活动分支?
在libgit2sharp中https://github.com/libgit2/libgit2sharp/如何检查待处理/未提交的更改?
有没有关于Git如何在其存储库中存储文件的文档?我试图通过互联网搜索,但没有可用的结果.也许我正在使用不正确的查询或者这可能是一个很大的秘密 - Git存储库内部格式?
让我解释一下,为什么我需要这个火箭科学信息:我正在使用C#来获取文件历史表格存储库.但是在libgit2sharp图书馆里,目前尚未实施.所以(作为一个负责任的人;)我需要自己实现这个功能,并为社区做出贡献.
但是在将内核源代码移动到github后,我甚至不知道从哪里开始搜索.
提前谢谢了!
我有这个方法,我从上次提交中获取文件:
static void GetFiles(Tree t, String dir = "")
{
foreach (TreeEntry treeEntry in t)
{
if (treeEntry.TargetType == TreeEntryTargetType.Tree)
{
Tree tr = repo.Lookup<Tree>(treeEntry.Target.Sha);
GetFiles(tr, dir + "/" + treeEntry.Name);
}
else
{
string caminho = dir + "/" + treeEntry.Path;
arquivos.Add(caminho);
}
}
return;
}
Run Code Online (Sandbox Code Playgroud)
我看了一下这个问题,但我是C#的新手并且不明白.
我有这个存储库:
c:/teste
| - octocat.txt
| - parentoctocat.txt
| - /outros
| | - octocatblue.txt
| | - octored.txt
Run Code Online (Sandbox Code Playgroud)
我上次提交修改了这些文件:
c:/teste
| - /outros
| | - octocatblue.txt <- This …Run Code Online (Sandbox Code Playgroud) 我想将文件从Azure App Service上的文件夹推送到Git存储库.
我已将本地git repo复制到服务器,我使用LibGit2Sharp提交并推送这些文件:
using (var repo = new Repository(@"D:\home\site\wwwroot\repo"))
{
// Stage the file
Commands.Stage(repo, "*");
// Create the committer's signature and commit
Signature author = new Signature("translator", "example.com", DateTime.Now);
Signature committer = author;
// Commit to the repository
Commit commit = repo.Commit($"Files updated {DateTime.Now}", author, committer);
Remote remote = repo.Network.Remotes["origin"];
var options = new PushOptions
{
CredentialsProvider = (_url, _user, _cred) =>
new UsernamePasswordCredentials
{
Username = _settings.UserName,
Password = _settings.Password
}
};
repo.Network.Push(remote, @"+refs/heads/master", options);
} …Run Code Online (Sandbox Code Playgroud) 如何获取包含特定文件的提交列表,即等效git log path于LibGit2Sharp.
它没有实施,还是有一种我失踪的方式?
我想使用libgit2sharp在git上创建和删除分支.我提出了这个代码,但它会抛出一个错误repo.Network.Push(localBranch, pushOptions);
using (var repo = new Repository(GIT_PATH))
{
var branch = repo.CreateBranch(branchName);
var localBranch = repo.Branches[branchName];
//repo.Index.Stage(GIT_PATH);
repo.Checkout(localBranch);
repo.Commit("Commiting at " + DateTime.Now);
var pushOptions = new PushOptions() { Credentials = credentials };
repo.Network.Push(localBranch, pushOptions); // error
branch = repo.Branches["origin/master"];
repo.Network.Push(branch, pushOptions);
}
Run Code Online (Sandbox Code Playgroud)
错误消息是 The branch 'buggy-3' ("refs/heads/buggy-3") that you are trying to push does not track an upstream branch.
我尝试在互联网上搜索此错误,但我发现没有解决方案可以解决问题.是否可以使用libgit2sharp执行此操作?
我正在使用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库腾飞!