我正在使用LibGit2Sharp访问远程Git存储库。情况如下:
Repository.Clone
方法从远程URL克隆存储库。Commands.Fetch
方法从远程存储库中获取。commit = repo.Tags["myTag"].PeeledTarget as Commit;
导航到所需的提交tree = commit.Tree
blob = tree["my path"].Target as Blob
blob.GetContentStream()
中获取文件内容结果是,我得到了以Unix行结尾的文件文本,因为它存储在存储库中。但是我更喜欢在本地副本中包含Windows行尾。
我需要让Git为我自动转换行尾,就像使用core.autocrlf
config选项一样。如何使用LibGit2Sharp做到这一点?
答案 0 :(得分:0)
检查LibGit2Sharp.Tests/BlobFixture.cs
是否证明core.autocrlf是活动的:
[InlineData("false", "hey there\n")]
[InlineData("input", "hey there\n")]
[InlineData("true", "hey there\r\n")]
public void CanGetBlobAsFilteredText(string autocrlf, string expectedText)
{
SkipIfNotSupported(autocrlf);
var path = SandboxBareTestRepo();
using (var repo = new Repository(path))
{
repo.Config.Set("core.autocrlf", autocrlf);
var blob = repo.Lookup<Blob>("a8233120f6ad708f843d861ce2b7228ec4e3dec6");
var text = blob.GetContentText(new FilteringOptions("foo.txt"));
Assert.Equal(expectedText, text);
}
}
但是请注意,如libgit2/libgit2sharp issue 1195#中所述:
请注意,
core.autocrlf
非常糟糕且已过时,应避免在任何地方使用正确配置的.gitattributes
。
显然,我必须使用
IsBinary
属性检查blob的类型,并相应地使用GetContentText
或GetContentStream
答案 1 :(得分:0)
我正为同样的问题而苦苦挣扎。
要获得正确的行尾,您需要致电<html>
<head>
...
</head>
<body>
<?php include('file.php'); ?>
</body>
<html>
。该名称并不是真正的自我解释,而是将调用一个不同的函数(<?php <html>
),该函数将返回具有转换后的EOL的内容。
https://github.com/libgit2/libgit2sharp/blob/master/LibGit2Sharp/Blob.cs#L56