как зафиксировать и нажать в libgit2sharp

Я только что скачал пакет nugget для libgit2sharp. Мне трудно выполнять даже элементарные операции.

У меня есть репозиторий git (как удаленный, так и локальный). Мне просто нужно зафиксировать новые изменения, когда это произойдет, и отправить их на удаленный компьютер.

У меня есть код ниже, чтобы объяснить, что я сделал.

string path = @"working direcory path(local)";
Repository repo = new Repository(path);
repo.Commit("commit done for ...");

Remote remote = repo.Network.Remotes["origin"];          
var credentials = new UsernamePasswordCredentials {Username = "*******", Password = "******"};
var options = new PushOptions();
options.Credentials = credentials;
var pushRefSpec = @"refs/heads/master";                      
repo.Network.Push(remote, pushRefSpec, options, null, "push done...");

Где я должен указать удаленный URL-адрес? также это правильный способ выполнения этих операций (фиксация и нажатие)?

Спасибо


person user3900196    schedule 01.08.2014    source источник
comment
Вы указываете URL как атрибут удаленного. Здесь нет фиксации, что вы пробовали для этого? Что не работает?   -  person Carlos Martín Nieto    schedule 01.08.2014
comment
Что ж, в remote.url есть только геттер и нет сеттера!?! Также я просто пытаюсь зафиксировать изменения, которые я сделал в своем локальном рабочем каталоге, а затем отправить их в удаленный репозиторий.   -  person user3900196    schedule 01.08.2014


Ответы (2)


У пульта уже есть URL.

Если вы хотите изменить URL-адрес, связанный с удаленным устройством с именем «origin», вам необходимо:

  • удалите этот пульт:

    repo.Network.Remotes.Remove("origin");
    
    # you can check it with:
    Assert.Null(repo.Network.Remotes["origin"]);
    Assert.Empty(repo.Refs.FromGlob("refs/remotes/origin/*"));
    
  • создать новый (refspec по умолчанию)

    const string name = "origin";
    const string url = "https://github.com/libgit2/libgit2sharp.git";
    repo.Network.Remotes.Add(name, url);
    
    # check it with:
    Remote remote = repo.Network.Remotes[name];
    Assert.NotNull(remote);
    

Подробнее см. на странице LibGit2Sharp.Tests/RemoteFixture.cs.


Как обновлено в комментариях nulltoken, участник libgit2:

PR 803 был объединен.
Это должно разрешить некоторый код, например

Remote updatedremote = 
   repo.Network.Remotes.Update(remote, r => r.Url = "http://yoururl"); 
person VonC    schedule 02.08.2014
comment
PR #803 объединен. Это должно разрешить некоторый код, такой как Remote updatedremote = repo.Network.Remotes.Update(remote, r => r.Url = "http://yoururl"); - person nulltoken; 01.09.2014
comment
@nulltoken действительно выглядит лучше. Я включил ваш комментарий в ответ для большей наглядности; - person VonC; 01.09.2014

person    schedule
comment
Ваш был полезен, и спасибо за это (+1). Но я предполагаю, что основное внимание было уделено базовым операциям, таким как фиксация и отправка. Я просто не хочу вводить других в заблуждение. - person user3900196; 05.08.2014
comment
Критическое изменение в версии LibGit2Sharp 0.26.2: var status = repo.RetrieveStatus(); var filePaths = status.Modified.Select(mods => mods.FilePath).ToList(); foreach (var filePath in filePaths) { repo.Index.Add(filePath); repo.Index.Write(); } - person Patrick; 13.10.2020