GitSharp/Examples
From eqqon
(→Repository) |
(→Commit) |
||
Line 19: | Line 19: | ||
=== Commit === | === Commit === | ||
- | Get the message of the previous commit | + | <span class="S0"> </span><span class="S2">// Get the message of the previous commit</span><br /> |
- | + | <span class="S0"> </span><span class="S5">string</span><span class="S0"> </span>msg<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S5">new</span><span class="S0"> </span>Commit<span class="S10">(</span>repo<span class="S10">,</span><span class="S0"> </span><span class="S6">"HEAD^"</span><span class="S10">).</span>Message<span class="S10">;</span><br /> | |
- | + | <span class="S0"> </span>Debug<span class="S10">.</span>Assert<span class="S10">(</span>msg<span class="S0"> </span><span class="S10">==</span><span class="S0"> </span>repo<span class="S10">.</span>CurrentBranch<span class="S10">.</span>CurrentCommit<span class="S10">.</span>Parent<span class="S10">.</span>Message<span class="S10">);</span><br /> | |
- | Print a list of changes between two commits c1 and c2: | + | <br /> |
- | + | <span class="S0"> </span><span class="S2">//Print a list of changes between two commits c1 and c2:</span><br /> | |
- | Console.WriteLine(change.ChangeType+": "+change.Path); | + | <span class="S0"> </span>Commit<span class="S0"> </span>c1<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>repo<span class="S10">.</span>Get<span class="S10"><</span>Commit<span class="S10">>(</span><span class="S0"> </span><span class="S6">"979829389f136bfabb5956c68d909e7bf3092a4e"</span><span class="S10">);</span><span class="S0"> </span><span class="S2">// <-- note: short hashes are not yet supported</span><br /> |
- | + | <span class="S0"> </span>Commit<span class="S0"> </span>c2<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S5">new</span><span class="S0"> </span>Commit<span class="S10">(</span>repo<span class="S10">,</span><span class="S0"> </span><span class="S6">"4a7455c2f23e0f7356877d1813594041c56e2db9"</span><span class="S10">);</span><br /> | |
- | Print all previous commits of HEAD of the repository repo | + | <span class="S0"> </span><span class="S5">foreach</span><span class="S0"> </span><span class="S10">(</span>Change<span class="S0"> </span>change<span class="S0"> </span><span class="S5">in</span><span class="S0"> </span>c1<span class="S10">.</span>CompareAgainst<span class="S10">(</span>c2<span class="S10">))</span><br /> |
- | + | <span class="S0"> </span>Console<span class="S10">.</span>WriteLine<span class="S10">(</span>change<span class="S10">.</span>ChangeType<span class="S0"> </span><span class="S10">+</span><span class="S0"> </span><span class="S6">": "</span><span class="S0"> </span><span class="S10">+</span><span class="S0"> </span>change<span class="S10">.</span>Path<span class="S10">);</span><br /> | |
- | Console.WriteLine(commit.ShortHash+": "+commit.Message+", "+commit.Author.Name+", "+commit. | + | <br /> |
+ | <span class="S0"> </span><span class="S2">//Print all previous commits of HEAD of the repository repo</span><br /> | ||
+ | <span class="S0"> </span><span class="S5">foreach</span><span class="S0"> </span><span class="S10">(</span>Commit<span class="S0"> </span>commit<span class="S0"> </span><span class="S5">in</span><span class="S0"> </span>repo<span class="S10">.</span>Head<span class="S10">.</span>CurrentCommit<span class="S10">.</span>Ancestors<span class="S10">)</span><br /> | ||
+ | <span class="S0"> </span>Console<span class="S10">.</span>WriteLine<span class="S10">(</span>commit<span class="S10">.</span>ShortHash<span class="S0"> </span><span class="S10">+</span><span class="S0"> </span><span class="S6">": "</span><span class="S0"> </span><span class="S10">+</span><span class="S0"> </span>commit<span class="S10">.</span>Message<span class="S0"> </span><span class="S10">+</span><span class="S0"> </span><span class="S6">", "</span><span class="S0"> </span><span class="S10">+</span><span class="S0"> </span>commit<span class="S10">.</span>Author<span class="S10">.</span>Name<span class="S0"> </span><span class="S10">+</span><span class="S0"> </span><span class="S6">", "</span><span class="S0"> </span><span class="S10">+</span><span class="S0"> </span>commit<span class="S10">.</span>AuthorDate<span class="S10">);</span><br /> | ||
=== Tree & Leaf === | === Tree & Leaf === |
Revision as of 10:52, 5 June 2010
Contents |
Playing around with git's objects
Repository
//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", "meinrad.recheis@gmail.com"));
// 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
repo.Status.Added.Contains("README");
//Access and manipulate the configuration
repo.Config["core.autocrlf"] = "false";
Commit
// 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);
Debug.Assert(tree.IsRoot);
Now you can browse throught that tree by iterating over its child trees
foreach(var subtree in tree.Trees) { ... }
Or printing the names of the files it contains
foreach(var leaf in tree.Leaves) { Console.WriteLine( leaf.Path); }
Blob
A Leaf is a Blob and inherits from it a method to retrieve the data as a UTF8 encoded string:
new Blob(repo, "49322bb17d3acc9146f98c97d078513228bbf3c0").Data
Blob also let's you access the raw data as byte array
new Blob(repo, "49322bb17d3acc9146f98c97d078513228bbf3c0").RawData
Branch
Get the current branch
var branch=repo.CurrentBranch
Console.WriteLine("Current branch is "+branch.Name);
Another way to get the current branch
repo.Head
Get master branch
var master = new Branch(repo, "master");
Get the abbreviated hash of the last commit on master
master.CurrentCommit.ShortHash
Create a new branch
var b = Branch.Create(repo, "foo");
7 ways to switch to our new branch
b.Checkout();
new Branch(repo, "foo").Checkout();
repo["foo"].Checkout();
Branch.SwitchTo(b);
Branch.SwitchTo("foo");
repo.CheckoutBranch("foo");
repo.CheckoutBranch(b);
Check if foo is current branch
Assert.IsTrue( b.IsCurrent );
Reset the branch to a previous commit (hard or soft)
master.Reset("HEAD^", ResetBehavior.Hard)
master.Reset("HEAD^", ResetBehavior.Soft)
Using git commands
Init
Initializing a new repository in the current directory (if GID_DIR environment variable is not set)
GitSharp.Commands.Init();
Initializing a new repository in the specified location
GitSharp.Commands.Init("path/to/repo");
Initializing a new repository with options
var cmd = new GitSharp.InitCommand("path/to/repo") { Quiet=false, Bare=true };
cmd.Execute();
Clone
Clone a repository from a public repository via http
GitSharp.Commands.Clone("git://github.com/henon/GitSharp.git", "path/to/local/copy");
Or using options
GitSharp.Commands.Clone(new CloneCommand() { Source="git://github.com/henon/GitSharp.git", GitDirectory="path/to/local/copy", Quiet=false, Bare=true});