2017-11-14 3 views
1

Ich libgit2sharp verwenden, um Dateien in einem Repository zu drücken, sobald sie erzeugt wurden.libgit2sharp - Git - nicht schieben Nicht-fastforwardable Referenz

using (var repo = new Repository(RepositoryPath)) 
{ 
    // Stage the file 
    Commands.Stage(repo, "*"); 

    // Create the committer's signature and commit 
    Signature author = new Signature("translator", "example.com", DateTime.Now); 
    Signature committer = author; 

    // Commit to the repository 
    Commit commit = repo.Commit($"Resx files updated {DateTime.Now}", author, committer); 

    Remote remote = repo.Network.Remotes["origin"]; 
    var options = new PushOptions 
    { 
     CredentialsProvider = (_url, _user, _cred) => 
      new UsernamePasswordCredentials 
      { 
       Username = _settings.GitUserName, 
       Password = _settings.GitPassword 
      } 
    }; 
    repo.Network.Push(remote, @"refs/heads/master", options); 
} 

Dies ist seit einiger Zeit groß gearbeitet und drängt, ohne Frage zu der Verwahrungsstelle, aber ich bin jetzt die folgende Fehlermeldung für einige Dateien bekommen und die Push tritt nicht für alle Dateien.

Fehlermeldung (von Server-Log):

Message: cannot push non-fastforwardable reference 
StackTrace: at LibGit2Sharp.Core.Ensure.HandleError(Int32 result) 
    at LibGit2Sharp.Core.Proxy.git_remote_push(RemoteHandle remote, IEnumerable`1 refSpecs, GitPushOptions opts) 
    at LibGit2Sharp.Network.Push(Remote remote, IEnumerable`1 pushRefSpecs, PushOptions pushOptions) 
    at LibGit2Sharp.Network.Push(Remote remote, String pushRefSpec, PushOptions pushOptions) 
    at Westwind.Globalization.Core.Utilities.DbResXConverter.SyncToGit(String resourceSet) 

Ich habe Fehler gesucht, aber kann nichts finden, dass dies deckt? Auch als das Repository auf einem Azure Web-Server saß wird gehe ich davon aus ich würde jede Git-Befehle über libgit2sharp C# Code ausgeführt haben, da ich nicht Berechtigungen würde Kommandozeile Git-Befehle auszuführen.

Jede Hilfe zu diesem sehr geschätzt.

Antwort

3

Wenn Ihre Änderungen nicht von der Zweigstelle der Gegenstelle aus vorgeholt werden können, bedeutet dies, dass jemand anders die Zweigstelle des Repositorys aktualisiert hat. Sie müssen von der Fernbedienung holen, mit der Zweig der Fernbedienung verschmelzen, und dann können Sie schieben.

Alternativ können Sie Push erzwingen, indem Sie Ihrem Refspec eine + voranstellen (z. B. +refs/heads/master).