在 Git 分支中搜索文件
Searching for a file in a Git branch
我正在尝试获得在所有分支中搜索文件的功能。例如,我有 10 个分支,我需要获取该文件的所有不同版本(查看、比较或更多,例如,我可以为客户提供许多个性化文档、.css
文件、带有硬编码内容的源文件- 这并不重要 - 我只需要访问所有这些)。 libgit2sharp 库有可能吗?或者其他 libgit2 实现?
我知道这个
public BranchCollection Branches{
get { return branches; }
}
和这条路线
string pathToRepo = "directory//folders//.git";
using (var repo = new Repository(pathToRepo))
{
foreach (var branch in repo.Branches)
{
var file = branch.SEARCH_FOR_FILE(string fileName); //I need something like this
Console.WriteLine("File found in" + branch.Name + "yours stuff: " + file.ToString()/something other);
}
}
我找到了提供在日志、adding/moving/deleting 分支中搜索指定提交的代码和示例,但是...与搜索文件无关。有人可以帮助我吗?在合理的时间内有可能吗?如果我正在使用 Git,我可以尝试搜索,例如在文件系统中对所有分支文件夹中的文件进行强力搜索(但我猜这是个坏主意),如果我想实现数据库后端怎么办?
如果我是对的,在 Git 中实现了类似的东西,命令为:
git log --all --pretty=format: | sort -u | grep MyAwesomeFile.extension
在Git中,每次提交都包含源代码的完整快照。此外,每个提交都包含一个指向其父提交(即快照的先前版本)的指针。这种父子关系允许沿着链走并比较不同的版本,以便检测沿着这条提交链的变化。
一个分支只指向一个提交(即 "latest" 版本)。
因此,相同的文件(例如:/path/to/my/file.css
)可能以不同的形式存在于分支的尖端(最新提交)或其祖先中。
根据你的问题,我了解到你愿意从所有分支的顶端提取同一个文件,以便将它们相互比较。
这可以通过 LibGit2Sharp 轻松完成。 Commit
公开了一个接受路径的索引器。这将 return 一个 TreeEntry
。 Target
属性 指向 GitObject
(在本例中为 Blob
,因为您是在查找文件而不是目录)。
下面的代码将枚举所有分支并转储每个名为 /path/to/my/file.css
的文件的内容。警告,下面的代码假定该文件确实存在于您的所有分支中,如果不是这种情况,您可能需要稍微调整一下。
foreach (var branch in repo.Branches)
{
var treeEntry = branch.Tip["/path./to/my/file.css"];
if (treeEntry == null)
{
// The file doesn't exist in this commit
continue;
}
var blob = (Blob)treeEntry.Target;
Console.WriteLine(blob.GetContentAsText());
}
我正在尝试获得在所有分支中搜索文件的功能。例如,我有 10 个分支,我需要获取该文件的所有不同版本(查看、比较或更多,例如,我可以为客户提供许多个性化文档、.css
文件、带有硬编码内容的源文件- 这并不重要 - 我只需要访问所有这些)。 libgit2sharp 库有可能吗?或者其他 libgit2 实现?
我知道这个
public BranchCollection Branches{
get { return branches; }
}
和这条路线
string pathToRepo = "directory//folders//.git";
using (var repo = new Repository(pathToRepo))
{
foreach (var branch in repo.Branches)
{
var file = branch.SEARCH_FOR_FILE(string fileName); //I need something like this
Console.WriteLine("File found in" + branch.Name + "yours stuff: " + file.ToString()/something other);
}
}
我找到了提供在日志、adding/moving/deleting 分支中搜索指定提交的代码和示例,但是...与搜索文件无关。有人可以帮助我吗?在合理的时间内有可能吗?如果我正在使用 Git,我可以尝试搜索,例如在文件系统中对所有分支文件夹中的文件进行强力搜索(但我猜这是个坏主意),如果我想实现数据库后端怎么办?
如果我是对的,在 Git 中实现了类似的东西,命令为:
git log --all --pretty=format: | sort -u | grep MyAwesomeFile.extension
在Git中,每次提交都包含源代码的完整快照。此外,每个提交都包含一个指向其父提交(即快照的先前版本)的指针。这种父子关系允许沿着链走并比较不同的版本,以便检测沿着这条提交链的变化。
一个分支只指向一个提交(即 "latest" 版本)。
因此,相同的文件(例如:/path/to/my/file.css
)可能以不同的形式存在于分支的尖端(最新提交)或其祖先中。
根据你的问题,我了解到你愿意从所有分支的顶端提取同一个文件,以便将它们相互比较。
这可以通过 LibGit2Sharp 轻松完成。 Commit
公开了一个接受路径的索引器。这将 return 一个 TreeEntry
。 Target
属性 指向 GitObject
(在本例中为 Blob
,因为您是在查找文件而不是目录)。
下面的代码将枚举所有分支并转储每个名为 /path/to/my/file.css
的文件的内容。警告,下面的代码假定该文件确实存在于您的所有分支中,如果不是这种情况,您可能需要稍微调整一下。
foreach (var branch in repo.Branches)
{
var treeEntry = branch.Tip["/path./to/my/file.css"];
if (treeEntry == null)
{
// The file doesn't exist in this commit
continue;
}
var blob = (Blob)treeEntry.Target;
Console.WriteLine(blob.GetContentAsText());
}