GitSharp
From eqqon
Documentation
- GitSharp online API documentation
- /Examples ... a collection of code samples demonstrating the intuitive API.
- /Compatibility of git# with respect to original git, .NET and Mono
- /Dependencies ... a list of included open source components and tools
- /Contributing to gitsharp. Everything you need to know to get started.
- Developer Docs
- File:Git Index Diagrams by Rolenun.pdf (Beware: IE may freeze)
What is Git?
Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git was initially designed and developed by Linus Torvalds for Linux kernel development.
Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do.
Git is used for version control of files, much like tools such as Mercurial, Bazaar, Subversion, CVS, Perforce, and Visual SourceSafe.
Git's key characteristics make it stand out against the other SCM tools:
- Strong and efficient support for non-linear development
- Distributed development
- Multiple protocol support such as HTTP, FTP, ssh, rsync, etc.
- Efficient handling of large projects
- Pluggable merge strategy
Popularity
According to a survey by the git community it is rapidly gaining more users. This is a graph of the survey results :
(borrowed from Mauricio Scheffer)
News
- October 28th: gitsharp 0.2 released.
- October 11th: gitsharp 0.1.3 released.
- October 8th: gitsharp 0.1.2 tagged.
- September 26th: First release (version 0.1.0).
- September 22th: We got a collaboration space where you can see the porting progress and who is working on what.
- September 19th: Rolenun significantly improved the command line interface. Caytchen implemented the Commands "git init" and "git clone".
- August 25th, 2009: Jim Radford added git# at his TeamCity integration server. We now have automatic builds on both, Windows and Mono. Since the other TeamCity account does not support Mono it can now be viewed as a code mirror ;)
- August 15th, 2009: Dan Rigby created the IRC channel #GitSharp on freenode. It's a nice place to chat a little or ask questions about git.
- July 2nd, 2009: Mauricio Scheffer has set up git# on the build and integration service teamcity.codebetter.com
- July 1st, 2009: Writing of blobs, trees and commits works
- June 15th, 2009: Reading of commit history, trees, blobs and tags works. See the demo browser screenshot below.
Public Echo
Most recent first:
- Mauricio Scheffer shows how to use GitSharp for correcting history
- Russian Linux magazine reports release of GitSharp (Russian)
- Japanese online magazine reports release of GitSharp (Japanese)
- German IT magazine reports release of gitsharp (German)
- InfoQ reports release of gitsharp
- Report about release of gitsharp on OSSS.cn (Chinese)
- The H reports release of gitsharp
- Miguel de Icaza writes a nice blog entry about our release His post triggers reports all over the world.
- Report on Linux magazine about GitSharp
- Miguel de Icaza blogs about GitSharp's progress
Agreed, git support on Windows could be better ...
... want to improve the situation?
Contribute to GitSharp
Every little bit helps:
- Link to the Git# website to promote the project.
- Tell your friends ...
- Code! Contact us and tackle an issue.
So let's all stop complaining about the situation, start rocking and have fun!
Git# --> Git for .NET and Mono
... a native Windows version of the fast & free open source version control system
GitSharp is an implementation of Git for the Dot.Net Framework and Mono. It is aimed to be fully compatible to the original Git and shall be a light weight library for cool applications that are based on Git as their object database or are reading or manipulating repositories in some way.
Navigation: Downloads | Sources | API Docs | Bugs & Issues | Integration Server | Mailing List | GitSharp.Demo
What you could do with Git#
- Git# as object oriented interface to your git repo
- Want to manipulate you git repo from C#? Want to calculate statistics or create a beautiful visualization? Use git#'s well designed object oriented API to access and manipulate repositories.
- Git# as object database
- Git is an object database with built-in history and branching. If you need to create snapshots of your application's configuration or your user's data with alternative configuration branches then use git. By moving the HEAD in the repository you can easily implement undo/redo operations. For instance, one could build a wiki on top of git# or a distributed content management system. Write-support is already implemented so you could already give it a try.
- Git# as (distributed) file system
- Git has been designed by Linus Torvalds to be a file system that is very good at content-tracking and keeping multiple distributed versions of the same content in sync. If your application needs to implement backup and/or content synchronization routines then it can build on top of git to do that.
- Git# as peer-to-peer content distribution system
- If you need to build a content distribution framework that will easily and efficiently transport content to different machines then you can easily build one on top of git.
- Git# as a future replacement of msysGit?
- msysGit currently is the most complete and usable native provider for git on Windows. The problem with msysGit is, that it can not be easily extended by or embedded in other applications. Apart from being a lightweight library, in the future git# might also become a real alternative to msysGit but we are still far away from that.
Status of the Project
We are continually porting over all additions that are made to JGit while improving the GitSharp API as well as the command line interface. GitSharp still is missing some crucial features, but it is already in a usable state. To get an idea check out the Demo!
We still need to implement most of the command line interface (git.exe) and some important features such as CRLF autoconversion, merge support and stuff ;).
- Development Status
- GitSharp.Core (equivalent to jgit) - Beta
- GitSharp.CLI (git.exe) - Alpha
- GitSharp (a user friendly api) - Alpha .... basically the API features the same as the core but is designed to be easier to use and learn. It's alpha because it does not yet provide as much features as the core.
The next release will bring you merge support!--Henon 22:51, 13 January 2010 (CET)
Roadmap
Upcoming Release
- Status
- Repository.Status ... done
- gitignore support ... done
- git.exe: Status command ... done
- Branch reset
- Branch.Reset( ResetBehavior.Hard / Soft / Mixed ) ... done
- git.exe: Reset command
- Index Operations
- Index.Add ... done
- don't add ignored files in Index.AddAll(...)
- git.exe: Add command
- Index.Remove ... done
- git.exe Remove command
- Index.Checkout ... done
- Branch switching
- Branch.Checkout ... done
- git.exe Checkout command
- Committing
- Commit.Create(...) ... done
- Index.Commit ... done
- Commit.Create( paths)
- git.exe: Commit command
- Merge support <---- henon is working on this
- Merge strategies Ours and Theirs ... done
- Merge strategy recursive
- Fast forward merging
- Rename detection
- Merging conflicting paths on file level using conflict syntax
- Transport <---- nulltoken is working on this
- Track down various transport related bugs reported on the list
- CloneCommand ... done
- git.exe Clone command ... done
- FetchCommand ... done
- git.exe Fetch command
- PushCommand
- git.exe PushCommand
- PullCommand
- git.exe PullCommand
Future Releases
- CRLF conversion
- git-svn support <---- Dan Rigby is working on this
- http-server
Projects using GitSharp
GitSharp.Demo
GitSharp.Demo is a small repository browser project that demonstrates the use of the GitSharp library and the user oriented API.
The source demonstrates how easy it is to ...
- open and interact with a git repository
- iterate over the file-tree of a specific revision
- get the contents of a single file of a specific revision
- get the changes between two commits
- display a modification as text diff
TicGit.net
TicGit.net a small distributed issue tracker that uses git to keep track of tickets. It demonstrates the use of gitsharp's commiting API. TicGit is a toy project inspired by Scott Chacon's ruby application "ticgit".
License
Git# is derived from the Java library jgit and is released under the same BSD license as jgit.
Please refer to the LICENSE.txt files for the complete license, and please refer to the individual source file header to determine which license covers it and who contributed and therefor holds copyrights to the files.
Copyright (C) 2007-2009, The Git Development Community and the GitSharp Team See source file headers for specific copyrights of contributors
All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, are permitted provided that the following
conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of the Git Development Community nor the GitSharp Team nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Thanks and Credits
Thanks to all the kind people who contributed in one way or another. These are the credits:
- Dave Cameron: for fixing bugs
- Björn Carlson (hackerbaloo): for killing bugs that crept into the core
- Emeric Fermas (nulltoken): for eliminating some of the hardest to find bugs and for verifying the complete test suite against jgit
- Martinho Fernandes (eue): for fixing bugs
- Andriano Machado (ammachado): for porting massive amounts of code and tests, also fixing many bugs
- Jim Radford: for the continuous integration server account and the support
- Gil Ran: for porting and fixing lots of tests and initial efforts on Mono
- Meinrad Recheis (henon): I started this project and put all my effort into having it take off
- Dan Rigby: for setting up the #GitSharp irc channel as well as porting and fixing tests
- rolenun: for the command line interface framework. hey, what is your real name?
- Stefan Schake (caytchen): for porting huge parts of the transport layer, and hunting down nasty bugs.
- Mauricio Scheffer (mausch): for the testing and build server expertise and CI server trouble shooting
- Neil Stalker (nestalk): for caring much about gitsharp's Mono compatibility and squashing bugs
- Kevin Thompson: for initially porting large amounts of code and letting me rise the baby
Furthermore, much appreciation and thanks to ...
- Linus Torvalds and the git community for creating and maintaining it.
- Shawn O. Pearce and the jgit/egit community. Git# is based on their excellent work.
--Henon 22:45, 13 October 2009 (CEST)