Нажатие на битбакет с помощью libgit2sharp

Я пытаюсь использовать libgit2sharp для перехода к моему репозиторию на битбакете. Я пытаюсь сделать это:

repo.Network.Push(repo.Branches[branchName], pushOptions);

Кажется, все в порядке, исключения не выдаются, и я не получаю ошибок в обратном вызове, но когда я проверяю битбакет, ни одной из моих коммитов нет. Другие методы работают нормально (например, я могу создать новую ветку на битбакете, а затем использовать libgit2sharp для извлечения и увидеть, что теперь у меня есть эта ветка локально). Есть ли что-то, что я мог бы пропустить здесь?

редактировать:

Попытался просто сделать небольшой пример программы, чтобы посмотреть, смогу ли я заставить ее работать без проблем. Я не знаю, поможет ли мой код, но вот он:

 class Program
{
    static void Main(string[] args)
    {
        PushOptions options = new PushOptions();
        Credentials creds = new Credentials();
        creds.Username = "username";
        creds.Password = "password";
        options.Credentials = creds;
        options.OnPackBuilderProgress = Program.packBuilderProgressHandler;
        options.OnPushTransferProgress = Program.pushTransferProgressHandler;
        options.OnPushStatusError = Program.pushStatusErrorHandler;
        Repository repo = new Repository("E:/Ohad/Work/libgitTest");

        repo.Network.Push(repo.Branches["origin/master"], options);

        Console.WriteLine("Press enter to close...");
        Console.ReadLine();
    }

    public static bool packBuilderProgressHandler(PackBuilderStage stage, int current, int total)
    {
    Console.Out.WriteLine("packBuilder => " + current +  " / " + total);
        return true;
   }
    public static bool pushTransferProgressHandler(int current, int total, long bytes)
    {
    Console.Out.WriteLine("pushTransfer => " + current + " / " + total +  " , " + bytes);
    return true;
    }
    public static void pushStatusErrorHandler(PushStatusError error)
    {
        Console.Out.WriteLine("error => " + error.Message);
    }
}

Просто создайте новый репозиторий на битбакете и добавьте приведенный выше код (изменив жестко запрограммированный материал), и он должен быть воспроизводимым. Я просто сделал случайное изменение, добавил и зафиксировал его, а затем использовал программу, чтобы попытаться отправить его в битбакет. Вывод, который я получаю из вышеизложенного:

pushTransfer => 0 / 0 , 12
pushTransfer => 0 / 0 , 32
Press enter to close...

0/0 выглядит подозрительно для меня, но я не знаю, что я делаю неправильно =/. Спасибо за любую помощь!!

редактировать 2: я только что добавил это:

 repo.Branches.Update(repo.Head, delegate(BranchUpdater updater)
        {
            updater.Remote = "origin";
            updater.UpstreamBranch= repo.Head.CanonicalName;
        })

до того, как я нажму, и это устранило проблему. Не знаю точно, почему, но я возьму его =).


person user3236635    schedule 23.03.2014    source источник
comment
Боюсь, что без репродукционного кода и репозитория, с которым он не работает, решить вашу проблему будет очень сложно.   -  person nulltoken    schedule 24.03.2014
comment
nulltoken помогает ли что-либо из вышеперечисленного? Спасибо =)   -  person user3236635    schedule 24.03.2014


Ответы (1)


Я думаю, что вы готовы продвигать свою локальную master ветку, а не удаленную.

repo.Network.Push(repo.Branches["master"], options);

Обновлять:

*Ветка master ("refs/heads/master"), которую вы пытаетесь отправить, не отслеживает вышестоящую ветку. *

Если у вас нет пульта «исходный», должно работать следующее.

Remote remote = localRepo.Network.Remotes.Add("origin", url);

repo.Branches.Update(repo.Head,                              -> (A)
    b => b.Remote = remote.Name,                             -> (B)
    b => b.UpstreamBranch = repo.Head.CanonicalName);        -> (C)

Приведенный выше код следует читать как "Ветка, на которую указывает HEAD (A) в этом локальном репозитории, по умолчанию будет настроена на отслеживание ветки с таким же именем (C) в удаленном репозитории, указанном этим удаленным (B)."

person nulltoken    schedule 24.03.2014
comment
Это то, что я пробовал изначально, но это вызывает исключение: ветка «мастер» (refs/heads/master), которую вы пытаетесь нажать, не отслеживает восходящую ветку. - person user3236635; 25.03.2014
comment
Это прекрасно работает. Обратите внимание: вам не обязательно добавлять пульт, если он уже добавлен в ваш репозиторий git. - person C Johnson; 02.07.2018