Как управлять преобразованием концов строк с помощью LibGit2Sharp? - PullRequest
2 голосов
/ 30 мая 2019

Я использую LibGit2Sharp для доступа к удаленному Git-репозиторию.Сценарий выглядит следующим образом:

  1. Клонирование хранилища с удаленного URL-адреса с использованием метода Repository.Clone.
  2. Выборка из удаленного хранилища с использованием метода Commands.Fetch.
  3. Перейдите к необходимому коммиту по тегу commit = repo.Tags["myTag"].PeeledTarget as Commit;
  4. Получить дерево коммитов tree = commit.Tree
  5. Перейдите по дереву и получите файл blob blob = tree["my path"].Target as Blob
  6. Получить файлсодержимое из BLOB-объекта blob.GetContentStream()

В результате я получаю текст файла с окончаниями строк Unix, так как он хранится в хранилище.Но я предпочитаю иметь окончания строк Windows в своей локальной копии.

Мне нужно, чтобы Git автоматически преобразовывал окончания строк для меня, как это происходит с опцией core.autocrlf config.Как мне это сделать с помощью LibGit2Sharp?

1 Ответ

0 голосов
/ 30 мая 2019

Проверьте, действительно ли 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, выпуск 1195 # :

отмечает, core.autocrlf ужасен и устарел, и его следует избегать в пользу правильно настроенного .gitattributes везде.

OP CF подтверждает в комментариях :

Видимо, мне нужно проверить тип BLOB-объекта, используя свойство IsBinary и использовать GetContentText или GetContentStream соответственно

...