Search code examples
libgit2libgit2sharp

how to commit and push in libgit2sharp


I just downloaded the nugget package for libgit2sharp. I am finding it difficult to do even basic operations.

I have an existing git repo (both remote and local). I just need to commit new changes when it occurs and push it to the remote.

I have the code below to explain what I did.

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...");

Where should I specify remote url's ? also is this the right way of doing these operations(commit & push)?

Thanks


Solution

  • public void StageChanges() {
        try {
            RepositoryStatus status = repo.Index.RetrieveStatus();
            List<string> filePaths = status.Modified.Select(mods => mods.FilePath).ToList();
            repo.Index.Stage(filePaths);
        }
        catch (Exception ex) {
            Console.WriteLine("Exception:RepoActions:StageChanges " + ex.Message);
        }
    }
    
    public void CommitChanges() {
        try {
    
            repo.Commit("updating files..", new Signature(username, email, DateTimeOffset.Now),
                new Signature(username, email, DateTimeOffset.Now));
        }
        catch (Exception e) {
            Console.WriteLine("Exception:RepoActions:CommitChanges " + e.Message);
        }
    }
    
    public void PushChanges() {
        try {
            var remote = repo.Network.Remotes["origin"];
            var options = new PushOptions();
            var credentials = new UsernamePasswordCredentials { Username = username, Password = password };
            options.Credentials = credentials;
            var pushRefSpec = @"refs/heads/master";
            repo.Network.Push(remote, pushRefSpec, options, new Signature(username, email, DateTimeOffset.Now),
                "pushed changes");
        }
        catch (Exception e) {
            Console.WriteLine("Exception:RepoActions:PushChanges " + e.Message);
        }
    }