From eqqon

Jump to: navigation, search


Playing around with git's objects


      //Opening an existing git repository
      repo = new Repository("path/to/repo");

      // Now suppose you have created some new files and want to commit them
      repo.Index.Add("README", "License.txt");
      Commit commit = repo.Commit("My first commit with gitsharp", new Author("henon", ""));

      // Easy, isn't it? Now let's have a look at the changes of this commit:
      foreach (Change change in commit.Changes)
        Console.WriteLine(change.Name + " " + change.ChangeType);

      //Get the staged changes from the index

      //Access and manipulate the configuration
      repo.Config["core.autocrlf"] = "false";


      // Get the message of the previous commit
      string msg = new Commit(repo, "HEAD^").Message;
      Debug.Assert(msg == repo.CurrentBranch.CurrentCommit.Parent.Message);

      //Print a list of changes between two commits c1 and c2:
      Commit c1 = repo.Get<Commit>( "979829389f136bfabb5956c68d909e7bf3092a4e"); // <-- note: short hashes are not yet supported
      Commit c2 = new Commit(repo, "4a7455c2f23e0f7356877d1813594041c56e2db9");
      foreach (Change change in c1.CompareAgainst(c2))
        Console.WriteLine(change.ChangeType + ": " + change.Path);

      //Print all previous commits of HEAD of the repository repo
      foreach (Commit commit in repo.Head.CurrentCommit.Ancestors)
        Console.WriteLine(commit.ShortHash + ": " + commit.Message + ", " + commit.Author.Name + ", " + commit.AuthorDate);

Tree & Leaf

      //Get the root tree of the most recent commit
      var tree = repo.Head.CurrentCommit.Tree;

      //It has no Parent so IsRoot should be true
      Debug.Assert(tree.Parent == null);

      //Now you can browse throught that tree by iterating over its child trees
      foreach (Tree subtree in tree.Trees)

      //Or printing the names of the files it contains
      foreach (Leaf leaf in tree.Leaves)


      //A Leaf is a Blob and inherits from it a method to retrieve the data as a UTF8 encoded string:
      string string_data = new Blob(repo, "49322bb17d3acc9146f98c97d078513228bbf3c0").Data;

      // Blob also let's you access the raw data as byte array
      byte[] byte_data = new Blob(repo, "49322bb17d3acc9146f98c97d078513228bbf3c0").RawData;


      //Get the current branch
      var branch = repo.CurrentBranch;
      Console.WriteLine("Current branch is " + branch.Name);

      //Another way to get the current branch
      Branch head = repo.Head;

      // check if head == master
      Debug.Assert(head.Name == "master");

      //Get master branch

      var master = new Branch(repo, "master");
      Debug.Assert(master == repo.Get<Branch>("master"));

      //Get the abbreviated hash of the last commit on master

      //Create a new branch
      var b = GitSharp.Branch.Create(repo, "foo");

      // Switching to our new branch

      //Check if foo is current branch

      //Reset the branch to a previous commit (hard or soft or mixed)
      master.Reset("HEAD^", ResetBehavior.Hard);
      master.Reset("49322bb17d3acc9146f98c97d078513228bbf3c0", ResetBehavior.Soft);
      master.Reset("master", ResetBehavior.Mixed);

Using git commands


      //Initializing a new repository in the current directory (if GID_DIR environment variable is not set)

      //Initializing a new repository in the specified location

      //Initializing a new repository with options
      var cmd = new InitCommand { GitDirectory ="path/to/repo", Quiet = false, Bare = true };


      //Clone a repository from a public repository via http
      Git.Clone("git://", "path/to/local/copy");

      // Or using options
      Git.Clone(new CloneCommand { Source = "git://", GitDirectory = "path/to/local/copy", Quiet = false, Bare = true });