GitSharp/Examples
From eqqon
(→Branch) |
(→Clone) |
||
(One intermediate revision not shown) | |||
Line 92: | Line 92: | ||
== Using git commands == | == Using git commands == | ||
=== Init === | === Init === | ||
- | Initializing a new repository in the current directory (if GID_DIR environment variable is not set) | + | <span class="S0"> </span><span class="S2">//Initializing a new repository in the current directory (if GID_DIR environment variable is not set)</span><br /> |
- | + | <span class="S0"> </span>Git<span class="S10">.</span>Init<span class="S10">(</span><span class="S6">"."</span><span class="S10">);</span><br /> | |
- | + | <br /> | |
- | Initializing a new repository in the specified location | + | <span class="S0"> </span><span class="S2">//Initializing a new repository in the specified location</span><br /> |
- | + | <span class="S0"> </span>Git<span class="S10">.</span>Init<span class="S10">(</span><span class="S6">"path/to/repo"</span><span class="S10">);</span><br /> | |
- | + | <br /> | |
- | Initializing a new repository with options | + | <span class="S0"> </span><span class="S2">//Initializing a new repository with options</span><br /> |
- | + | <span class="S0"> </span>var<span class="S0"> </span>cmd<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S5">new</span><span class="S0"> </span>InitCommand<span class="S0"> </span><span class="S10">{</span><span class="S0"> </span>GitDirectory<span class="S0"> </span><span class="S10">=</span><span class="S6">"path/to/repo"</span><span class="S10">,</span><span class="S0"> </span>Quiet<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S5">false</span><span class="S10">,</span><span class="S0"> </span>Bare<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S5">true</span><span class="S0"> </span><span class="S10">};</span><br /> | |
- | var cmd = new | + | <span class="S0"> </span>cmd<span class="S10">.</span>Execute<span class="S10">();</span><br /> |
- | cmd.Execute(); | + | |
- | + | ||
== Clone == | == Clone == | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | + | <span class="S0"> </span><span class="S2">//Clone a repository from a public repository via http</span><br /> | |
+ | <span class="S0"> </span>Git<span class="S10">.</span>Clone<span class="S10">(</span><span class="S6">"git://github.com/henon/GitSharp.git"</span><span class="S10">,</span><span class="S0"> </span><span class="S6">"path/to/local/copy"</span><span class="S10">);</span><br /> | ||
+ | <br /> | ||
+ | <span class="S0"> </span><span class="S2">// Or using options</span><br /> | ||
+ | <span class="S0"> </span>Git<span class="S10">.</span>Clone<span class="S10">(</span><span class="S5">new</span><span class="S0"> </span>CloneCommand<span class="S0"> </span><span class="S10">{</span><span class="S0"> </span>Source<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S6">"git://github.com/henon/GitSharp.git"</span><span class="S10">,</span><span class="S0"> </span>GitDirectory<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S6">"path/to/local/copy"</span><span class="S10">,</span><span class="S0"> </span>Quiet<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S5">false</span><span class="S10">,</span><span class="S0"> </span>Bare<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S5">true</span><span class="S0"> </span><span class="S10">});</span><br /> | ||
+ | <br /> |
Latest revision as of 10:58, 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 (Tree subtree in tree.Trees)
Console.WriteLine(subtree.Path);
//Or printing the names of the files it contains
foreach (Leaf 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:
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;
Branch
//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
Console.WriteLine(master.CurrentCommit.ShortHash);
//Create a new branch
var b = GitSharp.Branch.Create(repo, "foo");
// Switching to our new branch
b.Checkout();
//Check if foo is current branch
Debug.Assert(b.IsCurrent);
//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
Init
//Initializing a new repository in the current directory (if GID_DIR environment variable is not set)
Git.Init(".");
//Initializing a new repository in the specified location
Git.Init("path/to/repo");
//Initializing a new repository with options
var cmd = new InitCommand { GitDirectory ="path/to/repo", Quiet = false, Bare = true };
cmd.Execute();
Clone
//Clone a repository from a public repository via http
Git.Clone("git://github.com/henon/GitSharp.git", "path/to/local/copy");
// Or using options
Git.Clone(new CloneCommand { Source = "git://github.com/henon/GitSharp.git", GitDirectory = "path/to/local/copy", Quiet = false, Bare = true });